Grub2中文指南3---命令行、救援模式与错误消息
命令行&救援模式
使用者可以有数种方法来尝试从失败的开机中复原。如果选单依然可以使用,选单设定可以由使用者来检视和修改。此外,若
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>。
                    
                

                
            
        
浙公网安备 33010602011771号