initramfs

initramfs是在ramfs的cache實現上加了一層很薄的封裝,其他核心開發人員編寫了一個改進版tmpfs,這個檔案系統上的數據可以寫出到交換分區,而且可以設定一個tmpfs裝載點的最大尺寸以免耗盡記憶體。initramfs就是tmpfs的一個套用。

套用簡介

最初的想法是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="機制的前端,而非其替代物,它假設真正的根設備是一個塊設備, 而且也假設了自己不是真正的根設備,這樣不便將NFS等作為根檔案系統。最後/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壓縮過的。

相關詞條

相關搜尋

熱門詞條

聯絡我們