Linux
確保在關機時解除安裝環回根和主機
我正在嘗試設置一個從 LVM 格式的圖像文件執行的 Linux 系統。
/run/initramfs/host
在對 initramfs 和引導選項進行了一些修改之後,我設法通過將主機文件系統掛載到、losetup
將映像安裝到/dev/loop0
並確保核心和 udev 檢測到其中的 LVM(和根 LV)來使其啟動並執行。到現在為止還挺好。問題是,當關閉(或重新啟動,或……)系統時,根文件系統和主機都沒有正確解除安裝,因為雞和蛋的情況:根(或
/oldroot
,正如它所指的關機script) 無法解除安裝,因為/oldroot/run/initramfs/host
它仍處於掛載狀態,並且主機無法解除安裝,因為這樣做會導致/oldroot
無法訪問。不干淨的關機並不是世界末日,因為兩個文件系統都被記錄了,所以在下一次啟動時
fsck
只是重播日誌,但顯然乾淨的關機會更好。所以問題是:是否可以以某種方式安排關閉順序(我可以修改關閉腳本)或啟動順序(可能通過將主機安裝點移動到不同的位置),以便可以乾淨地解除安裝兩個文件系統?
如果有人遇到同樣的問題:
tmpfs
我所需要的只是在任何解除安裝發生之前將主機文件系統的掛載點移動到關閉腳本中根文件系統之外的位置(這很好,因為它在樞軸根中執行):mount --move /oldroot/run/initramfs/host /host
這允許
/oldroot
乾淨地解除安裝。然後可以使用簡單的解除安裝主機文件系統umount /host
有一些linux技巧可以做這種工作:
mount --move
讓您在掛載點交換文件系統pivot_root
與chroot
切換/
根文件系統一起使用最初,該功能的目標是:
initramdisk
使用root 文件系統引導核心(保留一些RAM
用於 uncompressedinitrd
)。- 訪問真實根設備所需的所有模組和腳本都在第一個引導步驟中啟動。(這可能包含網路初始化和網路設備安裝)
- 準備好後,檢查真正的根設備並掛載為準備好的根文件系統。執行
pivot_root
(和chroot
),所以執行後,ramdisk
將成為一個未使用的 ram 磁碟,掛載在/initrd
.- 因此,從那裡,可以
umount /initrd
釋放記憶體。看看
man mount
和man pivot_root
!