查看压缩包方法
一、2.6及以后版本
1、解包
2.6及以后内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount -o loop 挂载。需要使用gunzip解压缩,然后再使用cpio解包。以下作为示例:
$ cp /boot/initrd.img initrd.img.gz
$ gunzip initrd.img.gz
$ mkdir initrd
$ cd initrd
$ cpio -ivmd < ../initrd.img
2、压包
通过以上命令就将initrd.img解压了,现在就可以对其进行编辑,完成后使用以下命令重新压制。示例如下:
$ find . | cpio -o > ../initrd.new.img
$ gzip ../initrd.new.img
再将其改名拷贝至/boot目录,重启就可以观察修改后的效果。重启后无法成功引导
。这是因为生成的initrd.img不对。解决如下:
3、重新生成initrd
$ find . | cpio -o -H newc > ../initrd.new.img
$ gzip ../initrd.new.img
Note:-H newc 是必须的。-H Use given archive FORMAT,newc The new (SVR4) portable format, which supports file systems having more than 65536 i-nodes。现在的Linux内核的initramfs/initrd默认都是使用SVR4格式。
二、2.6以前版本
initrd.img是一个用gzip压缩的文件,这主要是为了制作启动盘,因为启动盘只有1.44M,这个文件的原始大小是几个M,压缩后大概3、4百K。这个文件使用mkinitrd命令产生。
在2.6以前版本中的Initrd.img采用的ext2经gzip压缩而成。要看到其里面的内容,首先是解压该文件,由于gunzip解压的文件有扩展名要求,所以:
- 首先把该文件复制到另一个目录下。(备份大法好)
- 重命名
$ mv initrd-2.4.21.img initrd-2.4.21.img.gz
- 解压
$ gunzip initrd-2.4.21.img
- 查看文件属性
$ file initrd-2.4.21.img
$ initrd-2.4.21.img: Linux rev 1.0 ext2 filesystem data
- 然后mount该文件:
$ mount -o loop initrd-2.4.21.img /mnt/floppy/
- 查看文件:
$ cd /mnt/floppy/
$ ls
Note: 这种操作就是挂载文件系统操作,mount、cp、sync、umount便可完成对包的操作。最后再gzip,就OK了。