共用方式為


Azure Linux 虛擬機無法開機,並進入拖曳緊急殼層

注意事項

本文中參考的 CentOS 是 Linux 發行版,並會到達生命周期結束 (EOL) 。 請考慮您的使用並據以規劃。 如需詳細資訊,請 參閱 CentOS 生命週期結束指引

本文提供 Azure Linux 虛擬機 (VM) 無法開機的問題解決方案,因為無法從 RAMdisk 存取作業系統 (OS) 文件系統。 VM 會落在繪製緊急殼層中。

先決條件

請確定 序列主控台 已在Linux VM 中啟用並正常運作。

如何識別拖曳開機問題

若要識別執行開機問題,請使用 Azure 入口網站,在開機診斷窗格、序列控制檯窗格或使用 AZ CLI 中檢視 VM 的序列控制台記錄輸出。

所有發生開機問題的 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的虛擬機序列主控台

  1. 識別您的 VM 是否登陸至繪製緊急殼層

  2. 嘗試使用 Azure 序列主控台來針對問題進行疑難解答。

    注意事項

    並非每個問題都可以使用 Azure 序列控制台來解決。

    1. 觸發程式從序列主控台 (硬) 重新啟動 VM
    2. 使用 ESC 金鑰在 GRUB 功能表中斷您的 VM。
    3. 取 [E ] 以修改 GRUB 功能表中的第一個核心專案。
    4. 移至行 linux16 ,然後驗證並更正 GRUB 設定錯誤 ,如下所示:
  3. 手動修改 GRUB 設定之後,選取 Ctrl+X 以啟動 VM。

    在這個階段完成的任何修改都是非持續性的修改。 如果 VM 能夠開機,請在 GRUB 組態檔中解決此問題,否則會重複發生。

  4. VM 重新上線之後,請修正組態檔中的 /etc/default/grub 組態問題,並更新 GRUB 組態。 若要這樣做,請 參閱重新安裝 GRUB 並重新產生 GRUB 組態檔

  5. 重新啟動 VM,以確保它能夠在沒有任何手動介入的情況下開機。

離線疑難解答

提示

如果您有 VM 的最新備份,請 從備份還原 VM 以修正開機問題。

  1. 如果 Azure 序列主控台 無法在特定 VM 中運作,或不是您訂用帳戶中的選項,請使用修復/修復 VM 針對此問題進行疑難解答。 使用 vm repair 命令 來建立已鏈接受影響 VM OS 磁碟復本的修復 VM。 使用 chroot 在修復 VM 中掛接 OS 檔案系統的複本。

    注意事項

    或者,您可以使用 Azure 入口網站 手動建立救援 VM。 如需詳細資訊,請參閱使用 Azure 入口網站 將 OS 磁碟連結至復原 VM,以針對 Linux VM 進行疑難解答

  2. 移至下列各節以解決特定問題:

  3. 解決dracut/initramfs相關的開機問題之後,請執行下列動作:

    1. 結束 chroot。
    2. 從修復/修復 VM 卸除文件系統的複本。
    3. az vm repair restore執行 命令,將修復的OS磁碟與VM的原始OS磁碟交換。 如需詳細資訊,請參閱 使用 Azure 虛擬機修復命令修復 Linux VM 中的步驟 5。
    4. 查看 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 時,Hyper-V 驅動程式無法包含在初始 RAM 磁碟中。

GRUB 設定錯誤

參數 rd.break 會強制 VM 在繪製緊急殼層中開機。 請確定此參數未在 GRUB 組態檔中硬式編碼。

GRUB 組態檔中的根裝置路徑錯誤

驗證 GRUB 組態檔中的根路徑 root=/dev/*** 是否正確。 請確定已使用適當的裝置路徑。

在此驗證期間,請確定下列事項:

  • 在具有 OS 加密的 Ubuntu VM 中,確定裝置名稱為 /dev/mapper/osencrypt
  • 在操作系統磁碟具有邏輯磁碟區管理員 (LVM) 的 VM 中,根磁碟區為 /dev/mapper/rootvg-rootlv。 在已加密 ADE OS 磁碟的 RHEL VM 中使用相同的路徑。
  • 請確定未使用任何格式的 /dev/sdX 裝置名稱,因為它們會在重新啟動時變更,而且在Linux中不會持續存在。 如需詳細資訊,請參閱 針對 Linux VM 裝置名稱變更進行疑難解答
  • 如果使用 UUID,請確定已使用適當的根檔案系統 UUID,且語法為 root=UUID=xxx-yyy-zzz

GRUB 組態檔中的交換裝置路徑錯誤

在此案例中,VM 無法完成開機程式,並進入 繪製 緊急殼層,並出現類似下列的錯誤:

[  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. 請遵循 脫機疑難解答中的步驟 1。
    2. /etc/default/grub編輯檔案、移至GRUB_CMDLINE_LINUX專案、找出 rd.lvm.lv=VG/SwapVol 參數,然後從組態中移除它。
    3. 重新安裝 GRUB 並重新產生 GRUB 組態檔
  • 如果您在 Azure 序列控制台中:

    1. 請遵循 在線疑難解答中的步驟 3。
    2. 移至開頭為 linux的行,找出 rd.lvm.lv=VG/SwapVol 參數並將其移除。
    3. 選取 Ctrl+X 以開機 VM。
    4. 一旦 VM 成功開機,請修改 /etc/default/grub 檔案、移除 rd.lvm.lv=VG/SwapVol 參數,然後更新 GRUB 組態檔,如 重新安裝 GRUB 並重新產生 GRUB 組態檔 一節中的指示。

GRUB 組態檔中的重複參數

驗證 GRUB 組態檔中是否有重複的參數:

  • 如果您在修復/修復 VM 中的 Chroot 內:

    1. 請遵循 脫機疑難解答中的步驟 1。
    2. 驗證 /etc/default/grub 檔案和 GRUB_CMDLINE_LINUX 專案。
    3. 尋找重複的參數並加以移除。
    4. 更新 GRUB 組態檔。 如需詳細資訊,請 參閱重新安裝 GRUB 並重新產生 GRUB 組態檔
  • 如果您在 Azure 序列控制台中:

    1. 請遵循 在線疑難解答中的步驟 3。
    2. 驗證這一 linux16 行,尋找重複的參數並將其移除。
    3. 選取 Ctrl+X 以開機 VM。
    4. 一旦 VM 成功啟動,請據以修改 /etc/default/grub 檔案、修正先前識別的組態問題,並依照 重新安裝 GRUB 並重新產生 GRUB 組態檔中的指示更新 GRUB 組態檔。

根文件系統損毀

當根文件系統損毀時,無法從 initrd/initramfs 映射掛接它。

若要修正根文件系統損毀,請遵循 針對因文件系統錯誤而導致的Linux虛擬機開機問題進行疑難解答 - 執行檔系統修復中的指示。

LVM 啟用的問題

當您存取 LVM 實體磁碟區 (PV) 、磁碟區群組 (VG) ,以及/或邏輯磁碟區 (LV) 時,可能會發生一些問題。 無法從 Azure 序列主控台尋址。 若要解決這些問題,請使用修復/修復 VM。

  1. 請遵循 脫機疑難解答中的步驟 1。

  2. 若要識別問題,請執行下列命令,並查看命令輸出。

    1. 識別哪個裝置對應至 OS 磁碟,並確認其是否偵測為 PV:

      lsblk
      pvs
      
    2. 驗證是否 rootvg 偵測到 VG:

      vgs
      
    3. 驗證是否偵測到 LV:

      lvs
      
  3. 針對下列造成存取根磁碟區問題的常見 LVM 錯誤進行疑難解答:

    • 當 rootvg VG 只有單一 PV 時,未知的 PV (這是標準的 Azure 設定)

      不正確地刪除、重設大小或建立保存PV的分割區。 若要解決此問題,請參閱 根數據分割遺失

    • 當 rootvg VG 修改並分割到多個磁碟時,未知的 PV

      不建議在 rootvg VG 中擁有 2 個 PV。 在此案例中,數據磁碟可能會與虛擬機中斷連結,而且無法再存取 rootvg 邏輯磁碟區。 若要解決此問題,請將原始磁碟重新連結至 VM 並重新啟動。

  4. 如果 PV 無法復原,請 從備份執行還原

根分割區遺失

根文件系統可能無法存取,因為分割區層級在數據分割重設大小作業期間發生一些問題或其他問題。

在此案例中,如果您已記錄原始數據分割數據表配置,且每個原始數據分割的確切開始和結束扇區 (,而且系統上沒有進一步的修改,例如建立新文件系統) ,請使用相同的原始版面配置來重新建立數據分割。 您可以使用 MBR 資料分割資料表的 (等 fdisk 工具來執行此動作,) 或 gdisk (GPT 資料分割資料表) ,以存取無法存取的檔案系統。 從修復/修復 VM 遵循此復原作業。 如需詳細資訊,請 參閱脫機疑難解答一 節。

如果這種方法無法運作,建議 您從備份執行還原

Initrd 或 initramfs 損毀

initrd/initramfs 映射有某種程度的損毀,導致掛接根磁碟區並啟動 OS 啟動程序失敗。

若要解決此問題,請從修復/修復 VM 中的 Chroot 內部遵循下列步驟:

  1. 請遵循 脫機疑難解答中的步驟 1。
  2. 手動重新產生遺漏的 initramfs
  3. 重新啟動 VM 以確認它是否能夠開機。

後續步驟

如果特定開機錯誤不是拖曳或 initramfs 問題,請參閱針對 Azure Linux 虛擬機器 開機錯誤進行疑難解答,以取得進一步的疑難解答選項。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群