快速业务通道

Linux 技巧: 在系统引导期间查找 rootfs

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-12
件系统磁盘插入到适配器的第一个插槽中

如果根文件系统磁盘适配器可以附加两个以上的设备,或者您有两个以上的磁盘适配器,请确保根文件系统磁盘位于设备 ID 最低的插槽中(例如第一个适配器的第一个插槽).如果有一个新添加的磁盘拥有比根文件系统磁盘更低的 ID,则需要把根文件系统磁盘置于前一个插槽中.这将使根文件系统磁盘显示给 Linux 系统.

3. 编辑 initrd 映像以更改存储适配器顺序

initrd 映像实际上是一个 RAM 磁盘,其中包含带有基本配置文件、二进制文件、库和驱动程序的小型文件系统.在这个小型文件系统中,有一个将在引导期间装入到内存中的根文件系统,还有一个用于装入系统设备驱动程序的初始化脚本;它将在加载完所有设备驱动程序后重新加载实际的根文件系统磁盘.当系统尝试将 initrd 根文件系统切换到拥有此配置中的设备名称的实际根文件系统磁盘时,经常会出现 cannot mount rootfs 错误.您需要更改 initrd 映像的驱动程序载入脚本中的设备驱动程序载入顺序,让您的根文件系统磁盘在系统尝试重新加载实际的根文件系统之前 显示正确的设备名称.为此:

1.使用 Linux 恢复 CD 将系统引导到恢复模式下,您无法访问根文件系统.
2.将根文件系统加载到诸如 sysroot 之类的临时目录中(某些 Linux 恢复 CD 将自动为您执行此操作).例如,在将系统引导到恢复模式下并且根文件系统使用的是第 3 分区时,根文件系统磁盘将被识别为 /dev/sdc.

[root@linuxhost ~]#mount /dev/sdc3 sysroot

3.将恢复系统根目录切换为 sysroot,以便您可以访问问题服务器系统的根文件系统.

[root@linuxhost ~]#chroot sysroot

4.提取 initrd 映像.
a.对于 Red Hat Enterprise Linux 第 3 版之前的版本和 SUSE Linux Enterprise Server 第 9 版之前的版本:

[root@linuxhost ~]#cp /boot/initrd-x.x.x-x.ELsmp.img ./initrd.gz

[root@linuxhost ~]#mkdir temp

[root@linuxhost ~]#gunzip ./initrd.gz

[root@linuxhost ~]#mount -o loop -t ext2 initrd temp

这段代码将把 initrd 映像提取到 initrd 文件中;然后将使用 ext2 文件系统类型加载这个文件,以加载 temp.在此之后,您将看到所有文件被封装到 initrd 映像中.
b.对于 Red Hat Enterprise Linux 第 4 版和更高版本或者 SUSE Linux Enterprise Server 第 10 版和更高版本:

[root@linuxhost ~]#cp /boot/initrd-*.img ./initrd.gz

[root@linuxhost ~]#mkdir temp

[root@linuxhost ~]#cd temp

[root@linuxhost ~]#gzip -dc ../initrd.gz | cpio -id

在这些最新的 Linux 发行版中,initrd 映像也是用 cpio 压缩的.这些命令将提取 temp 目录下包含目录结构的整个文件系统.您现在应当可以在 temp 目录的 initrd 映像中找到所有文件.
5.现在,您将在 temp 目录下找到适用于 Red Hat Enterprise Linux 和 SUSE Linux Enterprise Server 第 10 版的 init 文件,或者适用于 SUSE Linux Enterprise Server 第 9 版之前的版本的 linuxrc 文件.此文件是包含将设备驱动程序载入到系统内存中的所有命令的简单 Linux shell 脚本.您可以通过文本编辑器或者其他编辑器来编辑它.
6.编辑 init 或 linuxrc 文件,以使根文件系统磁盘适配器出现在同一个类别中的所有其他存储适配器的前面.在大多数情况下,根文件系统磁盘将是带有 sd 前缀的 SCSI 设备;您需要把诸如 FC 或 SAS HBA 驱动程序之类的所有其他存储适配器放到根文件系统磁盘所依赖的驱动程序之后.
a.例如,如果根文件系统的物理磁盘与 SAS 适配器连接在一起,则 init 文件可以有如下所示的字段:

.......

echo "Loading mptbase.ko module"

insmod /lib/mptbase.ko 

echo "Loading mptscsi.ko module"

insmod /lib/mptscsi.ko 

echo "Loading mptspi.ko module"

insmod /lib/mptspi.ko 

echo "Loading mptsas.ko module"

insmod /lib/mptsas.ko 

echo "Loading mptscsih.ko module"

insmod /lib/mptscsih.ko 

echo "Loading qla2xxx.ko module"

insmod /lib/qla2xxx.ko

.......

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号