核心內部與作業系統建構

初始記憶體檔案系統(initramfs)

/ in-IT-ram-eff-ess /

核心剛啟動時面臨一個雞生蛋的問題:它需要掛載你真正的根檔案系統(一切都存放在那裡的磁碟),但與你這台特定磁碟控制器溝通的驅動程式——也許還有解開加密磁碟或組建 RAID 的程式碼——本身卻可能就在那顆磁碟上。initramfs(初始記憶體檔案系統)解決了這個問題:它是一個小巧、完整、用完即丟的檔案系統,與核心打包在一起並在開機時載入記憶體,攜帶著剛好足以接觸到真正根目錄的工具與驅動程式。把它想成跟你一起空投下來的求生包:一頂小帳篷和一張地圖,讓你著陸後得以蓋起真正的房子。

具體來說,開機載入器把 initramfs 載入記憶體,就放在核心旁邊。核心把它解開成一個暫時的記憶體內檔案系統,並執行其中一個小型 init 指令稿。該指令稿載入所需的核心模組(儲存裝置驅動、檔案系統驅動)、進行任何特殊設定(解密磁碟、組建軟體 RAID、找出邏輯磁區),然後從實體磁碟掛載真正的根檔案系統。最後它執行 switch_root:把真正的磁碟設為新的根目錄,並交棒給真正的 init/systemd,之後 initramfs 便被丟棄、其記憶體釋放。較舊的 initrd 用一個 ramdisk 映像做大致相同的工作;現代系統使用更有彈性的 initramfs(一個壓縮的 cpio 封存檔)。

它之所以重要,是因為它讓一個由發行版提供的通用核心,能在差異極大的各種機器上開機,而不必把每一種可能的驅動程式都永久編進核心——正確的驅動程式只要被預先放進 initramfs 即可。一個常見的誤解是把 initramfs 當成你真正的檔案系統;它是暫時且極小的,存在的唯一目的是引導出真正的那個,並在工作一完成的那一刻就被丟棄。

在一台加密筆電上,開機是這樣走的:核心啟動 -> 把 initramfs 解到記憶體 -> initramfs 指令稿載入 NVMe 驅動與 dm-crypt 模組、提示你輸入磁碟密碼、解密磁碟、掛載此時已可讀的根檔案系統,接著 switch_root 把控制權交給真正磁碟上的 systemd。這些驅動程式沒有一個非得永久放在核心裡不可。

一個極小的記憶體內檔案系統,攜帶剛好足夠的驅動程式去接觸並掛載真正的根目錄。

如果你更改了磁碟配置、加密方式或儲存驅動,卻忘了重建 initramfs(例如用 update-initramfs 或 mkinitcpio),下次開機可能會找不到根目錄,即使磁碟完全正常——因為預先放入的驅動程式已不再符合現況。

又称
initrdinitial RAM file systeminitial ramdisk初始記憶體磁碟