![initramfs 和實際的主檔案系統有什麼不同?](https://rvso.com/image/89169/initramfs%20%E5%92%8C%E5%AF%A6%E9%9A%9B%E7%9A%84%E4%B8%BB%E6%AA%94%E6%A1%88%E7%B3%BB%E7%B5%B1%E6%9C%89%E4%BB%80%E9%BA%BC%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
initramfs
是用於啟動系統的暫存檔案系統,掛載後將控制權交給根FS(檔案系統)。我不能只使用 ramfs 來做事情的原因是你保存的任何東西都不會保留,每次重新啟動時它都會被刪除。
但是,即使關閉電源,安裝的根檔案系統也可以寫入並記住內容。為什麼是這樣?為什麼 rootfs 可以記錄更改,而 initramfs 卻不能?
更重要的是,這個根檔案系統應該在哪裡?我正在查看根分割區,看到了uinitfs.image
,但我沒有看到任何其他應該是我要掛載的根檔案系統的存檔。它物理存儲在哪裡?
答案1
initramfs 是一個壓縮映像,通常儲存在/boot
(例如,在我的 CentOS 7 機器上,我有/boot/initramfs-3.10.0-327.18.2.el7.x86_64.img
)。這可能是經過 gzip 壓縮的 cpio 存檔。
例如
sudo gzip -dc /boot/initramfs-3.10.0-327.4.5.el7.x86_64.img | cpio -t | head
.
etc
etc/modprobe.d
etc/modprobe.d/mlx4.conf
etc/ld.so.conf.d
etc/ld.so.conf.d/kernel-3.10.0-327.3.1.el7.x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-327.4.4.el7.x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-229.20.1.el7.x86_64.conf
etc/ld.so.conf.d/mariadb-x86_64.conf
etc/ld.so.conf.d/kernel-3.10.0-327.4.5.el7.x86_64.conf
這儲存了使作業系統進入可以看到根設備的狀態所需的最少例程集。例如,它可能包含與您的 HBA 通訊所需的驅動程式。
它在啟動時解壓縮到 RAM 中並執行。因為它是 RAM 映像,所以任何更改都會丟失。
一旦找到真正的根磁碟,就會安裝它並將根切換到此磁碟。然後引導繼續正常進行。因為這個根是一個真正的檔案系統(而不是記憶體映像),所以此處保存的變更是持久的。