Linux

initramfs 如何掛載根文件系統?

  • October 10, 2019

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)。

引用自:https://unix.stackexchange.com/questions/546125