查看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
