一個ramdisk
僅僅指的是內存中的磁盤映像。它使用內核中的ramfs
VFS驅動程序實現。 ramdisk的內容將在下一次重新引導或重新啓動時擦除。
接下來我會給你詳細介紹initrd
和initramfs
。
簡單來說,無論initrd
和initramfs
指早期用戶空間root filesystem
(又名rootfs
),可以讓你在運行內存一個很小的文件系統。
文檔出現在linux內核源代碼樹的Documentation/filesystems/ramfs-rootfs-initramfs.txt
部分,這也會給你一個這些內容的長度描述。
什麼是initrd
?
需要這種早期文件系統的一種常見情況是加載用於硬盤控制器的驅動程序模塊。如果司機出現在硬盤上,它就會成爲雞與雞蛋的問題。將這些驅動程序作爲此早期rootfs的一部分,可幫助內核加載任何檢測到的硬盤控制器的驅動程序,然後才能從硬盤驅動器掛載實際的根文件系統。解決這個問題的另一種方法是將所有驅動程序模塊都內置到內核中,但是您將以這種方式增加內核二進制文件的大小。這種文件系統映像通常被稱爲initrd
。它使用ramfs
或tmpfs
執行。它使用回送塊設備來模擬。
引導加載程序將內核映像加載到內存地址,將initrd映像加載到另一個內存地址,並告訴內核在哪裏找到initrd,將引導參數傳遞給內核,並將控制權交給內核讓它繼續啓動過程。
那麼它與initramfs
有什麼不同呢?
initramfs
是一個更早的階段的文件系統,而內建於內核(當然由內核配置控制)的initrd
。
據我所知,這兩個initrd
和initramfs
被這種單一的內核配置控制,但它可能已在最近的內核被改變。
config BLK_DEV_INITRD
我不會深入到如何建立自己的initramfs,但我可以告訴你,它只是使用cpio
格式來存儲文件,並可以使用usr/Kconfig
編譯內核時進行配置。即使你沒有指定你自己的initramfs映像,但已經打開了對initramfs的支持,內核會自動嵌入一個非常簡單的initramfs
,其中包含/dev/console
,/root
和其他一些文件/目錄。
此外,還有一個較新的tmpfs
文件系統,它通常用於實現內存中的文件系統。實際上,較新的內核使用tmpfs
而不是ramfs
來實現initrd
。
UPDATE:
剛好在a similar question
This跌倒也可能是有用的
嗯,我知道這些初始RAM磁盤背後的總體思路和爲什麼需要他們。總而言之,需要加載模塊。現在是唯一的原因? 內核還使用用戶空間助手腳本(從這個臨時文件系統)加載模塊?控件如何從這個臨時文件系統轉移到我的實際文件系統?畢竟文件系統映像本身(或可能)只是一個常規的cpio歸檔文件。它本身沒有任何我相信的智慧。所以這個智能必須被卸載到我想的內核中。你能詳細說明一下嗎? – HighOnMeat 2015-05-02 10:10:36
*「ramdisk ...使用ramfs實現」* - 這是不正確的,與您提到的Linux文檔相矛盾。在整篇文章中,您不恰當地將ramdisk(或rd)與ramfs等同起來。 – sawdust 2015-12-04 19:45:07