修改initrd.gz的方法

取自:http://blog.csdn.net/youyoulg/article/details/6889101

打開終端,進入initrd.gz所在目錄,先解壓initrd.gz:

#gunzip initrd.gz 

在當前目錄下建立一臨時目錄tmp:

#mkdir tmp
#cd tmp

下面把上級目錄內解包的initrd進一步用cpio解包:

#cpio -i -F ../initrd

對目錄內解包的initrd導一個它的目錄及文件清單列表以便反向封包時用:
#cpio -i -t -F ../initrd > list

有新加或刪除文件或目錄,打開list進行編輯就是了,一行一個文件或目錄,然後用list文件來指示cpio進行封包。

反向封包用下面的命令(還是在../tmp目錄裏哦)
#cpio -o -H newc -O initrd < list

gzip壓縮一下:
#gzip -c initrd > initrd.gz


以下摘自度娘:

最初的想法是Linus提出的: 把cache當作文件系統裝載。
他在一個叫ramfs的cache實現上加了一層很薄的封裝,其他內核開發人員編寫了一個改進版tmpfs,這個文件系統上的數據可以寫出到交換分區,而且可以設定一個tmpfs裝載點的最大尺寸以免耗盡內存。initramfs就是tmpfs的一個應用。

優點:
(1)tmpfs隨着其中數據的增減自動增減容量.
(2)在tmpfs和page cache/dentry cache之間沒有重複數據.
(3)tmpfs重複利用了Linux caching的代碼, 因此幾乎沒有增加內核尺寸, 而caching的代碼已經經過良好測試, 所以tmpfs的代碼質量也有保證.
(4)不需要額外的文件系統驅動.

另外, initrd機制被設計爲舊的"root="機制的前端,而非其替代物,它假設真正的根設備是一個塊設備, 而且也假設了自己不是真正的根設備。
最後/linuxrc不是以PID=1執行的, 因爲1這個進程ID是給/sbin/init保留的。
 initrd機制找到真正的根設備後將其設備號寫入/proc/sys/kernel/real-root-dev, 然後控制轉移到內核由其裝載根文件系統並啓動/sbin/init。
initramfs則去掉了上述假設, 而且/init以PID=1執行, 由init裝載根文件系統並用exec轉到真正的/sbin/init, 這樣也導致一個更爲乾淨漂亮的設計

生成initramfs鏡像命令

若鏡像根目錄爲/initrd,執行下面命令在當前用戶主文件夾中生成myinitramfs.gz鏡像。
cd /initrd
find .|cpio -o -H newc|gzip>~/myinitramfs.gz
生成的鏡像文件是gzip壓縮過的。

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章