收藏 分享(赏)

GRUB2启动引导器完全教程.doc

上传人:精品资料 文档编号:9447943 上传时间:2019-08-08 格式:DOC 页数:41 大小:1.90MB
下载 相关 举报
GRUB2启动引导器完全教程.doc_第1页
第1页 / 共41页
GRUB2启动引导器完全教程.doc_第2页
第2页 / 共41页
GRUB2启动引导器完全教程.doc_第3页
第3页 / 共41页
GRUB2启动引导器完全教程.doc_第4页
第4页 / 共41页
GRUB2启动引导器完全教程.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、GRUB2 启动引导器 完全教程本教程仅讨论 GRUB 版本 2,流行的启动引导器的下一代。如果您在寻找常规 GRUB 的教程,请查看这篇文章。欢迎来到 GRUB2 启动引导器教程!你肯定已经读过我的关于 GRUB legacy 版本的指南。在过去的两年半里面,它独自积累了五十万次阅读,在全世界的计算机使用者中相当流行和实用。我希望利用我的 GRUB2 重新创造同样的成功。目标为用户使用 GRUB 作为他们的启动引导器实现启动任何其钟情的类 UNIX 操作系统或者多重启动他们的计算机提供一个简单、实际、循序渐进、行之有效的教程,从而允许他们快速、简单、毫不不费力的控制他们的系统启动流程。在这个

2、教程里,您将学到如何使用 GRUB2,添加和删除菜单,定制标题和启动选项,双重启动和三重启动操作系统,结合 GRUB 和 GRUB2,我们甚至看一下 Windows 如何加入这个模式。之后,我们将学习如何从错误中恢复。目录1. 目录2. 警告3. GRUB2 路标4. GRUB2 介绍 新布局 Grub.cfg 文件实例 /etc/grub.d/ 目录示例 /etc/default/grub 示例5. 基本用法 GRUB2 如何工作? 添加新的 GRUB 脚本 更新 GRUB 通过改变脚本名称中的数字改变脚本启动顺序 替换默认条目 操作系统探测器 重装 GRUB 简短的总结6. 现实多重启动情

3、况 双重启动:使用 GRUB2 启动两个操作系统 双重启动:两个操作系统使用 GRUB legacy 和 GRUB2 的结合。 双启动 Windows 7 和 Ubuntu 把 GRUB legacy 升级到 GRUB27. 附加的测试用例 三重启动8. 定制 GRUB 菜单 编辑 /etc/default/grub 从菜单中去掉内存测试(memtest) 如果您不想让 GRUB 菜单包含 memtest 项,可以将 20_memtest86+这个脚本设置为不可执行,然后更新 GRUB。 更改菜单行标题 更改主题 (启动背景图片)9. GRUB 2 恢复(recovery) 从启动失败中恢复1

4、0.观察小问题 内核损坏 内核崩溃转储机制 命令名称11.GRUB legacy 对比 GRUB 2 GRUB legacy GRUB 2 结论12.更多阅读 (文档和链接) 官方: 其他有用的 GRUB资源13.结论14.更新警告警告!GRUB2 还是测试软件。尽管它已经获得 Ubuntu 的青睐,本身没有质量问题。您可以没有问题的使用,虽然可能存在损害,但那离您是非常遥远的,即使真的发生,损害也只是轻微的一点点。您需要认识到这些。另外,任何处理危险的任务比如执行系统本身的危险命令,磁盘分区,启动序列,镜像,等等的时候,您应该时刻准备着最坏的情况。这意味着: 对您的数据来考虑您必须有一个可靠

5、的备份过程。 您必须拥有从灾难中迅速恢复的知识和工具。 这包括可以恢复系统的前一个镜像,修复损毁。 配置,恢复启动引导器,还有更多。 您必须对您所做的有信心。现在您知道了这些,让我们高兴并且安全的开始。那么一定要铭记,GRUB2 还是测试版。尽管同样我们可以想到 Google Mail,它测试了六年或者更多,您必须小心练习。更重要的是,这篇指南的内容和内容相关可能会随着 GRUB2 被做成产品而改变,所以请持续关注更新。GRUB2 路标这是您使用 GRUB2 之前需要考虑的。什么时候 GRUB2 会成为类 UNIX 操作系统的实际启动引导器?目前,GRUB legacy 版本工作的很好并且还将

6、持续很多年。像 RedHat 和 Novell 这样的公司为了服务器发行版会提供长期的技术支持,GRUB legacy 还是作为重要参与者存在五到十年。在桌面领域,采用比率会快一些,但是不要期待短期内会有奇迹发生。尽管如此,这并不影响探索。请认识到您很可能会遇到兼容性问题而抛锚,特别是很多保守的发行版对新技术的支持并不是很及时。到目前为止,GRUB2 仅仅被 Ubuntu 家族使用,Ubuntu 家族占了桌面市场的三分之一到一半。这使得这篇指南变得有意义,因为两个或者三个 Linux 家庭使用者中就会有一个希望了解GRUB2 信息并学习它的使用技术。让我们现在到真正的技术中去。GRUB2 介绍

7、在开始之前,我强烈推荐您阅读我的关于 GRUB 常规版本的指南,这会帮助您更好的理解这篇文章。GRUB2 引入了很多新的更改。GRUB2 有更好的移植性和模块性,支持非 ASCII 码字符,动态加载模块,真实内存管理,还有更多。所有这些几乎都和大多数使用者无关。您需要知道的仅仅是配置文件的改变和 GRUB2 的操作方法。新布局GRUB legacy 版本将文件放置在/boot/grub/ 目录下,包括在启动过程中读取并显示内容给用户的 menu.lst 文件。GRUB2 将文件主要放在三个地方:/boot/grub/grub.cfg -这是替代 menu.lst 的主要配置文件。不像 menu

8、.lst 那样,grub.cfg 不能手动更改!我强烈建议不要尝试干预这个文件,无论是使用 chattr 命令或者其他。由他去就行。/etc/grub.d/ -这个新文件夹包含 GRUB 脚本。这些文件是创建 grub.cfg 文件的基础。当相关的 GRUB 命令执行以后,这些脚本以某个特定的顺序被读取并且创建 grub.cfg文件。/etc/default/grub -这个文件包含 GRUB 脚本读取并且写入 grub.cfg 文件的 GRUB菜单。它是 GRUB 的定制部分,类似于老的 menu.lst 文件,实际启动项目除外。这意味着,如果您想改变 GRUB 菜单,您将必须编辑已经存在的

9、脚本或者创建新的脚本,然后更新菜单。相比老的 GRUB,这更类似于 LILO,LILO 允许在运行中编辑菜单。Grub.cfg 文件实例文件位于:/boot/grub/:Grub.cfg 文件看起来是这样的:它实际上并不有趣,因为它仅仅是个脚本。多数人可能不想读它的内容或者不能完全理解它们。但是这个文件在任何您更新了 GRUB 菜单的时候还是值得浏览一下,以确保正确的条目像您预期的一样被加了进来。但是仅仅在您熟悉脚本的情况下!/etc/grub.d/ 目录示例这是刚刚安装的系统中/etc/grub.d/文件夹下的所有文件,以 Kubuntu 为例:我们来看一下这些脚本:00_header 是从

10、/etc/default/grub 中加载 GRUB 设置的脚本,包括超时、默认启动项和其他。我们会稍侯了解更多。05_debian_theme 定义背景、颜色和主题。这个脚本的名字很明确将会改掉当别的版本采用GRUB 的时候。10_linux 为已经安装的发行版加载菜单项。20_memtest86+ 加载 memtest(内存测试)功能30_os-prober 这个脚本将会扫描硬盘上的其他操作系统并且添加到启动菜单。40_custom 是一个您可以用来创建新加的条目到菜单的模板。您是不是已经认识到了脚本名字中数字的使用?不错,这有点像不同的 runlevel 的 Start/Kill脚本的顺

11、序。数字定义了优先级。这意味着 10_linux 会比 20_memtest86+先执行所以在启动菜单项中的位置更加靠前一点。这些脚本也不太有趣。像 grub.cfg 文件一样,他们也不希望被编辑,除了 40_custom。您必操作这些脚本的时候须非常小心。我们稍侯看看它们的样子并且学习一下如何使用它们。/etc/default/grub 示例文件位于:/etc/default/目录下这个目录包含很多其他文件所以不要以为仅仅被 GRUB 使用。grub 文件是一个被 00_header脚本解析的文本文件。您可以在这里更改如果您想改动的话。我们稍侯在定制部分细谈。现在我们知道了文件是什么样的,让

12、我们看看怎么使用。基本用法是将我们的理论知识转化为实际行动的时候了。GRUB2 如何工作?GRUB2 这样工作:/etc/default/grub 包含定制化; /etc/grub.d/脚本包含 GRUB 菜单信息和操作系统启动脚本。当运行 update-grub 命令时,它读取 grub 文件的内容、执行 grub.d 中的脚本来创建 grub.cfg文件。就是这样。想要更改 grub.cfg 文件,您需要编辑 grub 文件或者 grub.d 下面的脚本。脚本是被执行的,这意味这他们拥有执行权限,如果您取消了执行权限,他们将不会执行。这意味着您可以在 grub.d 下放多个文件,您想放多少

13、就放多少,像 update-grub 能读的 shell脚本那样长。如果您想使用他们,就激活可执行权限(chmod +x),反之亦然,去掉可执行权限(chmod x)。让我们来看一下这些脚本:拿 00_header 和 05_debian_theme 作为示例:40_custom 更有意义,但是它并没有告诉我们怎么定制脚本。不要担心,我们会稍侯学习所有东西。添加新的 GRUB 脚本添加一项新的启动选项,您必须遵循一些基本语法:创建一个新文件并且以数字和下划线作为文件名的前一部分。如果您想把启动项放在其他选项的上边,使用一个稍小的数字,如果您想放在其他的后边,使用一个稍大的数字。例如:11_so

14、mething 将被放在操作系统默认条目的后边,反之 08_something 将被放置在10_linux 条目的上方。下一步是写实际内容,下面是例子:#!/bin/sh -eecho “Some string“cat &2例如: echo “Adding openSUSE 11.2“Cat 这里的可以是/dev/hda, /dev/sdb, /dev/sdc4 等等。重要的一点是您应该注意一下命令的输出。如果您执行命令的时候有其他的硬盘连接在电脑上,GRUB2 会把他们添加到映射列表。这应该不会造成什么伤害,但是如果条目不正确(输出信息中包含 grub-install reports inc

15、orrect devices),那么先拿掉它们。这是命令输出的例子:您需要打开/boot/grub/device.map 文件,删除错误的条目,像我们这里指向/dev/sdb 的这条。然后从新执行 gru-install 命令。简短的总结就是这些了,您现在拥有了开始工作的所有工具。为了更加清楚一点,我对 GRUB2 的介绍和基本用法部分做了一个简短的总结,我们来看一下:GRUB2 主要有三个部份:1. /etc/default/grub -这个文件包含了 GRUB2 的菜单。2. /etc/grub.d/ -这个目录包含了生成 GRUB2 菜单的脚本。3. /boot/grub/grub.cf

16、g -GRUB2 的配置文件,勿直接编辑。update-grub 命令读取 /etc/grub.d 目录中的可执行脚本,并且按照数字顺序执行来生成 grub.cfg 文件,这期间 00_header 会读取/etc/default/grub 文件中的配置。启动条目来自多个地方,默认的来自安装 GRUB 的发行版,还有在硬盘上探测到的其他操作系统,外加用户添加 shell 脚本增加的定制条目。添加或者删除某个条目,您可以通过更改脚本的权限实现,并不需要删除它们。GRUB2 可以在任何时候重新安装,包括通过 GRUB2 启动的系统中。有问题么?很好,正如您看到的,这非常简单。现在,让我们看一下现实

17、的情况。之后,我们会自定义 GRUB2 并且看一下如何从各种错误和配置错误中恢复。现实多重启动情况在这一部分,我们讨论一下几种比较常见的多重启动案例,包括 GRUB 和 GRUB2 合成,Windows 和 Linux 并列,chainloading 和其他。其中的一些试验是分别在不同的物理系统中进行的,所以一些启动菜单的截屏是实拍图片,所以一部分可能看起来有点古怪并不像您想象的那么动人,但这仅仅是为了保证您使用 GRUB2进行其他管理任务也同样简单,只需要多一点耐心和谨慎。双重启动:使用 GRUB2 启动两个操作系统这可能是双重启动最简单的配置了,连个操作系统都是用 GRUB2,所以他们可以

18、容易的互动。两个操作系统分别是 Ubuntu9.10 和 Kubuntu9.10,都是用 Ext4 格式。Ubuntu 先安装,同时将 GRUB2 安装到了/dev/sda 的 MBR,然后安装 Kubuntu,重写了 MBR 中的 GRUB。然而,操作系统探测器成功的发现了 Ubuntu 并且添加了 Ubuntu 的启动项。如果您读过我的 Kubuntu 教程,您会发现 Kubuntu 启动项也是标为 Ubuntu 的,这可能会和机器上的 Ubuntu 混淆。这一部分,我们将: 学习如何编辑已有的条目使之更加漂亮。 添加新的启动项并且为已有的排序。这会给我们一些线索,关于 GRUB2 如何工

19、作和怎么更改它。之后,我们看一下从 legacy GRUB 启动引导 GRUB2,反之亦然。再之后我们加入 Windows 的引导。我们已经看了一点测试用例,有默认的条目,但是并不好看,我们想替换掉它们。所以参考 grub.cfg 文件,检查 10_linux 使用的语法,就像我们前面做的,拷贝相应的部分到我们的新脚本,08_9_10_kubuntu 和 08_9_10_kubuntu_recovery.,我们添加可执行权限(chmod +x)并更新 GRUB(update_grub),非常简单。重启并确认每个都可以正常工作以后,我们拿掉条目已经被替换了的 10_linux。工作完成,简单至极

20、!双重启动:两个操作系统使用 GRUB legacy 和 GRUB2 的结合。这是一个有趣的案例。我们假设您有两个操作系统,像 Ubuntu,使用 GRUB2,并且从 Ext4启动,还有一个老一点的发行版,比如 openSUSE11.2,也使用 Ext4,但是使用 GRUB legacy。我们将: 利用 openSUSE 的 GRUB 启动 Ubuntu 使用 Ubuntu 的 GRUB 启动 openSUSE 编辑两个系统的条目使之正常工作。让我们开始吧。决策:哪一个是默认的?这是您需要决定的,我们两个启动引导器,您需要选择一个作为默认的。如果您问我,现在为止,您应该使用 GRUB lega

21、cy 作为您的默认启动引导器,因为它有足够好的产品质量并且广为人知,确定支持引导。使用 GRUB2 将置您于少数派之列。好了,如果您将使用 GRUB legacy 来启动,您应该: 在安装发行版的时候将 GRUB 安装到 MBR,在我们的例子中是安装 openSUSE 的时候,在安装的时候注意一点细节。 将 GRUB2 安装到使用它的发行版所用的主分区,这个例子中的 Ubuntu,同样,请注意细节。否则,如果您计划使用 GRUB2 作为默认,您需要使用另一个思路。如果您不太确认,再检查一下分区表。在我们的例子中,Ubuntu 先安装并且将 root 目录安装到了/dev/sda6 将 home

22、 目录安装到了/dev/sda7.然后安装 openSUSE 到/dev/sda1 ,home 没有单独分区。因为我们希望使用GRUB legacy 引导,所以: Ubuntu 启动引导器需要安装到/dev/sda6 openSUSE 启动引导器需要安装到 MBR(/dev/sda)现在都完成了,我们启动一下看看会发生什么。安装 openSUSE 以后,您会注意到 GRUB 菜单只包含 openSUSE 条目。原因是 GRUB legacy并不知道如何直接获取 GRUB2 布局所以不能找到添加条目到菜单,您需要手工的做这些。启动到 openSUSE 并使用文本编辑器打开 menu.lst 文件

23、,记得先备份一下!我们现在确实不知道 GRUB legacy 怎么使用 GRUB2 的菜单项,所以我们假设它跟 Windows是一样的,我们将 chainload 另外一个系统,将控制权交给它的启动引导器。这样可以么?我不知道,试一试吧!我们正在用 GRUB 经验来适应新的情况。如果您不明白图片中是什么也不要紧,您只需要明白,我们添加了最后面的这 3 行:title Ubuntu 9.10 Karmic Koalaroot (hd0,5)chainloader (hd0,5)+1启动时候,您将看到菜单(再次为丑陋致歉)如果您尝试启动 Ubuntu 9.10 Karmic Koala 这一项,您

24、会遇到这样一个恶心的错误(Error 13):这类错误通常在 Linux 用户尝试启动 Windows 和 Mac 分区的时候会遇到。对 Windows 来说,解决办法是重新映射分区、隐藏分区或者激活它们,一般都可以解决。而 Mac 引导,跟这个问题相似。来自 openSUSE 的 GRUB legacy 不能获取 Ubuntu 分区和GRUB2 结构,我们需要一个不同的方式解决问题。更多信息,查看 GRUB 错误信息 。从 openSUSE 启动 Ubuntu 的正确方法我们需要做的是,重新回到 openSUSE 打开 nenu.lst 文件,改成这样:(为不能看到图片的读者考虑)我们添加了

25、下面这些到 menu.lst 文件:title Ubuntu 9.10 Karmic Koalaroot (hd0,5)kernel /boot/grub/core.imgsavedefaultboot您可能想知道我们做了什么,答案是,core.img 文件是一个微型的内核镜像,这个镜像允许您启动适当的驱动器而且正确地识别和初始化真正的内核。您可以把它看作传统 initrd.img 文件的集合。重启以后您会看到 GRUB2 菜单,选择一个启动。一旦进入了 Ubuntu,如果您愿意可以做一点小动作,就是,回到 update-grub 脚本。它可以把安装的 openSUSE 添加到菜单中。这样您就

26、有递归的 GRUB 菜单了。这不是必须的,但是非常有趣而且可以练习知识和控制的能力。另一个有趣的案例是 Mandriva 2010 和 Ubuntu 9.10 双启动。安装 Mandriva 的时候,您在第一次启动之前就可以选择手动更改 GRUB 启动引导器。事实上,很多发行版都允许您在一定程度上配置启动菜单。只要知道需要什么,您就可以通过安装时候配置菜单节省不少时间。下面是在 Mandriva 安装时候编辑 GRUB 菜单。基本上,这和我们之前在 openSUSE 中所做的工作一样,您可以回去再看一遍。双启动 Windows 7 和 Ubuntu这可能会有一部分用户感兴趣,一般来讲,和前面是

27、一样的。然而,我为这个地方加了点料,GRUB 升级到 GRUB2.测试案例:一台电脑双启动 Windows 7 和 Ubuntu 9.04,像双启动指南中讲的那样。Ubuntu 9.04 使用 GRUB legacy,但是可以升级到 GRUB2,这也是我们将要做的。所以,我们先进行升级,注意细节,我们需要保证 Ubuntu 和 Windows 启动正常。把 GRUB legacy 升级到 GRUB2首先安装 GRUB2 包sudo apt-get install grub2查看终端,您需要回答几个提示。Chainload first第一个是直接把 GRUB2 安装到 MBR 还是先安装到 Ub

28、untu 的主分区并且使用 GRUB legacy通过 chainload 测试一下。我们前面已经做过,就是通过调用 core.img 文件,所以我们知道怎么做。简洁起见,我们跳过这一步。下一步是确认命令行参数,大多数人不需要做任何更改。GRUB 2 就安装好了:在我们重启之前,确认 grub.cfg 文件已经正确的部署,并且包含正确的菜单项,指向正确的设备和分区。如果您需要确认他们的顺序正确,可以使用 fdisk 命令。Ubuntu 菜单项:Windows 菜单项:现在可以重启测试一下。您的 GRUB 菜单应该已经改变并且顶部包含一个指向 GRUB 2 的chainload 菜单项。可能出现

29、的错误:当心尝试进入 GRUB 2 的时候可能遇到 GRUB Error 11 或者 GRUB Error 15.比如,GRUB Error 11 意味着选择了错误的设备,也可能是您通过 ID 而不是序号启动设备,这种情况下您必须更改其中一个字符串来让它正常工作。为了解决这个问题,您将需要选中 Chainload 菜单项,点 e 键进行编辑,然后更改 root 行映射到正确的设备。不要忘记您现在是使用 GRUB legacy,所以分区的序列数是从 0 开始的。最糟糕的情况下,逐个测试 root(hdX,Y)知道你找到正确的那个。改了 root 行以后回车,然后点击 b 键启动。作为替代方案,如果您的 GRUB 比较古怪,使用设备 ID 而不是序列数字来调用,您将需要使用 uuid 替换以后的 ID 串,然后您应该就可以启动了。这篇文件有不错的实例和截图可供参考。最终,您应该看到这样的 GRUB2 菜单:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报