查看initrd内容
修改 initrd

查看initrd内容

fedora下有一个shell脚本能方便的查看initrd的信息 — lsinitrd :

[root@dev3-30 ~]# rpm -qf /sbin/lsinitrd
nash-6.0.71-2.fc10.i386
[root@dev3-30 ~]# rpm -ql nash
/etc/kernel
/etc/kernel/postinst.d
/etc/kernel/prerm.d
/lib/bdevid
/lib/bdevid/ata.so
/lib/bdevid/scsi.so
/lib/bdevid/usb.so
/sbin/lsinitrd
/sbin/nash
/usr/lib/libbdevid.so.6.0.71
/usr/lib/libnash.so.6.0.71
/usr/share/man/man8/nash.8.gz

lsinitrd 命令实际上是一个shell脚本,使用 zcat 和 cpio 查看信息:

#!/bin/bash

[[ $# -eq 1 ]] || { echo "Usage: $(basename $0) <initrd file>" ; exit 1 ; }
[[ -f $1 ]]    || { echo "$1 does not exist" ; exit 1 ; }

echo "$1:"
echo "========================================================================"
zcat $1 | cpio --extract --verbose --quiet --list
echo "========================================================================"
zcat $1 | cpio --extract --verbose --quiet --to-stdout init
echo "========================================================================"

进一步,我们可以使用 rpm2cpio 和 cpio 结合起来查看rpm包中的文本文件:

rpm2cpio initscripts-8.45.25-1.1GT.ia64.rpm | cpio --extract \
         --verbose --quiet --to-stdout \
         ./etc/sysconfig/network-scripts/ifup-tunnel

修改 initrd

mkdir newinitrd
cd newinitrd
gunzip -c ../initrd-XXX.img | cpio -idmv
[ 修改 ... ]
find . | cpio --quiet -c -o > ../newinitrd.cpio
gzip -9 < newinitrd.cpio > initrd-XXX.img