四、GRUB 接口
GRUB 除了菜单模式,还提供了一个命令模式和 grub shell 。当系统启动并显示菜单时,按 c 键就可以进入命令模式。提示符是 grub> 。
如果你已经成功引导操作系统并登录,可以在 shell 提示符下执行 grub ,这会启动一个 grub shell。提示符也是 grub> 。
GRUB 能够象 bash 一样使用上下键来访问 command history ,ctrl-u、ctrl-k、ctrl-l 等快捷键也可以使用。想要编辑菜单,可以按下 e 键;
想要新增一空白行,可以按下 o 键(当前行之后)或者 O 键(当前行之前)。想要删除当前行,按下 d 键;ESC 键放弃当次修改并返回上级菜单。
有些命令只能在命令模式下,有些命令只能用于配置文件(菜单模式),有些命令在两个模式下都可以使用。下面我们就介绍 GRUB 常用的命令。
五、GRUB 常用命令
5.1 只能用于配置文件的命令
下面这5个命令只能出现于配置文件中,分别是 :
a)default :定义默认引导的操作系统。0 表示第一个操作系统,1表示第2个,依此类推
b)fallback :如果 default 所指定的操作系统引导失败,则默认引导由 fallback 指定的操作系统
c) hiddenmenu :用于启动时隐藏菜单,除非在 timeout 之前按下 ESC 才能看到菜单。
d)timeout :定义多少秒内如果用户没有按下键盘上的某个按键,就自动引导 default 所指定的操作系统。
e)title :定义引导项目的名称。
f)password :用于定义进入 GRUB 命令模式的密码。你还可以为每个操作系统都定义一个密码,方法是把 password 命令放在 title行之后。
而且每个操作系统的引导密码可以不同,也可以和进入命令模式的那个密码不同,最大程度的保证 GRUB 的安全。
5.2 只能用于命令模式或者 grub shell 的命令
a)device :用于定义 BIOS 中的磁盘设备和操作系统的磁盘设备之间的映射关系。
例如 device (hd0)/dev/hdb 把 BIOS 中的第一个硬盘相当于 Linux 的 /dev/hdb
b)serial :用于初始化一个串口设备。
例如 :serial –-unit=0 –-speed=9600 表示初始化 COM1(--unit=0),速率为 9600 Baud
不过 grub shell 下执行该命令会显示 “无法识别的命令”
c)terminal :用于切换显示输出。有两这个值可选 :console 和 serial 。当你把笔记本接到一个没有显示器/键盘的主机上时,执行
terminal serial 就可以在你的笔记本上操作这台主机的 GRUB 了。执行 terminal console 把显示输出还原到该主机。
不过 grub shell 下执行该命令会显示“无法识别的命令”
d)splashimage :用于定义启动时的背景图片。例如 splashimage /grub/splash.xpm.gz
经过测试,发现用 tarball 安装的不支持该命令,这似乎是 redhat grub rpm 专有的。
e)blocklist :用于显示某个文件在文件系统中的位置,以 block list 的形式显示。例如 blocklist /vmlinuz
f)ca :用于显示文件内容。由于 GRUB 可以直接访问多种文件系统,所以可以用 cat (hd0,1)/etc/passwd 来在 GRUB 命令模式下查看 /etc/passwd 文件
g)root :用于指定含有 stage 文件的分区。如果有 /boot 分区,则 root device 就是 /boot 分区,否则
就是 / 分区。
h)rootnoverify :和 root 类似,但不会尝试挂载该分区。例如用于指定 windows 操作系统所在的分区。
i)chainloader :用于加载另外一个 boot loader ,通常是用于加载 windows 的 boot loader 。它的参数是一个 block list ,
例如 chainloader (hd0,0)0+1 表示加载第一个磁盘的第一个分区的第1块,0 是开始位置(block 从0开始编号),+1 表示总共读取多少个 block。
所以 chainloader 2+0 表示读取第3个block (编号为2)
j)find :可以用于在所有分区上搜索文件。注意,是所有分区,而不是某个分区。例如 find /vmlinuz 将会在所有分区上查找位于该分区的顶级目录下的
vmlinuz文件,如果找到就打印该分区名,例如 (hd0,1)。
k)geometry :用于显示或者设置某个硬盘的 CHS 参数,同时还显示分区信息。例如 geometry (hd0)
l)halt :关机
m)reboot :重启机器
n)kernel :指定操作系统内核文件,还可以在内核文件名后加上参数。例如
kernel /vmlinuz ro root=LABEL=/
表示以只读的方式挂载 / 分区,且根分区设备是 label 为 / 的那个设备;也可以直接给出设备名。
o)initrd :用于指定 RAM Disk 文件,例如 initrd /initrd-2.xx.img 。
p)boot :引导 kernel 所指定的内核,对于 linux 来说,必须先加载了 kernel 和 initrd 才能执行 boot 。
q)setup :用于安装 stage1 到磁盘的 MBR 或者某个分区的引导扇区。
六、保护 GRUB 设置
下面是一个例子
- password –-md5 <密码1>
- timeout=30
- default=0
- title “redhat AS 4”
- password –-md5 <密码2>
- root (hd0,1)
- kernel /vmlinuz ro root=LABEL=/
- initrd /initrd-xxx.img
- title “windows”
- password –-md5 <密码3>
- rootnoverify (hd0,0)
- chainloader +1
当出现 GRUB 菜单时,必须按下 p 并输入 <密码1> 才能进入命令模式,如果选择 “redhat AS 4”并按下回车,会出现提示信息,要求输入密码,
这时应该输入 <密码2>。同样只有输入 <密码3> 才能进入 windows 系统。--md5 告诉 GRUB 后面的内容是已经用 md5 算法加密过的了。所以 GRUB
会将你输入的口令用 MD5 加密后再与之比较。你可以命令模式下用md5crypt 命令或者在 shell 下执行 grub-md5-cypt 来得出一个字符串用 MD5 加密
后的结果,再插入到配置文件中。为每个引导项目设置 GRUB 密码有好处也有坏处 :
a)好处是 :你可以禁止用户随便引导某个操作系统,即使普通用户可以接触GRUB 菜单,没有密码也没有用;
b)坏处是 :如果你一旦重启机器,就必须手工输入口令,否则会一直停在那里。如果你是在半夜远程重启某个主机的话…. Hoho
c)建议 :只设置 GRUB 密码,也就是限制用户进入命令模式,具体菜单项不设置密码。
七、GRUB 和 stage 文件
GRUB 含有几个 images 文件,两个基础(必需的)stages 文件(stage1和 stage2),可选的 stage(也称为 stage1.5),和两个网络引导的images 文件
nxgrub 和 pxegrub)。stage1 是用于引导 GURB 的一个必须的映象文件。通常它是被嵌入到 MBR。或者一个分区的引导扇区之中。因为 PC 的引导扇区是
512 字节,所以 stage1 也是 512 字节。stage1 的作用就是从一个本地磁盘加载 stage 2 或者 stage 1.5 。因为大小的限制,stage1 对 stage2 或者
stage 1.5 的位置进行编码,也就是说,stage1 是无法识别文件系统格式的。stage2 是 GRUB 的核心映象。它几乎处理所有的事情(除了加载它自己),
通常可以把他放在文件系统上,但不是必须的。
一旦你执行了 grub-install 安装了 boot loader ,stage1 文件就不是必须的,可以把它移动到任意位置,因为它已经被嵌入到 MBR 或者 PBR 了。
stage1和stage2 文件一般位于 /boot/grub/ 目录下,在这个目录下还有很多 stage 1.5 的文件,而且都是以文件系统格式命名的。它们的目的是在 stage1
和 stage2之间搭建一个桥梁,也就是 stage 1 加载 stage 1.5, stage 1.5 加载 stage2。stage1 和 stage 1.5 的不同之处是 stage1 无法识别文件系统,
stage 1.5 可以。因为 Stage2 太大了,无法被嵌入到某个固定的区域,而 Stage1.5可以安装在 MBR 之后的位置。
至于 nxgrub 和 pxegrub 我们在第10节才介绍。
八、GRUB 常见错误信息
我们把出错信息分成3类,stage1 阶段的、stage 1.5 阶段的、stage2 阶段。后两个可以合在一起。
8.1 Stage1 阶段可能出现的错误 :
GRUB 对于该阶段出现的错误一般是打印一个出错信息并挂起机器,除非按CTRL-ALT-DEL 重启。
a) Hard Disk Error :表示无法判读 stage 1.5 文件所在的磁盘的大小和 CHS 参数
b)Floppy Error :表示无法 stage 1.5 文件所在的软盘的大小和 CHS 参数
c)Read Error :表示无法读取 stage 1.5 文件或者 stage2 文件
d)Geom Error :stage2 或者 stage 1.5 位于 BIOS 的 read 调用可以访问的范围之外。
8.2 Stage 1.5/2 阶段可能出现的错误 :
一般会打印一个 “Error <N>“的错误信息,并根据错误的严重程度看是否继续进行。
QUOTE:
1 : Filename must be either an absolute filename or blocklist
解释 :1号错误表示文件名格式错误。在 GRUB 中要么是以绝对路径给出文件
例子 :
grub> kernel vmlinuz root=label=/
Error 1: Filename must be either an absolute pathname or blocklist
grub>
解释 :1号错误表示文件名格式错误。在 GRUB 中要么是以绝对路径给出文件
例子 :
grub> kernel vmlinuz root=label=/
Error 1: Filename must be either an absolute pathname or blocklist
grub>
QUOTE:
2 : Bad file or directory type
解释 :2号错误表示命令期望的是一个普通文件,但相应文件名的对象是一个符号链接、目录、FIFO
例子 :
grub> kernel /testdir root=LABEL=/
Error 2: Bad file or directory type
grub>
解释 :2号错误表示命令期望的是一个普通文件,但相应文件名的对象是一个符号链接、目录、FIFO
例子 :
grub> kernel /testdir root=LABEL=/
Error 2: Bad file or directory type
grub>
QUOTE:
3 : Bad or corrupt data while decompressing file
解释 :3号错误表示解压文件时发生错误。可能是因为这个文件被损坏了
解释 :3号错误表示解压文件时发生错误。可能是因为这个文件被损坏了
QUOTE:
4 : Bad or incompatible header in compressed file
解释 :4号错误表示压缩文件的头部格式不被兼容或者错误
解释 :4号错误表示压缩文件的头部格式不被兼容或者错误
QUOTE:
5 : Partition table invalid or corrupt
解释 :5 号错误表示分区表无效或者被破坏。这是一个不好的预兆
解释 :5 号错误表示分区表无效或者被破坏。这是一个不好的预兆
QUOTE:
6 : Mismatched or corrupt version of stage1/stage2
解释 :6号错误表示 install 命令发现 stage1 和 stage2 的颁布号不被兼容
解释 :6号错误表示 install 命令发现 stage1 和 stage2 的颁布号不被兼容
QUOTE:
7 : Loading below 1MB is not supported
解释 :This error is returned if the lowest address in a kernel is below
the 1MB boundary. The Linux zImage format is a special case and
can be handled since it has a fixed loading address and maximum size
解释 :This error is returned if the lowest address in a kernel is below
the 1MB boundary. The Linux zImage format is a special case and
can be handled since it has a fixed loading address and maximum size
QUOTE:
8 : Kernel must be loaded before booting
解释 :8号错误表示执行 boot 命令之前没有先执行 kernel 命令
解释 :8号错误表示执行 boot 命令之前没有先执行 kernel 命令
QUOTE:
9 : Unknown boot failure
解释 :9 号错误表示未知的引导错误
解释 :9 号错误表示未知的引导错误
QUOTE:
10 : Unsupported Multiboot features requested
解释 :10 号错误表示请求 Multiboot header 所要求功能不被 GRUB 所支持。
解释 :10 号错误表示请求 Multiboot header 所要求功能不被 GRUB 所支持。
QUOTE:
11 : Unrecognized device string
解释 :11 号错误表示无法识别的设备字符串。
例子 :
grub> root hd0
Error 11: Unrecognized device string
grub>
解释 :11 号错误表示无法识别的设备字符串。
例子 :
grub> root hd0
Error 11: Unrecognized device string
grub>
QUOTE:
12 : Invalid device requested
解释 :12 号错误表示请求的设备无效
例子 :
grub> root (hd2)
Error 21: Selected disk does not exist
grub> kernel /grub/grub.conf root=LABEL=/
Error 12: Invalid device requested
grub>
解释 :12 号错误表示请求的设备无效
例子 :
grub> root (hd2)
Error 21: Selected disk does not exist
grub> kernel /grub/grub.conf root=LABEL=/
Error 12: Invalid device requested
grub>
QUOTE:
13 : Invalid or unsupported executable format
解释 :13 号错误表示无效或者无法识别的可执行格式
例子 :
grub> kernel /grub/grub.conf root=LABEL=/
Error 13: Invalid or unsupported executable format
grub>
解释 :13 号错误表示无效或者无法识别的可执行格式
例子 :
grub> kernel /grub/grub.conf root=LABEL=/
Error 13: Invalid or unsupported executable format
grub>
QUOTE:
14 : Filesystem compatibility error, cannot read whole file
解释 :14 号错误表示文件系统兼容性错误,无法读取整个文件
解释 :14 号错误表示文件系统兼容性错误,无法读取整个文件
QUOTE:
15 : File not found
解释 :请求的文件无法找到
例子 :
grub> find /grub-noexist/grub.conf
Error 15: File not found
grub>
解释 :请求的文件无法找到
例子 :
grub> find /grub-noexist/grub.conf
Error 15: File not found
grub>
QUOTE:
16 : Inconsistent filesystem structure
解释 :16 号错误表示不一致的文件系统结构。可能是文件系统结构被破坏了。
解释 :16 号错误表示不一致的文件系统结构。可能是文件系统结构被破坏了。
QUOTE:
17 : Cannot mount selected partition
解释 :17号错误表示无法挂载指定分区。例如 swap 分区
例子 :
grub> root (hd0,2) 这是一个 swap 分区
Filesystem type unknown, partition type 0x82
grub> kernel /vmlinuz
Error 17: Cannot mount selected partition
grub>
解释 :17号错误表示无法挂载指定分区。例如 swap 分区
例子 :
grub> root (hd0,2) 这是一个 swap 分区
Filesystem type unknown, partition type 0x82
grub> kernel /vmlinuz
Error 17: Cannot mount selected partition
grub>
QUOTE:
18 : Selected cylinder exceeds maximum supported by BIOS
解释 :18 号错误表示选择的柱面超过了 BIOS 支持的最大能力。这通常发生在不支持 LBA 模式
的硬盘上。
解释 :18 号错误表示选择的柱面超过了 BIOS 支持的最大能力。这通常发生在不支持 LBA 模式
的硬盘上。
QUOTE:
19 : Linux kernel must be loaded before initrd
解释 :19 号错误表示执行 initrd 命令前必须先执行 kernel 命令
解释 :19 号错误表示执行 initrd 命令前必须先执行 kernel 命令
QUOTE:
20 : Multiboot kernel must be loaded before modules
解释 :20 号错误表示执行 module 或者 moduleunzip 命令前必须先执行 kernel 命令
解释 :20 号错误表示执行 module 或者 moduleunzip 命令前必须先执行 kernel 命令
QUOTE:
21 : Selected disk does not exist
解释 :21 号错误表示选择的磁盘不存在
例子 :
grub> root (hd2)
Error 21: Selected disk does not exist
grub>
解释 :21 号错误表示选择的磁盘不存在
例子 :
grub> root (hd2)
Error 21: Selected disk does not exist
grub>
QUOTE:
22 : No such partition
解释 :22 号错误表示分区不存在
例子 :
grub> root (hd0,10)
Error 22: No such partition
grub>
解释 :22 号错误表示分区不存在
例子 :
grub> root (hd0,10)
Error 22: No such partition
grub>
QUOTE:
23 : Error while parsing number
解释 :23 号错误表示参数解释错误,希望是一个数值,但参数却是其他类型
例子 :
grub> root (hda,0)
Error 23: Error while parsing number
grub>
解释 :23 号错误表示参数解释错误,希望是一个数值,但参数却是其他类型
例子 :
grub> root (hda,0)
Error 23: Error while parsing number
grub>
QUOTE:
24 : Attempt to access block outside partition
解释 :24 号错误表示尝试访问的 block 超出了分区
解释 :24 号错误表示尝试访问的 block 超出了分区
QUOTE:
25 : Disk read error
解释 :25 号错误表示磁盘读错误
解释 :25 号错误表示磁盘读错误
QUOTE:
26 : Too many symbolic links
解释 :26 号错误表示太多的符号连接(默认最多允许5个)
解释 :26 号错误表示太多的符号连接(默认最多允许5个)
QUOTE:
27 : Unrecognized command
解释 :无法识别的命令
解释 :无法识别的命令
QUOTE:
28 : Selected item cannot fit into memory
解释 :选择的对象无法被加载到内存中。
例子 :
[root@monitor boot]# dd if=/dev/zero of=vmlinuz-2.4.20-31.9 bs=1024 count=1 seek=1
读入了 1+0 个块
输出了 1+0 个块
[root@monitor boot]#grub
grub> kernel /vmlinuz-2.4.20-31.9 root=label=/
[Linux-bzImage, setup=0x1400, size=0xfffff200]
Error 28: Selected item cannot fit into memory
grub>
解释 :选择的对象无法被加载到内存中。
例子 :
[root@monitor boot]# dd if=/dev/zero of=vmlinuz-2.4.20-31.9 bs=1024 count=1 seek=1
读入了 1+0 个块
输出了 1+0 个块
[root@monitor boot]#grub
grub> kernel /vmlinuz-2.4.20-31.9 root=label=/
[Linux-bzImage, setup=0x1400, size=0xfffff200]
Error 28: Selected item cannot fit into memory
grub>
QUOTE:
29 : Disk write error
解释 :磁盘写错误
解释 :磁盘写错误
QUOTE:
30 : Invalid argument
解释 :无效参数
例子 :
grub> serial --noarg=0
Error 30: Invalid argument
grub>
解释 :无效参数
例子 :
grub> serial --noarg=0
Error 30: Invalid argument
grub>
QUOTE:
31 : File is not sector aligned
解释 :This error may occur only when you access a ReiserFS partition by
block-lists (e.g. the command `install'). In this case, you should
mount the partition with the `-o notail' option.
解释 :This error may occur only when you access a ReiserFS partition by
block-lists (e.g. the command `install'). In this case, you should
mount the partition with the `-o notail' option.
QUOTE:
32 : Must be authenticated
解释 :要求输入口令才能继续进行下面的操作。例如配置文件中有 password 或者 lock 命令
例子 :
password root1234
title DOS
lock
rootnoverify (hd0,0)
chainloader +1
解释 :要求输入口令才能继续进行下面的操作。例如配置文件中有 password 或者 lock 命令
例子 :
password root1234
title DOS
lock
rootnoverify (hd0,0)
chainloader +1
QUOTE:
33 : Serial device not configured
解释 :33 号错误表示串口还没有配置。这一般发生在你执行 terminal serial 的时候
解释 :33 号错误表示串口还没有配置。这一般发生在你执行 terminal serial 的时候
QUOTE:
34 : No spare sectors on the disk
解释 :磁盘自由空间不足。可能发生在把 stage 1.5 嵌入到 MBR 之后的空间的时候。但这部分空间可能已经被分区表使用了
解释 :磁盘自由空间不足。可能发生在把 stage 1.5 嵌入到 MBR 之后的空间的时候。但这部分空间可能已经被分区表使用了
返回顶部