Grub2中文指南
https://help.ubuntu.com/community/Grub2
GRUB 2 是 Ubuntu 9.10 (Karmic Koala) 的默认开机加载和管理程序,并在 10.04 以后于许多操作系统中使用。在计算机开机时 GRUB 2 将显示选单等待用户输入或是自动将控制权转移到操作系统核心。GRUB 2 继承自 GRUB (GRand Unified Bootloader)。它经过了完全的重写以提供使用者可观的灵活性和效能增进。GRUB 2 是自由软件。
在这份指南中,GRUB 2 版本为 1.98 或更新版。传统 GRUB (0.97 版) 将以 GRUB 称之。欲查询您目前使用的版本,输入「grub-install -v」指令。
注意:当系统中同时存在多个 GNU/Linux 发行版,请小心其他的发行版(特别是 OpenSuse 和 Fedora)并不一定会转移至 Grub 2,而使得 Grub 2 的设定变为复杂。
目录
- 增加功能
- GRUB vs GRUB 2
- 安装
-
- 预设安装
- 升级至 GRUB 2
- 档案结构
-
- /boot/grub/grub.cfg
- /etc/default/grub
- /etc/grub.d/ (目录)
- 设定 GRUB 2
-
- /etc/default/grub(档案)
- 开机显示行为
-
- 初始化默认值
- 计时显示
- 隐藏
- 储存
- 上次开机失败或开机至恢复模式
- 自定义选单项目
-
- 制作自定义选单
- 备用模式
- 命令行及救援模式
-
- 开机时编辑选单
- 命令行模式
- 使用命令行接口开机
- 救援模式
- GRUB 错误讯息
-
- 解决「未知的装置字符串」(Unrecognized Device String)(Error 11)
- 档案未找到(File Not Found)(Error 15)
- Grub 显示救援模式提示符号(然后不继续进行开机)
- 开机影像和主题
-
- GRUB 2 开机影像
- 建立用户自定义开机影像
- 主题
- 重新安装 GRUB 2
-
- 从开机光盘重新安装
- 变更或移动 GRUB 2
- 移除 GRUB 2
-
- 回复至传统 GRUB
- 常见问题与错误
- 其他
-
- 由序列式控制台开机
- 连结
-
- 外部连结
GRUB vs GRUB 2
GRUB 2 与原本的 GRUB 相比之下主要增进功能包含:
- 命令稿支持,包括条件叙述和函式
- 动态模块加载
- 救援模式
- 客制化选单
- 主题
- 支持图形化开机选单以及改良的开机影像能力
- 直接由硬盘中的可开机光盘映像文件来开机
- 新的配置文件结构
- 非 x86 平台支持(例如 PowerPC)
- 全面支持 UUID(不只在 Ubuntu)
GRUB 2 的预设选单对 GRUB 使用者而言看起来很熟悉,但是在相似的表面下实则有非常巨大的相异之处。
- 在没有安装其他操作系统的全新 Ubuntu 9.10 或 10.04 安装下,GRUB2 将会直接开机到登入提示符号或是桌面。不会显示选单。
- 在开机期间按住 SHIFT 可显示选单(之前在传统 GRUB 中是 ESC 键)
- 没有 /boot/grub/menu.lst。已被 /boot/grub/grub.cfg 取代。
- 在 grub 提示符号下没有「/find boot/grub/stage1」。Stage 1.5 被淘汰了。
- 主要选单档,/boot/grub/grub.cfg,不应再被手动编辑,即使是由「root」身份。
- grub.cfg 会在任何有更新、核心被加入/移除或是使用者执行 update-grub 的时候被覆写。
- 可使用的 Linux 核心清单将会参考在 /boot 目录下的档案自动产生。并非像以前需要编辑一个 menu.lst 档案中的清单。执行「update-grub」来更新此清单。
- 使用者可以编辑一个客制化档案,/etc/grub.d/40_custom,在其中用户可放入自己的选项。此档案将不会被覆写。
- 主要用来改变显示设置的配置文件是 /etc/default/grub。
- 有好几个档案用来设定选单 - 上面提到的 /etc/default/grub,还有所有在 /etc/grub.d/ 目录下的档案。
- 分割区编码方式变更。现在第一个分割区是 1 而不是 0。然而第一个装置依然是 0(没有改变)。
- 无论何时执行 update-grub 指令时,都会自动搜寻其他操作系统,例如 Windows。
- 在 update-grub 指令执行前,所有配置文件中变更的设定都不会生效。
安装
GRUB 2 会在全新安装的 Ubuntu 10.04 中预设安装。从 Ubuntu 9.04 Jaunty Jackalope 升级至 9.10,将保留原本的 GRUB,除非使用者选择升级至 GRUB 2。若使用者想要的话,之前版本的 Ubuntu 可以升级至 GRUB 2 。
您可以透过 Synaptic 或是从命令行来检查目前安装的版本。打开终端机(应用程序 > 附属应用程序 > 终端机)并输入以下指令:
grub-install -v
GRUB 2 应该会显示版本编号 1.96 或是更新。传统 GRUB 版本为 0.97。
预设安装
GRUB 2 将会是 Ubuntu 9.10 Karmic Koala 可开机光盘默认安装的启动加载程序。
- GRUB 2 套件为 grub-pc。grub-common 套件也将会一并安装。
- grub2 是过渡期虚拟套件。他可被安全移除,且不会在 Synaptic 中显示为已安装。
升级至 GRUB 2
在 Ubuntu 9.10 或更早期的版本将 GRUB(传统)升级至 GRUB 2 是相当容易的。重点在于,在使用者确认进行完全的转换前,升级过程将提供一个程序来确认 GRUB 2 能在您的机器上工作。然而请注意到开发者决定不要在预设的升级动作中自动升级至 GRUB 2。升级至 Ubuntu 9.10 的使用者若想要的话可以继续沿用 GRUB。
- 在安装 GRUB 2 之前,更新套件库索引以确保系统有最新的软件套件列表。一般在终端机中透过 sudo aptitude update 指令或是透过图形用户界面套件管理程序,如 Synaptic,来更新列表。较旧的 GRUB 套件可能未包含早期版本的一些错误修正更新。
- 欲升级至 GRUB 2 请安装「grub-pc」套件。此套件可由 Synaptic 中安装,或是执行以下指令。一旦开始安装,一份简单的程序会引导用户进行其余的安装过程:
sudo aptitude install grub-pc
1. 在第一个提示中,阅读这些讯息,按下 tab 移至「OK」并按下 ENTER。
2. 在选择「OK」后,下一个选项允许用户在正常的 GRUB 选单中透过新增一个选项来测试 GRUB 2。选择「Yes」将在 GRUB 选单中增加一个 Chainload 选项。当下次使用 GRUB 开机时,使用者可以选择正常的 GRUB 选项或是将控制权透过 Chainload 选项转移至 GRUB 2。
3. 下一步将会把来自 GRUB 的 menu.lst 中的段落汇入至「Linux command line」(如下图),或许还会汇入至「Linux default command line」。这些项目允许用户输入任意的特殊指令,例如 quiet, splash, noapic 或是其他类似的指令。GRUB 2 将会自动汇入这些设定。通常用户应该要接受任何现有的选项并选择「OK」。若有需要,选项可于稍后加入。更多细节请参考设定 GRUB 2 小节。
当安装在一个全新磁盘上,您可能需要标记所选的分割区为可开机的。
4. 当系统已安装完成 GRUB 2,使用者可重新启动并看到已更新的 GRUB 传统选单欢迎画面。如图所示,使用者将会看到一个「Chainload」选项将会测试 GRUB 2 安装。选择 Chainload 选项将会把控制权转移至 GRUB 2 并显示 GRUB 2 选单。
4a. 在选定选项的时候 Jaunty 用户可能会碰到一个「无法辨识的装置字符串 (Unrecognized device string)」Error 11。如果发生,按下「e」直到您看到一行开头为「grub edit>root」的文字。把「root」改为「uuid」,按下 ENTER,然后按「b」来启动。更多关于 Error 11 的细节可以在命令行和救援模式小节中找到。
5. 测试新选项并注意到 Grub 1.9x 版本编号(新增高亮度部份)。
6. 若 GRUB 2 选单功能正常,用户可在任何时间执行以下指令以升级至 GRUB 2:
sudo upgrade-from-grub-legacy
在安装期间,使用者可能会需要提供选择,决定要将 GRUB 2 安装在哪个装置上。使用上/下键来选择一个装置(sda, sdb 等等),然后使用空格键来选定该装置。一旦至少一个以上的装置被选择后,使用 TAB 键将 OK 反白,然后按下 ENTER。未成功选择一个装置将会导致 GRUB Error 15 错误产生并导致安装失败。
在成功升级至 GRUB 2 之后,会有一个讯息告知用户有些 GRUB 传统配置文件依然在系统中,并可被移除。此说明包含以下的指令,必须以「root」身份执行:rm -f /boot/grub/menu.lst* 以「root」执行 rm 指令时请特别慎重。不正确输入此指令可能导致系统档案被永久的删除。
档案结构
GRUB 2 包含一个完全修改过的目录及档案阶层。来自 GRUB 传统的 menu.lst 不再继续使用。
欲找出 GRUB 2 安装位置,用户可以执行以下指令:
sudo grub-probe -t device /boot/grub 可找到安装的装置
sudo grub-probe -t fs_uuid /boot/grub 可找到 UUID。
由 GRUB 2 使用的主要目录和档案包含了:
/boot/grub/grub.cfg
这是最相似于 GRUB /boot/grub/menu.lst 的档案。此档案中包含了 GRUB 2 选单信息,但不像 GRUB 的 menu.lst,grub.cfg 档不该手动编辑。
· 每个段落明确地由「(### BEGIN)」界定并参考在 /etc/grub.d 目录中的档案,由该目录中的档案来产生信息。
· grub.cfg 由 root 身份执行 update-grub 来更新。update-grub 指令是 sudo grub-mkconfig -o /boot/grub/grub.cfg 的简化。为了标准化,使用 update-grub 指令,加上 sudo 以 root 权限执行。
· 此档案将会在核心安装/更新时或是其他会影响到它的输出时自动更新。
· 预设情况下,还有无论何时当 update-grub 指令执行时,此档案会被设定为「只读」。这是刻意保持的状况,让此档案无法被手动编辑。
用户也会在 /boot/grub 目录下看到许多 *.mod 档案。这些档案代表 GRUB 2 的模块化本质并依照 GRUB 2 启动加载程序的需求而加载。
/etc/default/grub
· 此配置文件包含以前在 GRUB 传统的 menu.lst 前半部段落以及每行核心设定后面的对象信息。在此档案中的条目可以由具有管理者(root)权限的使用者编辑,并会在更新时合并至 grub.cfg 中。具体的设定选项可以在此小节稍后的设定 GRUB 2 部份中找到详细信息。
/etc/grub.d/ (目录)
· 在此目录中的档案将会于执行 update-grub 指令的时候读取,并将其中的指令合并至 /boot/grub/grub.cfg 中。
· 在 grub.cfg 选单中的选单选项顺序是依照在此目录中档案的顺序来决定。具有较小数字前缀文件名的档案将会先执行。10_linux 将会在 20_memtest 之前执行,而 40_custom 将在最后执行。若有文件名全为英文字母名称,那么将会在数字名称的文件名后执行。
· 自定义选项可以加入在 40_custom 档案中,或新建立的档案中。自定义档案开头为 06_ 将会出现在选单的最上方,因为他的字母排序将会在 10_ 和 40_ 之前。
· 在 update-grub 执行过程中只有可执行文件会输出至 grub.cfg。
· 在此目录中的默认档案为:
·
o 00_header 设定初始显示项目,例如图形模式、默认选项、时间限制等等。这些设定信息一般由 /etc/default/grub 中汇入。使用者一般不需要对此档案做任何更动。
o 05_debian_theme 此档案中的设定用来设定开机影像、文字颜色、高亮度选项及主题。在没有开机影像的情况下,此档案会设定一个单色的主题来显示初始选单画面。如何设定字型显现及开机影像将会在开机影像和主题小节中讨论。
o 10_hurd 指定 Hurd 核心位置。目前未使用。
o 10_linux 指定操作系统目前使用中的 root 装置核心位置。此信息将会取用来建立这些核心显示在选单中的名称。因为有 10_linux 中的指令,我们不需要(甚至几乎不可能)手动来建立显示在选单中的核心名称列表。注意:若您不想要所有的旧核心版本全都显示在选单中,将那些档案从 /boot 中移除。
o 20_memtest86+ 搜寻 /boot/memtest86+.bin 并将之包含在 GRUB 2 开机选单选项中。目前没有选项能将此条目从开机选单中移除。memtest86+ 选项显示可透过移除此档案的执行权限:sudo chmod -x /etc/grub.d/20_memtest86+ 接着执行 sudo update-grub 来屏蔽。
o 30_os-prober 此档案使用 os-prober 来搜寻 Linux 和其他操作系统。结果将会依据此档案中的内容而放至 grub.cfg 中。此档案被划分成四个段落,代表由命令稿所处理的四种操作系统类型:Windows, Linux, OSX 和 Hurd。此档案中的变量用来指定在 /boot/grub/grub.cfg 和 GRUB 2 选单中的名称显示格式。熟悉基本命令稿的用户可以修改这些变量来改变选单选项的显示格式。此外,用户可以插入任何选项至 /etc/default/grub 中以关闭这个命令稿。(参考下方)os-prober 预设忽略任何具有 dmraid 签名的磁盘,可藉由 sudo dmraid -r -c 来列出。
o 40_costom 用来加入自定义选单选项的样板,将会在执行 update-grub 指令时嵌入至 grub.cfg 中。此档案中的内容,在「exec tail -n +3 $0」这一行和预设的批注后,会毫无改变地直接汇入至 /etc/default/grub.cfg 中。
o 在这些目录中的档案必须要设为可执行才能被 update-grub 使用。没有设为可执行的档案将会被忽略。欲将档案设为可执行,执行 sudo chmod +x filename