启动完全教程GRUB2.docx
- 文档编号:23052953
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:40
- 大小:1.34MB
启动完全教程GRUB2.docx
《启动完全教程GRUB2.docx》由会员分享,可在线阅读,更多相关《启动完全教程GRUB2.docx(40页珍藏版)》请在冰豆网上搜索。
启动完全教程GRUB2
。
/etc/default/grub示例
文件位于:
/etc/default/目录下
这个目录包含很多其他文件所以不要以为仅仅被GRUB使用。
grub文件是一个被00_header脚本解析的文本文件。
您可以在这里更改如果您想改动的话。
我们稍侯在定制部分细谈。
现在我们知道了文件是什么样的,让我们看看怎么使用。
基本用法
是将我们的理论知识转化为实际行动的时候了。
GRUB2如何工作?
GRUB2这样工作:
/etc/default/grub包含定制化;/etc/grub.d/脚本包含GRUB菜单信息和操作系统启动脚本。
当运行update-grub命令时,它读取grub文件的内容、执行grub.d中的脚本来创建grub.cfg文件。
就是这样。
想要更改grub.cfg文件,您需要编辑grub文件或者grub.d下面的脚本。
脚本是被执行的,这意味这他们拥有执行权限,如果您取消了执行权限,他们将不会执行。
这意味着您可以在grub.d下放多个文件,您想放多少就放多少,像update-grub能读的shell脚本那样长。
如果您想使用他们,就激活可执行权限(chmod+x),反之亦然,去掉可执行权限(chmod–x)。
让我们来看一下这些脚本:
拿00_header和05_debian_theme作为示例:
40_custom更有意义,但是它并没有告诉我们怎么定制脚本。
不要担心,我们会稍侯学习所有东西。
添加新的GRUB脚本
添加一项新的启动选项,您必须遵循一些基本语法:
创建一个新文件并且以数字和下划线作为文件名的前一部分。
如果您想把启动项放在其他选项的上边,使用一个稍小的数字,如果您想放在其他的后边,使用一个稍大的数字。
例如:
11_something将被放在操作系统默认条目的后边,反之08_something将被放置在10_linux条目的上方。
下一步是写实际内容,下面是例子:
#!
/bin/sh-e
echo"Somestring"
cat< menuentry"Something"{ setroot=(hdX,Y) --bootparameters-- } EOF 让我们仔细看一下这个文件: #! /bin/sh–e第一行是shell脚本的声明,必须放在第一行。 echo"Somestring"输出字符串“Somestring”,这样在执行update-grub的时候您将看到这个字符串,如果您不想看到命令的输出,可以重定向到标准错误或者/dev/null: echo"Somestring">&2 例如: echo"AddingopenSUSE11.2" Cat< menuentry“Something”是菜单的名字。 例如: Linux setroot=(hdX,Y)–设置根设备。 危险! GRUB2使用分区标记从一开始而不是像GRUBlegacy版本那样从0开始! 这是非常非常重要的并且是必须记住的! 换句话说,标记设备是还是从0开始,但是分区从一开始。 比如,sda1在GRUB2中表示为(hd0,1),但是之前的版本表示为(hd0,0)! --bootparameters-- 每个操作系统都不同,在Linux中,您使用可能类似于: linux/boot/vmlinuz initrd/boot/initrd.img 但是在Windows中,您可能使用: Chainloader(hdX,Y)+1 所以,一个完整的脚本应该是这样子: #! /bin/sh-e echo"AddingmycustomLinuxtoGRUB2" cat< menuentry"MycustomLinux"{ setroot=(hd0,5) linux/boot/vmlinuz initrd/boot/initrd.img } EOF 或者为了启动Windows,像这样: OrforWindows,somethinglike: #! /bin/sh-e echo"AddingWindows8toGRUB2menu" cat< menuentry"Windows8"{ setroot=(hd0,1) chainloader(hd0,1)+1 } EOF EOF结束GRUB条目。 现在我们拥有了一个文件,使之可执行: chmod+xXX_new_os_script GRUB2命令: 还有一件我想在这里强调的事情是包含在cat< 也就是说,cat< 我们在脚本中已经使用了多个不同的命令。 有些您可能已经在GRUBlegacy版本中见过,有些则是新的和陌生的。 不要担心,有一个完全的里表,包括跟GRUBlegacy的对比,一些命令被替换也有一些新加的命令,可以查看GRUB2命令列表 更新GRUB 新脚本已经就位,但是GRUB菜单(grub.cfg)并没有被更新。 我们需要执行update-grub命令来让一切发生。 update-grub 这里有一个来自双重启动的配置例子,稍侯我们会更加仔细的检查。 我已经添加了两个Kubuntu条目和一个Ubuntu条目来启动UbuntuGRUB菜单。 我做这些是为了摆脱默认的10_linux,10_linux很丑陋并且在名称中使用公共内核的名字,外加相同的调用Ubuntu和Kubuntu。 但是让我们慢下来。 我们第一个任务是添加新的脚本。 我们确定它能够正常启动以后,我们会删除副本。 重新启动以后,我们会得到这样的画面–对于图片的不美观我很抱歉。 一旦我们使用新脚本启动成功,我们可以去掉10_linux的执行权限。 通过改变脚本名称中的数字改变脚本启动顺序 您也可以更改数字,比如,我更改Kubuntu条目到08和09,这样他们就优先启动,在默认条目之前。 替换默认条目 这里有些事情可能您想试试,像我们上边提到的。 为了确认您的新脚本可以正确的启动,您可以查看 grub.cfg中可以工作的条目来确认您使用了正确的linux和initrd行。 这里是现成的例子: 相应的,我创建了新脚本: 操作系统探测器 操作系统探测器同样对您有帮助。 它会找到您硬盘中其他的启动条目并且添加到菜单中。 您可以使用这些信息来创建自己的脚本。 再看一次grub.cfg文件的os-prober部份的更多数据: 重装GRUB GRUB2在您已经启动了系统以后也可以重新安装。 您不需要启动其他环境(如光盘启动)。 只需要对设备或者分区执行install-grub命令即可。 grub-install 这里的 重要的一点是您应该注意一下命令的输出。 如果您执行命令的时候有其他的硬盘连接在电脑上,GRUB2会把他们添加到映射列表。 这应该不会造成什么伤害,但是如果条目不正确(输出信息中包含grub-installreportsincorrectdevices),那么先拿掉它们。 这是命令输出的例子: 您需要打开/boot/grub/device.map文件,删除错误的条目,像我们这里指向/dev/sdb的这条。 然后从新执行gru-install命令。 简短的总结 就是这些了,您现在拥有了开始工作的所有工具。 为了更加清楚一点,我对GRUB2的介绍和基本用法部分做了一个简短的总结,我们来看一下: GRUB2主要有三个部份: 1./etc/default/grub --这个文件包含了GRUB2的菜单。 2./etc/grub.d/ --这个目录包含了生成GRUB2菜单的脚本。 3./boot/grub/grub.cfg --GRUB2的配置文件,勿直接编辑。 update-grub命令读取/etc/grub.d目录中的可执行脚本,并且按照数字顺序执行来生成grub.cfg文件,这期间00_header会读取/etc/default/grub文件中的配置。 启动条目来自多个地方,默认的来自安装GRUB的发行版,还有在硬盘上探测到的其他操作系统,外加用户添加shell脚本增加的定制条目。 添加或者删除某个条目,您可以通过更改脚本的权限实现,并不需要删除它们。 GRUB2可以在任何时候重新安装,包括通过GRUB2启动的系统中。 有问题么? 很好,正如您看到的,这非常简单。 现在,让我们看一下现实的情况。 之后,我们会自定义GRUB2并且看一下如何从各种错误和配置错误中恢复。 现实多重启动情况 在这一部分,我们讨论一下几种比较常见的多重启动案例,包括GRUB和GRUB2合成,Windows和Linux并列,chainloading和其他。 其中的一些试验是分别在不同的物理系统中进行的,所以一些启动菜单的截屏是实拍图片,所以一部分可能看起来有点古怪并不像您想象的那么动人,但这仅仅是为了保证您使用GRUB2进行其他管理任务也同样简单,只需要多一点耐心和谨慎。 双重启动: 使用GRUB2启动两个操作系统 这可能是双重启动最简单的配置了,连个操作系统都是用GRUB2,所以他们可以容易的互动。 两个操作系统分别是Ubuntu9.10和Kubuntu9.10,都是用Ext4格式。 Ubuntu先安装,同时将GRUB2安装到了/dev/sda的MBR,然后安装Kubuntu,重写了MBR中的GRUB。 然而,操作系统探测器成功的发现了Ubuntu并且添加了Ubuntu的启动项。 如果您读过我的Kubuntu教程,您会发现Kubuntu启动项也是标为Ubuntu的,这可能会和机器上的Ubuntu混淆。 这一部分,我们将: ∙学习如何编辑已有的条目使之更加漂亮。 ∙添加新的启动项并且为已有的排序。 这会给我们一些线索,关于GRUB2如何工作和怎么更改它。 之后,我们看一下从legacyGRUB启动引导GRUB2,反之亦然。 再之后我们加入Windows的引导。 我们已经看了一点测试用例,有默认的条目,但是并不好看,我们想替换掉它们。 所以参考grub.cfg文件,检查10_linux使用的语法,就像我们前面做的,拷贝相应的部分到我们的新脚本,08_9_10_kubuntu和08_9_10_kubuntu_recovery. ,我们添加可执行权限(chmod+x)并更新GRUB(update_grub),非常简单。 重启并确认每个都可以正常工作以后,我们拿掉条目已经被替换了的10_linux。 工作完成,简单至极! 双重启动: 两个操作系统使用GRUBlegacy和GRUB2的结合。 这是一个有趣的案例。 我们假设您有两个操作系统,像Ubuntu,使用GRUB2,并且从Ext4启动,还有一个老一点的发行版,比如openSUSE11.2,也使用Ext4,但是使用GRUBlegacy。 我们将: ∙利用openSUSE的GRUB启动Ubuntu ∙使用Ubuntu的GRUB启动openSUSE ∙编辑两个系统的条目使之正常工作。 让我们开始吧。 决策: 哪一个是默认的? 这是您需要决定的,我们两个启动引导器,您需要选择一个作为默认的。 如果您问我,现在为止,您应该使用GRUBlegacy作为您的默认启动引导器,因为它有足够好的产品质量并且广为人知,确定支持引导。 使用GRUB2将置您于少数派之列。 好了,如果您将使用GRUBlegacy来启动,您应该: ∙ 在安装发行版的时候将GRUB安装到MBR,在我们的例子中是安装openSUSE的时候,在安装的时候注意一点细节。 ∙将GRUB2安装到使用它的发行版所用的主分区,这个例子中的Ubuntu,同样,请注意细节。 否则,如果您计划使用GRUB2作为默认,您需要使用另一个思路。 如果您不太确认,再检查一下分区表。 在我们的例子中,Ubuntu先安装并且将root目录安装到了/dev/sda6将home目录安装到了/dev/sda7.然后安装openSUSE到/dev/sda1,home没有单独分区。 因为我们希望使用GRUBlegacy引导,所以: ∙Ubuntu启动引导器需要安装到/dev/sda6 ∙openSUSE启动引导器需要安装到MBR(/dev/sda) 现在都完成了,我们启动一下看看会发生什么。 安装openSUSE以后,您会注意到GRUB菜单只包含openSUSE条目。 原因是GRUBlegacy并不知道如何直接获取GRUB2布局所以不能找到添加条目到菜单,您需要手工的做这些。 启动到openSUSE并使用文本编辑器打开menu.lst文件,记得先备份一下! 我们现在确实不知道GRUBlegacy怎么使用GRUB2的菜单项,所以我们假设它跟Windows是一样的,我们将chainload另外一个系统,将控制权交给它的启动引导器。 这样可以么? 我不知道,试一试吧! 我们正在用GRUB经验来适应新的情况。 如果您不明白图片中是什么也不要紧,您只需要明白,我们添加了最后面的这3行: titleUbuntu9.10KarmicKoala root(hd0,5) chainloader(hd0,5)+1 启动时候,您将看到菜单(再次为丑陋致歉) 如果您尝试启动Ubuntu9.10KarmicKoala这一项,您会遇到这样一个恶心的错误(Error13): 这类错误通常在Linux用户尝试启动Windows和Mac分区的时候会遇到。 对Windows来说,解决办法是重新映射分区、隐藏分区或者激活它们,一般都可以解决。 而Mac引导,跟这个问题相似。 来自openSUSE的GRUBlegacy不能获取Ubuntu分区和GRUB2结构,我们需要一个不同的方式解决问题。 更多信息,查看GRUB错误信息。 从openSUSE启动Ubuntu的正确方法 我们需要做的是,重新回到openSUSE打开nenu.lst文件,改成这样: (为不能看到图片的读者考虑)我们添加了下面这些到menu.lst文件: titleUbuntu9.10KarmicKoala root(hd0,5) kernel/boot/grub/core.img savedefault boot 您可能想知道我们做了什么,答案是,core.img文件是一个微型的内核镜像,这个镜像允许您启动适当的驱动器而且正确地识别和初始化真正的内核。 您可以把它看作传统initrd.img文件的集合。 重启以后您会看到GRUB2菜单,选择一个启动。 一旦进入了Ubuntu,如果您愿意可以做一点小动作,就是,回到update-grub脚本。 它可以把安装的openSUSE添加到菜单中。 这样您就有递归的GRUB菜单了。 这不是必须的,但是非常有趣而且可以练习知识和控制的能力。 另一个有趣的案例是Mandriva2010和Ubuntu9.10双启动。 安装Mandriva的时候,您在第一次启动之前就可以选择手动更改GRUB启动引导器。 事实上,很多发行版都允许您在一定程度上配置启动菜单。 只要知道需要什么,您就可以通过安装时候配置菜单节省不少时间。 下面是在Mandriva安装时候编辑GRUB菜单。 基本上,这和我们之前在openSUSE中所做的工作一样,您可以回去再看一遍。 双启动Windows7和Ubuntu 这可能会有一部分用户感兴趣,一般来讲,和前面是一样的。 然而,我为这个地方加了点料,GRUB升级到GRUB2. 测试案例: 一台电脑双启动Windows7和Ubuntu9.04,像双启动指南中讲的那样。 Ubuntu9.04使用GRUBlegacy,但是可以升级到GRUB2,这也是我们将要做的。 所以,我们先进行升级,注意细节,我们需要保证Ubuntu和Windows启动正常。 把GRUBlegacy升级到GRUB2 首先安装GRUB2包 sudoapt-getinstallgrub2 查看终端,您需要回答几个提示。 Chainloadfirst 第一个是直接把GRUB2安装到MBR还是先安装到Ubuntu的主分区并且使用GRUBlegacy通过chainload测试一下。 我们前面已经做过,就是通过调用core.img文件,所以我们知道怎么做。 简洁起见,我们跳过这一步。 下一步是确认命令行参数,大多数人不需要做任何更改。 GRUB2就安装好了: 在我们重启之前,确认grub.cfg文件已经正确的部署,并且包含正确的菜单项,指向正确的设备和分区。 如果您需要确认他们的顺序正确,可以使用fdisk命令。 Ubuntu菜单项: Windows菜单项: 现在可以重启测试一下。 您的GRUB菜单应该已经改变并且顶部包含一个指向GRUB2的chainload菜单项。 可能出现的错误: 当心尝试进入GRUB2的时候可能遇到GRUBError11或者GRUBError15. 比如,GRUBError11意味着选择了错误的设备,也可能是您通过ID而不是序号启动设备,这种情况下您必须更改其中一个字符串来让它正常工作。 为了解决这个问题,您将需要选中Chainload菜单项,点e键进行编辑,然后更改root行映射到正确的设备。 不要忘记您现在是使用GRUBlegacy,所以分区的序列数是从0开始的。 最糟糕的情况下,逐个测试root(hdX,Y)知道你找到正确的那个。 改了root行以后回车,然后点击b键启动。 作为替代方案,如果您的GRUB比较古怪,使用设备ID而不是序列数字来调用,您将需要使用uuid替换以后的ID串,然后您应该就可以启动了。 这篇文件有不错的实例和截图可供参考。 最终,您应该看到这样的GRUB2菜单: 正如您看到的,这里既有Ubuntu菜单项也有Vista(或者Windows7)菜单项,一切看起来良好,现在,把它们分别启动来测试一下是否可以正常工作。 直到您感到满意了,启动到Ubuntu去完成迁移过程。 您现在可以把GRUB2写入MBR并且设置为默认启动引导器。 sudoupgrade-from-grub-legacy 注意设备映射表需要的话做相应的改变。 好了,我们完成了。 我们已经学会了怎么更新GRUB,处理启动错误,正确配置Windows和Linux的双启动。 附加的测试用例 三重启动 从这里开始,一切都非常简单,你想使用什么就使用什么。 如果您正在使用GRUBlegacy作为启动引导器,那么您将使用前面文章中所获得菜单项,添加GRUB2菜单项的时候使用/boot/grub/core.img. 如果您在使用GRUB2,那么系统探测器会发现其他的操作系统。 如果您不喜欢那些标题,可以自定义菜单项。 现在,世界在您手中! 定制GRUB菜单 比如说我们想编辑GRUB2菜单,包括默认选择,超时和其他选项。 编辑/etc/default/grub 这个文件包含着一些有趣的选项,获取您想改变一下,包括默认选项、默认超时设置、还有其他一些额外的选项。 GRUB_DEFAULT=0 指定默认选中的菜单项。 从0计数,您可以更改到您想设置为默认的那一项。 如果您改为GRUB_DEFAULT=saved,它会选中最后一项。 GRUB_TIMEOUT="10" 指定默认的超时时间(以秒记),您可以改为任何数字,但是我们不推荐您改的太小,改为-1会让GRUB一直等待知道用户选择并敲回车键。 您也看到了,还有很多其他设置,不不会每个都说。 重要的是您记得它们在什么地方可以找到。 不要盲目的改变,改之前一定要备份,更改时请参考官方文档。 还有一件您可能感兴趣的事情是去掉recovery菜单项。 从菜单中去掉recovery菜单项。 /etc/default/grub文件最后一行允许您关闭recovery模式菜单项。 只需要取消注释符号并且更新GRUB。 GRUB_DISABLE_LINUX_RECOVERY="true" 从菜单中去掉内存测试(memtest) 如果您不想让GRUB菜单包含memtest项,可以将20_memtest86+这个脚本设置为不可执行,然后更新GRUB。 sudochmod-x20_memtest86+ 更改菜单行标题 除了使用修正的脚本替换10_linux脚本工作以外,您可以可直接修改10_linux脚本。 更多信息可以参考这篇文章。 更改主题(启动背景图片) 您可能希望使用一个漂亮的图片来替换令人生厌的深蓝色。 不用担心,这很容易,只需要编辑一下05_debian_theme脚本。 第一件事是找一些您喜欢的图片。 注意一点,图片和菜单项需要有一定的差异,这样才不影响您读菜单项。 下面是有自己的例子,参考一下: 然后,您需要一个目录来存放这些图片。 GRUB2默认的是从/usr/share/images/desktop-base目录下获取图片。 这或许是个好地方,如果您不喜欢可以自己创建一个,比如/usr/share/inmages/grub,像这里讲的。 把图片拷贝到那儿,注意扩展名,GRUB2默认支持.png和.tga。 当然您也可以使用.jpg。 下一步就是编辑05_debian_theme脚本并且更改相关菜单项。 我所做的是注释掉原有的读取如片的for循环,然后创建自己的。 如果您对这不是很熟悉,应该推迟主题的更改到以后再做。 我的文件放在: /usr/share/images/grub/dark.png. 文件改过以后,执行update-grub来更新grub.cfg文件,如果一切正常,您会在终端中看到“FoundDebianbackground”的提示。 重启试一试: 您看到了,我选择的背景图片太失败了,都看不到文字了! 所以,仔细挑选您想要使用的图片,使用一个渐变的主题是个不错的注意。 更多详细信息,可以参考官方维基文档。 GRUB2恢复(recovery) 从启动失败中恢复 如果您毁坏了您的GRUB2怎么办? 应该有方法重新安装并且转危为安吧? 不错,一如既往,一个简单的方法和一个复杂的方法: 简单方法: 超级GRUB盘(SuperGrubDisk) 这个工具配合GRUB2工作,不要担心,放入光驱,启动然后恢复循坏的GRUB。 复杂方法: 使用启动光盘手工解决 您将需要一个附带GRUB2的启动光盘,比如Ubuntu或者Kubuntu。 利用光盘启动预览系统,mount硬盘并且把GRUB2安装到MBR. 这里是您需要的命令(假设硬盘为/dev/sda),您需要将安装了发行版/boot目录的分区mount进来,可能还会有一个单独的分区,这取决于您的安装情况。 Mount以后,我们回到install-grub命令 mount/dev/sda1/mnt/ grub-install--ro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 启动 完全 教程 GRUB2