45IT.COM- 电脑学习从此开始!
DIY硬件教程攒机经验装机配置
设计Photoshop网页设计特效
系统注册表DOS系统命令其它
存储主板显卡外设键鼠内存
维修显卡CPU内存打印机
WinXPVistaWin7unix/linux
CPU光驱电源/散热显示器其它
修技主板硬盘键鼠显示器光驱
办公ExcelWordPowerPointWPS
编程数据库CSS脚本PHP
网络局域网QQ服务器
软件网络系统图像安全

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

电脑软硬件应用网 45IT.COM 时间:2009-05-07 22:10 作者:Lei Jiang

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

.......


在本例中,将所有其他 SCSI 适配器驱动程序(如 Qlogic HBA 驱动程序 qla2xxx.ko)放在 SAS 适配器驱动程序 mptsas.ko 之后。

b.如果使用的是 SUSE Linux Enterprise Server 第 10 版,它将类似以下代码: modprobe scsi_mod $params

modprobe sd_mod $params

params=

for p in $(cat /proc/cmdline) ; do

case $p in

aacraid.*)

params="$params ${p#aacraid.}"

;;

esac

done

echo "Loading aacraid"

modprobe aacraid $params

modprobe scsi_transport_fc $params

modprobe firmware_class $params

params=

for p in $(cat /proc/cmdline) ; do

case $p in

qla2xxx.*)

params="$params ${p#qla2xxx.}"

;;

esac

done

echo "Loading qla2xxx"

modprobe qla2xxx $params

7.检验您的版本是否正确,这样才不会遗漏任何所需的驱动程序(例如,SAS 需要同时装入 mptbase.ko、mptscsi.ko、mptspi.ko、mptsas.ko 和 mptscsih.ko,这样您不能先装入 qla2xxx.ko,再装入 mptscsih.ko)。此外,您可能还需要检查错误的输入。

8.此时,您需要将 initrd 文件系统重新压缩到一个映像中,并替换 /boot 目录下的原有映像。

a.对于 Red Hat Enterprise Linux 第 3 版之前的版本和 SUSE Linux Enterprise Server 第 9 版之前的版本: [root@linuxhost ~]#umount temp

[root@linuxhost ~]#gzip initrd

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


b.对于 Red Hat Enterprise Linux 第 4 版和更高版本或者 SUSE Linux Enterprise Server 第 10 版和更高版本: [root@linuxhost ~]#find ./ | cpio -H newc -o > ../initrd

[root@linuxhost ~]#gzip initrd

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


9.祝贺您!您已经修正了问题。现在重新启动并检查结果。


4. 使用标签、UUID 或友好的名称


某些 Linux 文件系统类型(如 ext2、ext3、reiserfs、swap 和 XFS)支持装入带有标签的文件系统而不是带有设备名称的文件系统,如果您的 Linux 系统支持,则可以转而使用 UUID。此外,如果您的设备驱动程序支持,则可以使用友好的名称。


这些方法需要 Linux 系统支持这些功能(如 Red Hat Enterprise Linux V4 和更高版本或者 SUSE Linux Enterprise Server V9 和更高版本)。由于标签、UUID 和友好的名称将永远与专用设备绑定在一起,因此不管拥有什么设备 ID 或者使用什么设备名称,系统总是能够找到根文件系统磁盘。


使用标签


1.在创建诸如 root、swap 之类的文件系统或其他文件系统时,创建一个标签。 [root@linuxhost ~]#mkfs.ext3 -L ROOT /dev/sda1

[root@linuxhost ~]#mkfs.reiserfs -l OSROOT /dev/sdb2

[root@linuxhost ~]#mkfs.xfs -L XFSROOT /dev/sde3

[root@linuxhost ~]#mkswap -L SWAP0 /dev/sdb5


2.在创建文件系统后给它添加一个标签。 [root@linuxhost ~]#e2label /dev/sda1 PRIMARY_ROOT

[root@linuxhost ~]#reiserfstune -l OSROOT /dev/sdb2

[root@linuxhost ~]#xfs_admin -L DATA1 /dev/sdf4


3.在系统中使用标签。

a.编辑 Linux 系统的 /etc/fstab,这样系统将使用标签而非设备名称来装入文件系统。下面是 /etc/fstab 内容的简单示例: LABEL=ROOT / ext3 defaults 1 1

LABEL=BOOT /boot ext3 defaults 1 2

LABEL=SWAP swap swap defaults 0 0

LABEL=HOME /home ext3 nosuid,auto 1 2


b.编辑 Linux 引导加载程序的 grub.conf。 title Linux

root (hd0,0)

kernel (hd0,0)/vmlinuz ro root=LABEL=ROOT rhgb quiet

initrd (hd0,0)/initrd-2.x.x-xx.img


使用 UUID


1.获得根设备的 UUID。让我们假定以下示例中的根文件系统位于 /dev/sda 磁盘设备中: [root@linuxhost ~]#scsi_id -g -s -u /block/sda


2.使用以下命令检查带有从第 1 步中得到的设备 UUID 的根文件系统设备的 ID。 [root@linuxhost ~]#ls /dev/disk/by-id/


3.在本例中,通过编辑 /etc/fstab 以在系统中使用 UUID: /dev/disk/by-id/scsi--part2 / ext3 defaults 1 1


使用友好的设备名称

如果将设备映射程序多路径(DMMP)工具用于多路径存储,则可以将友好的名称用于根文件系统以避免设备在重新启动后被 DMMP 重新编号。


1.获得根设备的 UUID。让我们假定根文件系统位于 /dev/sda 磁盘设备中。 [root@linuxhost ~]#scsi_id -g -s -u /block/sda


2.编辑 /etc/multipath.conf 以添加根文件系统设备的友好名称,如下所示: multipaths {

multipath {

wwid

alias OSROOT

}

}


3.然后,在重新引导系统或重新载入 DMMP 后,根文件系统设备将拥有诸如 /dev/mapper/OSROOT 之类的设备名称(如果根文件系统使用的是此磁盘的分区 3,则将拥有 /dev/mapper/OSROOT-part3 或 /dev/mapper/OSROOTp3 设备名称)。

4.编辑 /etc/fstab 以将此友好名称用于此根文件系统设备,如下所示: /dev/mapper/OSROOT-part3 / ext3 defaults 1 1


5.编辑 /etc/grub.conf 以在系统启动时使用此名称。 title Linux

root (hd0,0)

kernel (hd0,0)/vmlinuz ro root=/dev/mapper/OSROOT-part3 rhgb quiet

initrd (hd0,0)/initrd-2.x.x-xx.img


6.此时,您已经完成了全部工作。您可以重新启动并查看它是否工作。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: baidushare.htm
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐知识