centos7 initramfs解包 打包

1、centos7原生內核

centos7內核默認的initramfs與原生linux不一致,包含一個cpio格式的ealry_cpio頭,和一個gzip壓縮的cpio格式的initramfs rootfs。前面的ealry_cpio頭就是centos7內核獨有的。
我們到/boot目錄查看,如果顯示ASCII cpio archive就代表是centos7原生內核的格式,如果顯示 gzip compressed data就代表是linux內核不帶ealry_cpio頭的標準gzip壓縮的格式。

[root@develop boot]# file initramfs-$(uname -r).img
initramfs-3.10.0-957.10.1.el7.x86_64.img: ASCII cpio archive (SVR4 with no CRC)

解包

cd /boot
initramfs=$(ls -a initramfs-$(uname -r).img)
cp /boot/$initramfs /tmp

mkdir -p /tmp/early_cpio
mkdir -p /tmp/rootfs_cpio

#解包early_cpio
cd /tmp/early_cpio
cpio -idm < ../$initramfs

#解包rootfs
cd /tmp/rootfs_cpio
/usr/lib/dracut/skipcpio ../$initramfs | zcat | cpio -id

這樣我們就把centos7原生內核的initramfs解包成了兩個文件夾,early_cpio和rootfs_cpio。

打包

解包完成之後,我們可以修改initramfs rootfs的內容,完成一些定製,定製完成後,就需要壓縮成內核可以識別的文件。我們將第一步解包後的兩個文件夾再打包起來。

cd /tmp/early_cpio
find . -print0 | cpio --null -o -H newc --quiet >../early_cpio.img

cd /tmp/rootfs_cpio
find . | cpio -o -H newc | gzip > ../rootfs_cpio.img

cd /tmp
cat early_cpio.img rootfs_cpio.img > newInitramfs.img

這樣newInitramfs.img就是成功打包的鏡像

2、linux官方內核

如果你的centos安裝了其他內核,例如elrepo的內核,initramfs就是標準linux的格式,我們執行file 查看initramfs的時候,就會發現是 gzip compressed data。這時候解包和打包,就不需要關心early_cpio的內容了。

解包

cd /boot
initramfs=$(ls -a initramfs-$(uname -r).img)
cp /boot/$initramfs /tmp

mkdir -p /tmp/rootfs_cpio

#解包rootfs
cd /tmp/rootfs_cpio
/usr/lib/dracut/skipcpio ../$initramfs | zcat | cpio -id

打包

cd /tmp/rootfs_cpio
find . | cpio -o -H newc | gzip > ../rootfs_cpio.img

這時候rootfs_cpio.img就是打包後的initramfs

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章