Azure Linux 虛擬機無法開機並輸入 dracut 緊急殼層
適用於:✔️ Linux VM
注意
本文所參考的 CentOS 是一種 Linux 發行版,且將到達生命周期結束(EOL)。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引。
本文提供 Azure Linux 虛擬機 (VM) 無法開機的問題解決方案,因為無法從 RAMdisk 存取作業系統 (OS) 檔案系統。 VM 落在 dracut 緊急殼層中。
必要條件
請確定 已在Linux VM中啟用序列主控台 並正常運作。
如何識別 dracut 開機問題
若要識別 dracut 開機問題,請使用 Azure 入口網站,在開機診斷窗格中檢視 VM 的序列控制台記錄輸出、序列控制檯窗格,或使用 AZ CLI。
所有有開機問題的 VM 都會降落在 dracut 或 initramfs 緊急殼層中,並會出現在序列控制台記錄的結尾:
RHEL/CentOS/SLES/Oracle Linux:
[ 201.935612] dracut-initqueue[455]: Warning: dracut-initqueue timeout - starting timeout scripts [ 201.941153] dracut-initqueue[455]: Warning: Could not boot. Starting Setup Virtual Console... [[0;32m OK [0m] Started Setup Virtual Console. Starting Dracut Emergency Shell... Warning: /dev/mapper/rootvg-rootlv does not exist Generating "/run/initramfs/rdsosreport.txt" Entering emergency mode. Exit the shell to continue. Type "journalctl" to view system logs. You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot after mounting them and attach it to a bug report. dracut:/#
Ubuntu:
mdadm: No arrays found in config file or automatically done. Gave up waiting for root file system device. Common problems: - Boot args (cat /proc/cmdline) - Check rootdelay= (did the system wait long enough?) - Missing modules (cat /proc/modules; ls /dev) ALERT! /dev/mapper/osencrypt does not exist. Dropping to a shell! BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.4) built-in shell (ash) Enter 'help' for a list of built-in commands. (initramfs)
在線疑難解答
提示
如果您有最近的 VM 備份, 請從備份 還原 VM 以修正開機問題。
序列主控台是解決問題最快的方法。 它可讓您直接修正問題,而不需要將系統磁碟呈現至復原 VM。 請確定您符合散發套件的必要條件。 如需詳細資訊,請參閱 適用於Linux的虛擬機序列主控台。
嘗試使用 Azure 序列主控台來針對問題進行疑難解答。
注意
並非所有問題都可以使用 Azure 序列控制台來解決。
手動修改 GRUB 設定之後,選取 Ctrl+X 以開機 VM。
在這個階段完成的任何修改都是非持續性的修改。 如果 VM 能夠開機,請在 GRUB 配置檔中解決此問題,否則將會重新發生。
VM 重新上線之後,請修正組態檔中的
/etc/default/grub
組態問題,並更新 GRUB 組態。 若要這樣做,請參閱 重新安裝 GRUB 並重新產生 GRUB 配置檔。重新啟動 VM,以確保它能夠開機,而不需要任何手動介入。
離線疑難解答
提示
如果您有最近的 VM 備份, 請從備份 還原 VM 以修正開機問題。
如果 Azure 序列主控台 無法在特定 VM 中運作,或不是訂用帳戶中的選項,請使用救援/修復 VM 針對此問題進行疑難解答。 使用 VM 修復命令 來建立修復 VM,該 VM 具有鏈接受影響 VM 的 OS 磁碟復本。 使用 chroot 掛接修復 VM 中的 OS 檔案系統複本。
注意
或者,您可以使用 Azure 入口網站手動建立救援 VM。 如需詳細資訊,請參閱使用 Azure 入口網站將 OS 磁碟連結至復原 VM,以針對 Linux VM 進行疑難排解。
移至下列各節以解決特定問題:
- ADE 加密的 VM 無法開機,因為 VFAT 已停用。
- 遺漏 Hyper-V 驅動程式。
- GRUB 設定錯誤。
- 根文件系統損毀。
- LVM 啟用的問題。
- 遺漏根分割區。
- Initrd 或 initramfs 損毀。
解決與dracut/initramfs相關的開機問題之後,請執行下列動作:
- 結束 chroot。
- 從救援/修復 VM 卸除文件系統的複本。
az vm repair restore
執行 命令,將修復的OS磁碟與VM的原始OS磁碟交換。 如需詳細資訊,請參閱使用 Azure 虛擬機修復命令修復 Linux VM 中的步驟 5。- 查看 Azure 序列主控台或嘗試連線到 VM,驗證 VM 是否能夠開機。
ADE 加密的 VM 無法開機,因為 VFAT 已停用
如需詳細資訊,請參閱 ADE 加密的 VM 無法開機。
遺漏 Hyper-V 驅動程式
如果所有新式 Linux 發行版的 Linux 核心中包含的 Hyper-V 驅動程式已停用,請重新啟用它們並重新產生 initramfs/initrd 映像。 如需詳細資訊,請參閱 案例 3:已停用其他 Hyper-V 驅動程式。
如果 VM 是 Red Hat,並從內部部署移轉,請在 initramfs 映射中啟用必要的 Hyper-V 驅動程式。 如需詳細資訊,請參閱 使用非 Hyper-V Hypervisor 時,無法在初始 RAM 磁碟中包含 Hyper-V 驅動程式。
GRUB 設定錯誤
參數 rd.break
會強制 VM 在dracut緊急殼層中開機。 確定 GRUB 組態檔中不會硬式編碼此參數。
GRUB 組態檔中錯誤的根裝置路徑
驗證 GRUB 組態檔中的根路徑 root=/dev/***
是否正確。 請確定已使用適當的裝置路徑。
如果您在修復/救援 VM 中的 chroot 內:
- 請遵循脫機疑難解答中的步驟 1。
/etc/default/grub
驗證檔案、GRUB_CMDLINE_LINUX
專案,並在組態檔中硬式編碼時尋找root=
參數。- 重新安裝 GRUB 並重新產生 GRUB 配置檔。
如果您是在 Azure 序列控制台中:
在此驗證期間,請確定下列事項:
- 在具有 OS 加密的 Ubuntu VM 中,確定裝置名稱為
/dev/mapper/osencrypt
。 - 在 OS 磁碟具有邏輯磁碟區管理員 (LVM) 的 VM 中,根磁碟區為
/dev/mapper/rootvg-rootlv
。 RHEL VM 中使用相同的路徑,且已加密 ADE OS 磁碟。 - 請確定不會使用任何格式
/dev/sdX
的裝置名稱,因為它們會在重新啟動時變更,而且它們不會在Linux中持續運作。 如需詳細資訊,請參閱 針對 Linux VM 裝置名稱變更進行疑難解答。 - 如果使用 UUID,請確定已使用適當的根檔案系統 UUID,語法為
root=UUID=xxx-yyy-zzz
。
GRUB 組態檔中的交換裝置路徑錯誤
在此案例中,VM 無法完成開機程式,並輸入 DRacut 緊急殼層,並出現類似下列的錯誤:
[ 188.000765] dracut-initqueue[324]: Warning: /dev/VG/SwapVol does not exist
Starting Dracut Emergency Shell...
Warning: /dev/VG/SwapVol does not exist
此範例中的 GRUB 組態檔會設定為將邏輯磁碟區 (LV) 載入為與 參數 rd.lvm.lv=VG/SwapVol
交換。 不過,VM 無法在開機過程中找到此 LV。
請務必注意,不建議在 Azure Linux VM 中以這種方式使用交換裝置。 如需詳細資訊,請參閱 建立 Azure Linux VM 的 SWAP 檔案。
若要解決此問題,請在 GRUB 組態檔中找出交換路徑 rd.lvm.lv=VG/SwapVol
(/etc/default/grub
) 並加以移除。 若要解決此問題,請使用下列其中一種方法:
如果您在修復/救援 VM 中的 chroot 內:
- 請遵循脫機疑難解答中的步驟 1。
/etc/default/grub
編輯檔案、移至GRUB_CMDLINE_LINUX
專案、找出rd.lvm.lv=VG/SwapVol
參數,然後將它從組態中移除。- 重新安裝 GRUB 並重新產生 GRUB 配置檔。
如果您是在 Azure 序列控制台中:
GRUB 組態檔中的重複參數
驗證 GRUB 組態檔中是否有重複的參數:
如果您在修復/救援 VM 中的 chroot 內:
- 請遵循脫機疑難解答中的步驟 1。
/etc/default/grub
驗證檔案和GRUB_CMDLINE_LINUX
專案。- 尋找重複的參數並加以移除。
- 更新 GRUB 組態檔。 如需詳細資訊,請參閱 重新安裝 GRUB 並重新產生 GRUB 組態檔。
如果您是在 Azure 序列控制台中:
根文件系統損毀
當根文件系統損毀時,無法從 initrd/initramfs 映射掛接。
若要修正根文件系統損毀,請遵循針對Linux虛擬機開機問題進行疑難解答中的 指示,因為文件系統錯誤 - 執行檔系統修復。
LVM 啟用的問題
當您存取 LVM 實體磁碟區 (PV)、磁碟區群組 (VG) 和/或邏輯磁碟區 (LV) 時,可能會發生一些問題。 無法從 Azure 序列主控台加以尋址。 若要加以解決,請使用修復/救援 VM。
請遵循脫機疑難解答中的步驟 1。
若要識別問題,請執行下列命令,並查看命令輸出。
識別哪個裝置對應至 OS 磁碟,並確認其是否偵測到為 PV:
lsblk pvs
驗證是否
rootvg
偵測到 VG:vgs
驗證是否偵測到 LV:
lvs
針對下列常見的 LVM 錯誤進行疑難解答,導致存取根磁碟區時發生問題:
當 rootvg VG 只有單一 PV 時,未知的 PV (這是標準 Azure 設定)
保存 PV 的數據分割未正確刪除、重設大小或建立。 若要解決此問題,請參閱 遺漏根分割區。
修改 rootvg VG 並分割到多個磁碟時,未知的 PV
在 rootvg VG 中有 2 個 PV 不是建議的設定。 在此案例中,數據磁碟可能會與虛擬機中斷連結,而且無法再存取 rootvg 邏輯磁碟區。 若要解決此問題,請將原始磁碟重新附加至 VM,然後重新啟動它。
如果 PV 無法復原,請 從備份執行還原。
遺漏根分割區
根文件系統可能無法存取,因為分割區重設大小作業或其他問題發生在分割區層級。
在此案例中,如果您記錄了原始數據分割數據表配置,且每個原始分割區的確切開始和結束扇區都未完成任何進一步修改,例如建立新的文件系統,請使用相同的原始配置重新建立分割區。 您可以使用 (針對 MBR 資料分割資料表) 或 gdisk
[GPT 資料分割資料表] 之類的fdisk
工具執行這項操作,以存取無法存取的檔案系統。 請遵循修復/救援 VM 的這項復原作業。 如需詳細資訊,請參閱 脫機疑難解答 一節。
如果此方法無法運作,建議您從備份執行還原。
Initrd 或 initramfs 損毀
initrd/initramfs 映射具有某種程度的損毀,導致掛接根磁碟區並啟動 OS 啟動程序失敗。
若要解決此問題,請遵循修復/救援 VM 中 chroot 內的下列步驟:
下一步
如果特定開機錯誤不是dracut或initramfs問題,請參閱針對 Azure Linux 虛擬機器 開機錯誤進行疑難解答,以取得進一步的疑難解答選項。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。