命令行&救援模式
使用者可以有数种方法来尝试从失败的开机中复原。如果选单依然可以使用,选单设定可以由使用者来检视和修改。此外,若
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 |
开机时编辑选单
·
·
·
·
·
·
·
·
o
o
o
o
命令行模式
从主要
GRUB 2
选单画面使用者可选择按下「c」进入命令行模式。
这里有一些好用的小诀窍和特性来使用
GRUB 2
命令行:
·
·
·
·
一些好用的指令包括:
指令 |
结果 |
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 ro
initrd
/initrd.img
boot
详细指令*:
每行完成后按下
ENTER。某些条目可能不会有响应。这是正常的。
如果执行这些指令时有「档案未找到(file
not found)」或类似的错误讯息,确认您使用正确的
X,Y
值。ls
指令能协助决定正确的值。一旦确认了
X,Y
值,执行以下指令:
set prefix=(hdX,Y)/boot/grub
1*. set root=(hdX,Y) |
|
||
2*. linux /vmlinuz root=/dev/sdXY ro |
范例:linux
/vmlinuz root=/dev/sda3 ro |
||
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
所使用的目录地址正确,用户可能可以在命令行中输入单一行的指令提供所需的所有讯息。此小节将会提供如何输入此讯息的逐步指引。指令完成时看起来会类似如下所示:
指令摘要*:
set
linux
/boot/vmlinuz- root=/dev/sdXY ro
initrd
/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.
ls
2.
set prefix=(hdX,Y)/boot/grub
3*.
set root=(hdX,Y)
4.
set
5.
ls /boot
6.
insmod /boot/grub/linux.mod
7*.
linux /vmlinuz root=/dev/sdXY ro
8.
initrd /initrd.img
9.
boot
*以
Wubi
安装(在
Windows
内)只要用以下指令来替换步骤
3
和
7:
set root=(loop0)
linux
/vmlinuz root=/dev/sdXY loop=/ubuntu/disks/root.disk
ro
详细指令:
1.
2.
3.
4.
5.
6.
7.
*Wubi
用户必须使用先前说明的替代指令。
8.
9.
这些变更并非永久的。在成功开机进入系统后,用户应该执行 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.
2.
3.
若用户打算保留双重
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/<device>。