6.接下来,内核将启动系统初始化进程 init,这将成为第一个进程。随后它将启动系统的其余部分。init 进程是 Linux 的第一个进程,它是所有其他进程的父进程。此进程是在任何 Linux/UNIX® 系统中第一个运行的进程;它的 PID 始终为 1。
7.然后,init 将检验 /etc/inittab 文件以确定必须启动哪些进程。此文件将提供关于 runlevel 及在各个 runlevel 上应当启动的进程的 init 信息。然后,init 将查找第一个带有 sysinit(系统初始化)操作的行,然后将执行指定的命令文件,如 Red Hat Linux 中的 /etc/rc.d/rc.sysinit。在执行 /etc/rc.d/rc.sysinit 中的脚本之后,init 将开始启动与初始 runlevel 关联的进程。在执行完 runlevel 初始脚本时,Linux 将允许您登录。
讨论的每种解决方案都将处理这张列表中的第 5 步。
四个技巧
由于 cannot mount rootfs 错误主要是由设备顺序造成的,更改设备顺序或者更改驱动器加载顺序将解决此问题。
这两种方法可以通过以下四种方式实现(每种方法的目的都是让 Linux 根磁盘首先出现在内核/系统中,这样它可以总是使用 /dev/sda 作为设备名称):
1.更改服务器 BIOS 中的 PCI 设备引导顺序。
2.将根文件系统磁盘插入到适配器的第一个插槽中。
3.编辑 initrd 映像,以便首先载入根文件系统适配器驱动程序,然后再载入所有其他存储适配器驱动程序。
4.对根文件系统挂载使用标签、UUID 或友好的名称而非设备名称。
1. 更改服务器 BIOS 中的 PCI 设备引导顺序
如果使用的是 IBM System x® 或 IBM BladeCenter® HS 系列,则过程为:
1.当服务器输出自检信息并提示您 Press F1 to enter BIOS 时按 F1 键。
2.选择 Start Options 并按 Enter 键,如图 1 所示。
图 1. 配置/设置工具
3.如果您的 Linux 安装在本地 Planar SAS 磁盘中,请将 PCI Device Boot Priority 更改为根文件系统磁盘正在使用的适配器(如下面的图 2 所示)。
图 2. 启动选项
或者,您可以选择相关的 PCI 插槽以让 Daughter Card Slot 1 首先以最低的设备 ID 显示给系统(参见图 3)。
图 3. 另一组启动选项
在本例中,您的本地 Planar SAS 将有较大的设备 ID。如果把 Linux 安装到设备名称为 /dev/sda 的 Planar SAS 磁盘,然后把一个新磁盘设备附加到 Daughter Card Slot 1 上,则此新磁盘将使用设备名称 /dev/sda,并且根文件系统磁盘将被改为 /dev/sdb。这将导致 cannot mount rootfs 错误。
2. 将根文件系统磁盘插入到适配器的第一个插槽中
如果根文件系统磁盘适配器可以附加两个以上的设备,或者您有两个以上的磁盘适配器,请确保根文件系统磁盘位于设备 ID 最低的插槽中(例如第一个适配器的第一个插槽)。如果有一个新添加的磁盘拥有比根文件系统磁盘更低的 ID,则需要把根文件系统磁盘置于前一个插槽中。这将使根文件系统磁盘首先显示给 Linux 系统。
3. 编辑 initrd 映像以更改存储适配器顺序
initrd 映像实际上是一个 RAM 磁盘,其中包含带有基本配置文件、二进制文件、库和驱动程序的小型文件系统。在这个小型文件系统中,有一个将在引导期间装入到内存中的根文件系统,还有一个用于装入系统设备驱动程序的初始化脚本;它将在加载完所有设备驱动程序后重新加载实际的根文件系统磁盘。当系统尝试将 initrd 根文件系统切换到拥有此配置中的设备名称的实际根文件系统磁盘时,经常会出现 cannot mount rootfs 错误。您需要更改 initrd 映像的驱动程序载入脚本中的设备驱动程序载入顺序,让您的根文件系统磁盘在系统尝试重新加载实际的根文件系统之前 显示正确的设备名称。为此:
1.使用 Linux 恢复 CD 将系统引导到恢复模式下,因为您无法访问根文件系统。