共用方式為


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的虛擬機序列主控台。

  1. 識別您的 VM 是否降落在dracut緊急殼層中。

  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 修復命令 來建立修復 VM,該 VM 具有鏈接受影響 VM 的 OS 磁碟復本。 使用 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 時,無法在初始 RAM 磁碟中包含 Hyper-V 驅動程式。

GRUB 設定錯誤

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

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

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

  • 如果您在修復/救援 VM 中的 chroot 內:

    1. 請遵循脫機疑難解答中的步驟 1。
    2. /etc/default/grub驗證檔案、GRUB_CMDLINE_LINUX專案,並在組態檔中硬式編碼時尋找 root= 參數。
    3. 重新安裝 GRUB 並重新產生 GRUB 配置檔
  • 如果您是在 Azure 序列控制台中:

    1. 請遵循在線疑難解答中的步驟 3。
    2. 驗證這 linux16 一行,然後尋找 root= 參數並加以修正。
    3. 選取 Ctrl+X 以開機 VM。
    4. VM 成功開機後,請修改/etc/default/grub檔案、修正 root 參數,並更新 GRUB 組態檔,如重新安裝 GRUB 並重新產生 GRUB 配置檔中所述

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

  • 在具有 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. 請遵循脫機疑難解答中的步驟 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 資料分割資料表) 或 gdisk [GPT 資料分割資料表] 之類的fdisk工具執行這項操作,以存取無法存取的檔案系統。 請遵循修復/救援 VM 的這項復原作業。 如需詳細資訊,請參閱 脫機疑難解答 一節。

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

Initrd 或 initramfs 損毀

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

若要解決此問題,請遵循修復/救援 VM 中 chroot 內的下列步驟:

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

下一步

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

與我們連絡,以取得說明

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