Linux
initramfs 如何掛載根文件系統?
iniramfs 就像一個小作業系統,它掛載根文件系統並將控制權交給 systemd。那麼,initramfs 是如何在內部工作的呢?是否有執行任何腳本來在 linux 中掛載根目錄?
在提取並掛載 initrd/initramfs(僅歷史差異)之後,執行的是腳本 /init。大多數情況下,它僅在 initramfs 中的模組的幫助下安裝真正的根目錄。
然後它必須將 root 轉換/切換到那個新分區,這只有 pid 1 才有可能。
這是一個最小的 /init 腳本:
mkdir /newroot mount /dev/sda2 /newroot mount --move /sys /newroot mount --move /dev /newroot mount --move /proc /newroot switch_root /newroot /bin/bash
(或 /sbin/init 正常繼續)
問題是如果沒有內置必要的模組,核心就無法掛載 /dev/sda2。在 sda2 上安裝模組並沒有幫助:雞蛋和母雞的問題。
因此核心獲得了一個 cpio 存檔,其中包含一個包含模組和腳本的根文件系統。核心簡單地移交給 /init 並完成它自己的啟動。
該 gentoo 連結以:
initramfs 是嵌入到核心中的根文件系統…
那應該是什麼意思?
這是一個最小的核心命令行:
vmlinuz root=/dev/sdaX
告訴引導載入程序載入核心“vmlinuz”並告訴核心掛載 /dev/sdaX。
還有這個:
vmlinuz initrd=initramfs.img root=/dev/sdaX
使引導載入程序也載入一個 initrd,核心將找到並以 root 身份掛載,並告訴(預設)/init 腳本樞轉/切換到 /dev/sdaX(然後執行預設 /sbin/init)。