從 initramfs 掛載根檔案系統

從 initramfs 掛載根檔案系統

這是一個常見的場景。無論出於何種原因,initramfs(OpenSUSE,如果它很重要的話)都無法找到根檔案系統,因此它會讓您進入救援 shell。我非常清楚需要安裝什麼設備。我的問題:

掛載根檔案系統並繼續啟動順序的正確步驟是什麼?

大概這就是全部觀點救援控制台。然而,似乎沒有人記錄過你實際上是如何做到這一點的。

顯然我可以在某個地方安裝根檔案系統。但我怎麼能做到這一點檔案系統樹的?現在我要繼續正常的啟動過程嗎? (我以為只要退出 shell 就可以了...但事實並非如此。)在繼續之前您到底需要安裝什麼,以及如何繼續?

答案1

執行 switch_root /mnt/root /sbin/init

https://wiki.gentoo.org/wiki/Custom_Initramfs#Init

答案2

這取決於問題的類型,如果問題在於 initramfs 映像本身,那麼您需要實際重新產生它(執行 update-initramfs)來修復問題。請記住,initramfs 檔案系統是 RAM 檔案系統,因此要修復任何問題,您需要修復壓縮的 initramfs 映像和/或修復根檔案系統。

我在 LUKS encrptyed Ubuntu 系統上使用了以下過程,以恢復因錯誤 crypttab 而損壞的啟動。

首先,我解密了分割區

cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt

請注意,這device_crypt不是隨機的。它需要與系統安裝時通常使用的名稱相符(分區 + _crypt 似乎是標準的)。

接下來,您需要啟動該現已解密的分割區上的磁碟區組。

vgchange -ay

現在,您可以嘗試掛載檔案系統、/、/boot、proc、swap 等,並以此方式運作。

儘管就我而言,我所要做的就是輸入 exit,initramfs 會看到邏輯磁碟區放在那裡並愉快地恢復啟動。那時很容易修復損壞並運行update-initramfs -u

答案3

只需運行fsck不帶選項的命令,initramfs然後重新啟動

例如:根分區是sda3

fsck /dev/sda3

答案4

正常程序是

  1. 掛載 /dev/sdX /mnt
  2. 修復 /mnt 上的問題
  3. 重啟

你可能想要

  1. 掛載 /dev/sdX /mnt
  2. 修復/mnt
  3. 卸載/mnt
  4. 掛載/dev/sdX/
  5. 手動完成啟動

不建議這樣做,您必須在每次啟動時執行此操作。在生產環境中,您無法確保手動啟動遵循與自動啟動相同的步驟。

然而,在涉及關鍵數據的緊急情況下,第 5 步通常可歸結為:

  • 5.1 設定網絡
  • 5.2 將重要文件複製到安全的地方

相關內容