命令行&救援模式
使用者可以有数种方法来尝试从失败的开机中复原。如果选单依然可以使用,选单设定可以由使用者来检视和修改。此外,若
GRUB 2 侦测到开机时因为 grub.cfg 的错漏而无法将控制权转移到所选择核心的错误,它将会回复到救援模式。两种方式都允许使用者藉由受限的命令行接口来复原为可用的系统。如果只有「Grub」字样出现在屏幕顶端而没有提示符号(存取命令行)或选单,参考小节。发现并解决问题:如果你在阅读此小节,你的操作系统也许遇到开机上的问题。以下段落将会详述
GRUB 2 命令行功能的使用及编辑方法,以试图将系统开机。GRUB
2 的其中一项进步就是从命令行中搜寻分割区内容的能力。若以下段落的指令无法使用,特别是伴随着「无法找到(not
found)」或是「核心必须先加载(the
kernel must be loaded first)」的讯息,则使用以下指令来探索分割区。在
Ubuntu 中,/boot
目录下通常都会包含至少一个「vmlinuz」核心和一个「initrd」
.img 档案。在 /boot/grub 目录下应该通常会包含一个「grub.cfg」以及许多「.mod」档案。X
是磁盘,由 0 开始。Y
是分割区号码,由 1 开始。在单一磁盘上一个干净的 Ubuntu 安装中,主磁盘/分割区通常是
hd0,1。在单一磁盘包含
Windows 的多重引导环境下,一般通常位于 hd0,5。使用
ls 指令来查阅哪些是 GRUB 2 已知的磁盘/分割区。欲探索
GRUB 2 的已知装置,在 GRUB 2 选单中按「c」以进入命令行(如果还没有进入的话):
ls
显示 GRUB 2 已知的磁盘/分割区。
ls (hdX,Y)/
显示指定磁盘/分割区下的
/ 目录内容。
ls (hdX,Y)/boot
显示 /boot 目录内容。例如:ls
(hd0,5)/boot
ls (hdX,Y)/boot/grub
显示 /boot/grub 目录内容。例如:ls
(hd0,5)/boot/grub
开机时编辑选单
·
若开机过程中选单无法正常显示,按住 SHIFT 键让计算机试着显示 GRUB 2 选单。
·
当选单显示后,按下任何键(ENTER
除外)来停止倒数计时并以上/下键选择想要的项目。
·
按下「e」键进入所选选项的设定。
·
使用键盘来定光标位置。在此例中,光标已经被移动,因此用户可以修改或删除数字 9。
·
对任一行或每一行做单一或多处修改。不要使用 ENTER 来做行列间的移动。
·
可使用 Tab 键自动完成功能,这在输入核心和 initrd 项目的时候特别好用。
·
当完成时,决定下一个步骤:
·
o
CTRL-x - 以修改过后的设定开机(以高亮度强调)
o
CTRL-c - 进入命令行来进行诊断、加载模块、修改设定等等。
o
ESC - 放弃所有修改并回到主选单
o
这些选择也会列在屏幕底部作为提示。
命令行模式从主要
GRUB 2 选单画面使用者可选择按下「c」进入命令行模式。这里有一些好用的小诀窍和特性来使用
GRUB 2 命令行:
·
关闭开机影像也许会让终端机更容易检视。按下「c」进入命令行然后输入:
set color_normal=white/blue 或是任何你想使用的颜色组合。第二个选项使用「black」会保留选单的透明度,若使用者想使用实色当作背景色的话应该避免此选择。
·
为了预防画面卷动到屏幕最上方以外,首先执行 set pager=1,此设定动作类似终端机的「|
more」指令。如此将允许一个全画面的数据,并在按下「ENTER」键时才会继续往下卷动。
·
输入 help 可检视所有指令的列表。输入 help x 来检视所有以「x」字母开头的指令。Tab
键自动完成以及使用向上键来重复上一个指令与一般终端机动作相同。
·
TAB 自动完成功能非常的好用。在任何时间,若组件是独一的,按下
TAB 键可以自动完成一项输入,否则会显示所有可用的选项。输入一些额外的字符后再按下 TAB 可自动完成剩余的部份。
一些好用的指令包括:
指令
结果
background_image
加载一个现存的背景影像。使用 tab 自动完成来协助输入档名! background_image=/usr/share/images/grub/ 然后用 tab 来显示所有影像的列表。当初始测试开机影像时 很有用的指令。
cat
用来显示目前档案内容。 cat /boot/grub/grub.cfg, cat /etc/fstab
help
检视所有可用指令。输入 help x 来取得一份以字母 x 开头的指令列表。help
xxx 取得关于 xxx 指令的信息。此指令应该接在「set
pager=1」指令之后,会让屏幕显示类
似终端机「|
more」指令的行为,以预防卷动超过屏幕顶端。
ls
单独使用,列出 GRUB 2 所知道的所有装置,例如 (hd0) (hd0,1) 等等。使用 ls 来检视可用的分割区。使用 ls /boot, ls /boot/grub 来检视 /boot 和 /grub 目录内容。
initrd
载入 initrd。
linux
载入 linux 核心。
loopback
把档案挂载成装置。loopback
loop (hd0,2)/iso/my.iso
lsmod
显示已加载模块
reboot
重新启动
rescue
进入救援模式
set
显示适当的环境变量。与其他结合,设定变量如 set gfxmode=640x480, set color_normal=cyan/black
在命令行模式中使用后面的指令来测试各种选单字型颜色。
vbeinfo
显示可用的屏幕分辨率。
使用命令行接口开机若使用者有开机上的麻烦但选单可用,最简单的开机方法就是编辑现存的选单。参考开机时编辑选单。若
GRUB 2 寻找可用 grub.cfg 档案失败,它应会回复至 grub-rescue 模式。命令行提示符号会显示 grub-rescue> 且将不会显示选单。用户可由此命令行才来尝试手动输入指令来开机至可用的系统。若命令行提示符号没有启动,按下「c」来进入命令行模式。您将会看到
GRUB 2 提示符号: grub> 或 grub rescue>若您在任何时间想要取消并重来,ESC
将会移除修改部份并让使用者返回前一个选单。使用以下两个指令来决定您想要开机的系统所在装置(磁盘驱动器)和分割区。
set
当输入 set 且没有附加项目时,此指令会显示目前的 GRUB 2 设定。
ls
执行 ls 来查看 GRUB 2 认出的装置。例如:(hd0)
(hd0,1) (hd1,5)在此范例中
sda, sda1, sdb5 已被识别出来。
以最近使用的核心快速开机指令摘要*:
set root=(hdX,Y)linux
/vmlinuz root=/dev/sdXY roinitrd
/initrd.imgboot
详细指令*:
每行完成后按下 ENTER。某些条目可能不会有响应。这是正常的。如果执行这些指令时有「档案未找到(file
not found)」或类似的错误讯息,确认您使用正确的
X,Y 值。ls
指令能协助决定正确的值。一旦确认了 X,Y 值,执行以下指令:
set prefix=(hdX,Y)/boot/grub
1*. set root=(hdX,Y)
输入来自 ls 指令正确的 X,Y 值并按 ENTER。记住
GRUB 2 将第一个装置算为 0,第一个分割区为
1。例如:若
Ubuntu 系统安装在 sda5,输入:
set root=(hd0,5)
2*. linux /vmlinuz root=/dev/sdXY ro
范例:linux
/vmlinuz root=/dev/sda3 ro*Wubu 使用者请参考备注。
3. initrd /initrd.img
选择最新的 initrd 影像。
4. boot
以选定的分割区最新的核心来开机。
*仅适用于
Wubi 用户 - 用以下指令替换步骤 1 及 2:
set root=(loop0)linux
/vmlinuz root=/dev/sdXY loop=/ubuntu/disks/root.disk
ro
此变更并非永久性的。在成功的开机进入系统后用户应执行 sudo update-grub 并观察 GRUB 2 配置文件(/boot//grub/grub.cfg)。对于启动主要
linux 核心的问题,确认档案中在 [### BEGIN /etc/grub.d/10_linux ###] 段落的 search,
linux,
和 initrd 行现在正确的指向正确地址。使用者也许需要重新安装 GRUB 2(sudo
grub-install /dev/sdX)。
手动开机到指定的核心若在开机过程中
GRUB 2 选单无法编辑,在命令行下还是有可能允许开机至某个特定核心下。若 GRUB 2 所使用的目录地址正确,用户可能可以在命令行中输入单一行的指令提供所需的所有讯息。此小节将会提供如何输入此讯息的逐步指引。指令完成时看起来会类似如下所示:
指令摘要*:
setlinux
/boot/vmlinuz- root=/dev/sdXY roinitrd
/boot/initrd-boot
详细指令*:只有在完成每一步骤(「1」、「2」、「3」和「4」)之后才按下
ENTER。
第 1 步*:设定根分割区
set root=(hdX,Y)使用来自
ls 指令查询到的正确 X, Y 值并 ENTER。记住
GRUB 2 将第一个磁盘算为 0,第一个分割区为
1。举例,若
Ubuntu 系统位于 sda5,输入:set
root=(hd0,5)*若是安装在
Windows 中的 Wubi,使用以下指令:
set root=(loop0)
第 2 步*:输入「linux」行讯息
linux /boot/vmlinuz-
root=/dev/sdXY ro*若是以
Wubi 安装在 Windows 中,请使用以下指令代替:
root=/dev/sdXY loop=/ubuntu/disks/root.disk
在输入 linux /boot/ 之后,用户可按下 TAB 来显示可用的核心。在「/」后没有空白。若没有可见的核心,那么在「设定根分割区」步骤中的地址设定可能有误。输入正确的核心或是用
tab 自动完成。至于在
root=/dev/ 部份,请使用正确的装置名称,例如「/dev/sda1」、「/dev/sdb5」等等。加上任何选项,例如
ro(只读),在每行的行末(一般而言非必要)。一旦此行的所有信息都正确,看起来应该会类似以下的范例。linux
/boot/vmlinuz-2.6.31-16-generic root=/dev/sda1 ro
当正确输入并按下 ENTER 后,若找到 linux 核心,会有一行高亮度类似「Linux-bzImage」的确认讯息出现如下图。
若出现「档案未找到(file
not found)」或类似的讯息出现,表示要不是装置/分割区/档案不存在,不然就是
GRUB 2 并非在正确的磁盘、分割区和/或目录中搜寻。使用
ls 指令来查明正确的地址接着执行以下指令。重复第 2 步。set
prefix=(hdX,Y)/boot/grub
第 3 步:输入「initrd」行讯息
initrd /boot/initrd.img-
在输入了 initrd /boot/ 之后,用户可按下 TAB 来显示可用的 initrd 映像档。不要在「/」之后留空白。若没有可见的映像档,表示在「设定根分割区」步骤中的地址设定可能有误。输入正确的映像文件地址或是用
tab 自动完成。一旦此行的所有信息都正确,看起来应该会类似以下的范例。按下
ENTER。观察确认讯息。initrd /initrd-2.6.31-16-generic
root=/dev/sda1 ro
当正确输入并按下 ENTER 后,若找到 initrd 映像,会有一行高亮度类似「Initrd」的确认讯息出现如上图。
第
4 步:重开机
boot
输入指令并按下 ENTER。
救援模式救援模式是
GRUB 2 的主要强化部份。若 GRUB 2 寻找可用的 grub.cfg 失败并无法转移控制权至核心,他将会进入 grub-rescue> 提示符号。在此提示符号下用户可探查问题、进行修改,以及重新尝试开机。救援模式所提供的指令比起一般
GRUB 提示符号列少,但也提供额外的指令:
指令
结果
dump
清除内存
exit
退出 GRUB 2
normal
若可能的话回到标准的「grub>」模式
以下指令可以在 grub 救援模式中使用:
boot
cat
chainloader
dump
exit
kfreebsd
kfreebsd_loadenv
kfreebsd_module
help
initrd
insmod
linux
lsmod
multiboot
normal
rmmod
set
unset
虽然以下的指令并非全都是开机至 linux 核心所必须,这些指令能让用户在执行 boot 指令前确认问题所在,提供较佳的机会以成功开机。
若需要额外的指令,用户可以试着用 insmod normal 来加载一般的 GRUB 2 模块。若成功, help 和其他额外的指令就可以使用。
指令摘要*:1. ls2. set prefix=(hdX,Y)/boot/grub3*. set root=(hdX,Y)4. set5. ls /boot6. insmod /boot/grub/linux.mod7*. linux /vmlinuz root=/dev/sdXY ro8. initrd /initrd.img9. boot*以
Wubi 安装(在 Windows 内)只要用以下指令来替换步骤 3 和 7:
set root=(loop0)linux
/vmlinuz root=/dev/sdXY loop=/ubuntu/disks/root.disk
ro
详细指令:
1.
ls 此指令将显示已知的装置和分割区。由此信息,用户必须决定系统安装在哪一个装置和分割区。
2.
set prefix=(hdX,Y)/boot/grub 若不正确,稍后将会发生「无此磁盘(no
such disk)」或「无法找到(not
found)」错误讯息。
3.
set root=(hdX,Y) 在此指令中,X
为装置/磁盘,由
0 开始。Y
为分割区,由 1 开始。范例:(hd0,1)
是 sda1。(hd3.5)
是 sdc5。
4.
set 检视「prefix=」列表。这里应该会与步骤
3 的根目录地址符合,为以下格式:prefix=(hdX,Y)/boot/grub。
5.
ls /boot 检视内容。用户应该能看到多个核心、initrd
影像和 grub 目录。若没有,使用 ls 指令来检查装置并试着找寻档案和目录。若有必要,设定另一个装置 为 root。
6.
insmod /boot/grub/_linux.mod 加载(插入模块)
linux 模块。此模块未加载,若没有加载此模块,用户将会收到一个「Unknown
command linux」讯息。
7.
linux /vmlinuz root=/dev/sdXY ro 载入 linux 核心,以正确的名称替换掉「X」和「Y」(例如:sda1)。用户将会看到核心已被加载的讯息。(参看上一小节图片)*Wubi 用户必须使用先前说明的替代指令。
8.
initrd /initrd.img 加载 initrd 影像。当按下 enter 时,使用者可能会或不会看到终端机中的讯息。(参看上图的高亮度部份)
9.
boot 尝试使用输入的讯息进行开机。
这些变更并非永久的。在成功开机进入系统后,用户应该执行 sudo update-grub 并观察 GRUB 2 配置文件(/boot//grub/grub.cfg)。若开机进入主要
linux 核心有问题,请先确定在 [### BEGIN /etc/grub.d/10_linux ###] 段落中的 search,
linux 和 initrd 这三行信息目前指到正确的地址。用户也许需要用 sudo grub-install /dev/sdX 指令来重新安装 GRUB 2。
GRUB 错误讯息
GRUB 2 并不会回报错误码。若是错误讯息有带着一个错误码,这是由 GRUB 过渡至 GRUB 2 时发生的问题。解决「Unrecognized
Device String (Error 11)」此错误讯息通常是肇因于选单选项中不良或异常的内容。最常见的原因为使用者试图从使用连锁加载(Chainload)功能的
Jaunty 升级至 GRUB 2 导致。
1.
当启动 GRUB 2 时显示以下讯息:
2.
记住 Jaunty 的连锁加载功能是有问题的,使用者按下任意键来回到主选单,然后按「e」直到看见「grub
edit>」。编辑高亮度的「Chainload
into GRUB 2」选项或任何用户试图用来开机的选项。
3.
有敏锐记忆力的使用者应该还记得「root」需要修改为「uuid」。使用箭头键来移动光标,用「uuid」来取代「root」。当结束编辑时,使用者按下
ENTER 键,然后再按「b」来使用修改过的选项来开机。注意这些指令与
GRUB 2 中使用的不同。
若用户打算保留双重 GRUB 选项,以 root 身份开启 /boot/grub/menu.lst 并将「Chainload
into Grub 2」选单选项第二行「root」变更为「uuid」以修正错误。File
Not Found (Error 15)此错误为
GRUB 2 安装至 /boot 但主启动扇区(MBR)依然为传统
Grub。此状况发生在当您执行
sudo update-from-grub-legacy 时未选择您的磁盘。执行此指令后用户马上会被要求选择一个装置(sda、sdb
等)。当显示此画面时选择磁盘并按下空格键。没有选择磁盘将会导致
Error 15 的产生。欲修复此错误,必须要重新安装
GRUB 2。详细指令请参考从开机光盘重新安装小节。Grub
显示救援模式提示符号(且未继续进行开机)您可能有一个有问题的
BIOS,且您的
/boot/* 档案没有位于磁盘的 1024 磁柱之内。在磁盘前端建立一个小型分割区,以 /mnt/b 来挂载,执行 cp -av /boot/* /mnt/b;umount
/mnt/b;mount
/dev/small_partition /boot;
grub-install
/dev/。