第 5 章。引导参数

在 PC 上,主板的 BIOS 和大多数 SCSI 主机适配器提供的 SCSI BIOS 共同负责将引导加载程序的镜像从 SCSI 磁盘加载到内存并执行的问题。这可能需要在主板的 BIOS 中更改一些设置。当涉及多个 SCSI 适配器时,可能需要更改 SCSI BIOS 设置以指示哪个适配器包含引导镜像的磁盘。引导镜像也可以来自 ATA (IDE) 磁盘、可引导 CD-ROM 或软盘。

lilogrub 都是 Linux 中常用的引导加载程序。它们的配置文件位于/etc/lilo.conf/etc/grub.conf [1] 分别是。一个区别是,在更改 lilo 的配置后,必须执行 lilo 命令才能使更改生效(而 grub 没有等效的要求)。有关用法信息,请参阅它们的“man”页。一篇关于 lilo 和 Linux 启动顺序的优秀文章可以在 ftp://icaftp.epfl.ch/pub/people/almesber/booting/bootinglinux-0.ps.gz 找到。有关 grub 的更多信息,请参阅 www.gnu.org/software/grub

一些与 SCSI 子系统相关的引导参数

 single         [enter single user mode]
 <n>            [enter run level <n> {0..6}]
 root=/dev/sda6 [*]
 root=/dev/scsi/host0/bus0/target0/lun0/part6 [*]
 root=/dev/sd/c0b0t0u0p6   [*]
 devfs=mount    [overrides CONFIG_DEVFS_MOUNT=n]
 devfs=nomount  [overrides CONFIG_DEVFS_MOUNT=y]
 init=<command> [executes <command> rather than init]
 quiet          [reduce output to console during boot]
 debug          [increase output to console during boot]
 nmi_watchdog=0 [turn off NMI watchdog on a SMP machine]
 max_scsi_luns=1  [limits SCSI bus scans to lun==0]
 scsi_allow_ghost_devices=<n>
* 当使用 devfs 时,根分区的初始只读挂载可以通过旧的 /dev/sd<a><n> 表示法或新的 devfs 表示法完成(并显示了其中两个)。当磁盘或适配器更改破坏了内核引导加载时,联合使用 "root=/dev/sda6 single" 可能很有用。

"root=" 参数也可以是一个十六进制数。例如,如果根分区位于/dev/sda3那么 "root=803" 是合适的。最后两位数字是前面章节讨论过的次设备号。

"init" 参数的默认参数是/sbin/init(参见 man (8) init)。如果文件例如/etc/fstab有不正确的条目,直接进入带有 "init=/bin/bash" 的 shell 可能很有用。但是,如果共享库文件或其路径不合适,这也可能会失败。这样就剩下 "init=/sbin/sash",它是一个静态链接的 shell,内置了许多有用的命令(用于修复系统)(参见 man (8) sash)。

当 Linux 在报告类似如下消息后无法启动时

  VFS: Cannot open root device 08:02
那么内核期望在设备上找到根分区/dev/sda2并且没有找到。错误消息中的数字是主设备号和次设备号(十六进制)[有关设备名称的映射,请参见 第 3.2 节]。在这种情况下,“root”引导选项可能很有用(也可以使用 rdev 命令来修改引导镜像查找根分区的位置)。

Lilo 的配置文件/etc/lilo.conf可以通过两种方式采用 "root=" 选项。正常的方式是像这样的行:'root=/dev/sda2'。在这种情况下/dev/sda2会在执行 lilo 命令根据系统状态转换为主设备号和次设备号。这可能很麻烦,尤其是在要重新排列硬件的情况下。另一种方式是以下形式的行:'append="root=/dev/sda2"' 在这种情况下/dev/sda2会在下次启动时传递给内核。这与在内核启动时提示符下给出 "root=/dev/sda2" 字符串相同。它在启动时由内核解释(一旦 HBA 及其连接的设备被识别),因此更加灵活。

注释

[1]

grub 的一个小问题是/etc/grub.conf是一个指向的符号链接/boot/grub/grub.conf。当/boot是一个单独的分区时,这可能很有用。