更改系統磁碟分割區後,系統無法啟動,進入“Dracut Emergency Shell”;我該如何讓它啟動?

更改系統磁碟分割區後,系統無法啟動,進入“Dracut Emergency Shell”;我該如何讓它啟動?

背景

我有一個新系統,我花了很多時間配置軟體以執行各種服務,然後發現驅動器可能不穩定。所以我決定更換磁碟,保留新磁碟的內容。

系統磁碟也有一個問題kernel,我似乎無法修復(我遵循了所有grub指示,但預設情況下它不會正確啟動kernel,除非您手動選擇正確的方向)。因此,我認為最好的方法是簡單地Fedora Server在新磁碟上進行新安裝,這樣就可以解決啟動問題。

發生了什麼事

新磁碟要大得多,因此我在安裝過程中對它進行了稍微不同的分割區。然後,我卸下了驅動器,並將新舊系統磁碟放入附近的另一台伺服器中。出於謹慎考慮,我保留了fstab新系統磁碟中的 ,因為我知道它有分割區UUIDs

有很多方法可以移動東西,我決定在新系統磁碟上有一個乾淨的根分割區。我想dd也許可以做到這一點,但我習慣在分區大小相同的情況下使用它,並且有點不確定,所以我只是用gparted.然後我使用普通的作業系統工具來移動這些檔案。然後,我剪切並貼上了新安裝中的內容,並將其插入到我正在修復的伺服器中的UUID非常非庫存中。fstab

一切順利。

然後我嘗試啟動系統。它發布,然後進入grub引導程序,它自動選擇正確的內核,然後就開始了! ……直到它沒有!

它必須「顯示普利茅斯啟動畫面」或類似的東西,暫停,然後從自稱的東西發出很多超時警告dracut。從這裡,我用手機拍了一張螢幕截圖。它說:

Warning: Could not boot.
Starting Dracut Emergency Shell...
Warning: /dev/disk/by-uuid/<a uuid> does not exist
Generating "/run/initramfs/rdsosreport.txt"

journalctl接下來是使用並可能保存rdsosreport.txt錯誤報告的建議。

確認!怎麼辦?我到處搜尋這個Warning [...] does not existdracut emergency shell上面引用的東西。沒什麼!

答案1

更新 fstab

需要/etc/fstab使用分區的正確 UUID 更新文件

更新密碼表

如果您先前的分割區已加密,您需要從其中刪除該條目/etc/crypttab

如果您的新分割區已加密,您需要在/etc/crypttab

重新生成initramfs

更新/etc/fstab/etc/crypttab檔案後,您需要使用 dracut 更新 initramfs 映像。

您可以透過執行以下命令從 dracut 緊急 shell 更新 dracut 映像

# dracut --hostonly --regenerate-all --force
參考

答案2

訊息:

Warning: /dev/disk/by-uuid/<uuid> does not exist

是一個主要線索。

事實證明,根分區UUID儲存在grub2現代 Fedora 伺服器/boot分區部分的兩個位置。但在這種情況下,其實有三個UUID問題。

根分區(“/”)的重新格式化實際上改變了UUID.UUID因此,必須先發現新事物,然後將其放入正確的位置。有很多方法可以找到,UUIDs但執行此操作的一個命令列工具是blkid- 如本例所示:

# blkid
/dev/sda1: UUID="64bbac09-1a12-4bea-8873-212ffb56f2a8" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="8a09913a-fdb2-42a0-98e3-6b89e16374d2"

UUIDs請注意,對於每個分割區,此工具顯示兩個分割區;你想要其中的第一個。另請注意,非特權用戶無法運行blkid.

以下是根分區UUID需要位於的三個位置:

  1. /etc/fstab描述根分割區掛載的行中,並且;
  2. /boot/grub2.cfg設定內核選項就行了。找到它的最快方法是尋找前者(UUID如果您還擁有它)。或尋找"set kernelopts="root=UUID=", 和;
  3. 位於/boot/grub2/grubenv與文件中引用的行類似的行上/boot/grub2.cfg。尋找:kernelopts=root=UUID=

請記住僅更改一個新的 UUID,而其他所有內容均保持原樣。也許在編輯之前先備份文件,以防萬一!

相關內容