Linux

確保在關機時解除安裝環回根和主機

  • January 13, 2013

我正在嘗試設置一個從 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_rootchroot切換/根文件系統一起使用

最初,該功能的目標是:

  1. initramdisk使用root 文件系統引導核心(保留一些RAM用於 uncompressed initrd)。
  2. 訪問真實根設備所需的所有模組和腳本都在第一個引導步驟中啟動。(這可能包含網路初始化和網路設備安裝)
  3. 準備好後,檢查真正的根設備並掛載為準備好的根文件系統。執行pivot_root(和chroot),所以執行後,ramdisk將成為一個未使用的 ram 磁碟,掛載在/initrd.
  4. 因此,從那裡,可以umount /initrd釋放記憶體。

看看man mountman pivot_root

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