共用方式為


VFAT 檔案系統類型停用後,Azure Linux 虛擬機器無法開機

適用於:✔️ Linux VM

注意

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

本文提供在停用虛擬檔案配置資料表 (VFAT) 檔案系統類型之後,Azure Linux 虛擬機 (VM) 無法開機的問題解決方案。

下列案例需要 VFAT:

  • Azure VM 上背書的 Linux 散發套件會掛接 /boot/efi 文件系統。

    Linux Gen2 VM(以 UEFI 為基礎)需要 /boot/efi 文件系統,但它包含在 Gen1(BIOS 型)Linux 映射中。

  • 使用 Azure 磁碟加密(ADE)加密 Azure Linux VM 的 OS 和數據磁碟。

停用 VFAT 會導致 Azure Linux VM 無法開機。 數個強化工具可以停用 VFAT。 若要避免這類問題,請確定 VFAT 已從強化中排除並啟用。

必要條件

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

如何識別開機問題

若要識別開機問題,請使用 AZ CLI 或 Azure 入口網站,在開機診斷窗格或序列控制檯窗格中檢視 VM 的序列控制台記錄輸出。 如果 VFAT 已停用,您將會遇到下列問題:

無法掛接 /boot/efi

當 /boot/efi 檔案系統無法掛接時,會顯示下列一或多個輸出:

  • 輸出 1

    [[1;31mFAILED[0m] Failed to mount /boot/efi.
    
    See 'systemctl status boot-efi.mount' for details.
    
    [[1;33mDEPEND[0m] Dependency failed for Local File Systems.
    
    [[1;33mDEPEND[0m] Dependency failed for Relabel all filesystems, if necessary.
    
    [[1;33mDEPEND[0m] Dependency failed for Migrate local... structure to the new structure.
    
    [[1;33mDEPEND[0m] Dependency failed for Mark the need to relabel after reboot.
    
  • 輸出 2

    [FAILED] Failed to mount /boot/efi.
    See 'systemctl status boot-efi.mount' for details.
    [DEPEND] Dependency failed for Local File Systems.
    [DEPEND] Dependency failed for Mark the need to relabel after reboot.
    
  • 輸出 3

    [   17.707983] ------------[ cut here ]------------
    [   17.714144] request_module fs-vfat succeeded, but still no fs?
    [   17.714426] RPC: Registered named UNIX socket transport module.
    [   17.721163] WARNING: CPU: 1 PID: 933 at fs/filesystems.c:275 get_fs_type+0xcd/0xe0
    [   17.738587] RPC: Registered udp transport module.
    [   17.722103] Modules linked in: fat sunrpc(+) rdma_ucm ib_srpt ib_isert iscsi_target_mod target_core_mod intel_rapl_msr intel_rapl_common isst_if_mbox_msr isst_if_common ib_iser libiscsi nfit scsi_transport_iscsi ib_umad libnvdimm rdma_cm ib_ipoib iw_cm ib_cm kvm_intel kvm irqbypass mlx5_ib crct10dif_pclmul crc32_pclmul ib_uverbs ghash_clmulni_intel rapl pcspkr ib_core i2c_piix4 hv_balloon hv_utils joydev ip_tables xfs libcrc32c mlx5_core mlxfw tls pci_hyperv pci_hyperv_intf ata_generic sd_mod t10_pi sg hv_storvsc hv_netvsc hyperv_keyboard scsi_transport_fc hid_hyperv hyperv_fb ata_piix libata hv_vmbus crc32c_intel serio_raw dm_mod
    [   17.766462] RPC: Registered tcp transport module.
    [   17.722103] CPU: 1 PID: 933 Comm: mount Not tainted 4.18.0-305.17.1.el8_4.x86_64 #1
    [   17.722103] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090008  12/07/2018
    [   17.722103] RIP: 0010:get_fs_type+0xcd/0xe0
    [   17.722103] Code: 5d 41 5c c3 80 3d 6a 7a 49 01 00 75 ec 48 89 da 44 89 e6 48 89 04 24 48 c7 c7 c8 47 ce b7 c6 05 50 7a 49 01 01 e8 6c 67 da ff <0f> 0b 48 8b 04 24 e9 66 ff ff ff 0f 1f 84 00 00 00 00 00 0f 1f 44
    [   17.722103] RSP: 0018:ffffabd68394fe70 EFLAGS: 00010282
    [   17.722103] RAX: 0000000000000000 RBX: ffffa04a1e6879e0 RCX: 0000000000000000
    [   17.722103] RDX: ffffa04a37d267a0 RSI: ffffa04a37d167c8 RDI: ffffa04a37d167c8
    [   17.722103] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000092
    [   17.722103] R10: 00000000ff000000 R11: ffffabd682fec020 R12: 0000000000000004
    [   17.722103] R13: ffffa04a1d80f920 R14: ffffa04a1e6879e0 R15: 0000000000000000
    [   17.722103] FS:  00007fb0630e1080(0000) GS:ffffa04a37d00000(0000) knlGS:0000000000000000
    [   17.722103] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   17.722103] CR2: 00007fb86bb7a0c0 CR3: 000000029bfe4004 CR4: 00000000003706e0
    [   17.722103] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [   17.722103] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [   17.722103] Call Trace:
    [   17.722103]  do_mount+0x1f2/0x950
    [   17.722103]  ksys_mount+0xb6/0xd0
    [   17.722103]  __x64_sys_mount+0x21/0x30
    [   17.722103]  do_syscall_64+0x5b/0x1a0
    [   17.722103]  entry_SYSCALL_64_after_hwframe+0x65/0xca
    [   17.874253] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [   17.722103] RIP: 0033:0x7fb06211192e
    [   17.722103] Code: 48 8b 0d 5d 15 2c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 a5 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 2a 15 2c 00 f7 d8 64 89 01 48
    [   17.722103] RSP: 002b:00007fff02a92b78 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
    [   17.722103] RAX: ffffffffffffffda RBX: 00005626752f3460 RCX: 00007fb06211192e
    [   17.722103] RDX: 00005626752f36e0 RSI: 00005626752f3700 RDI: 00005626752f53d0
    [   17.722103] RBP: 00007fb062ebe184 R08: 00005626752f3670 R09: 0000000000000003
    [   17.722103] R10: 00000000c0ed0000 R11: 0000000000000246 R12: 0000000000000000
    [   17.722103] R13: 00000000c0ed0000 R14: 00005626752f53d0 R15: 00005626752f36e0
    [   17.722103] ---[ end trace 910fa795ff1c6c89 ]---
    [[0;1;31mFAILED[0m] Failed to mount /boot/efi.
    
    See 'systemctl status boot-efi.mount' for details.
    

ADE 加密的 VM 無法存取根磁碟區

當操作系統已加密且 VFAT 停用的 VM 無法開機時,會顯示對應的輸出,如下所示。 系統逾時之後,dracut 或 initramfs 殼層會顯示在序列控制台記錄的結尾。

  • 已加密 OS 磁碟且已停用 VFAT 的 Ubuntu VM:

        [   24.062228] dracut-initqueue[261]: +++ '[' -z 0 ']'
        [   24.065039] dracut-initqueue[261]: + luksname=osencrypt
        [   24.068026] dracut-initqueue[261]: + ask_passphrase=1
        [   24.070498] dracut-initqueue[261]: + '[' /dev/sda2 '!=' /dev/sda2 ']'
        [   24.073528] dracut-initqueue[261]: + device=/dev/sda2
        [   24.076046] dracut-initqueue[261]: + numtries=1
        [   24.078410] dracut-initqueue[261]: + info 'luksOpen /dev/sda2 osencrypt'
        [   24.081822] dracut-initqueue[261]: + check_quiet
        [   24.084663] dracut-initqueue[261]: + '[' -z no ']'
        [   24.087067] dracut-initqueue[261]: + '[' no '!=' yes ']'
        [   24.089711] dracut-initqueue[261]: + echo 'luksOpen /dev/sda2 osencrypt'
        [   24.092857] dracut-initqueue[261]: luksOpen /dev/sda2 osencrypt
        [   24.095737] dracut-initqueue[261]: + ls '/mnt/azure_bek_disk/LinuxPassPhraseFileName*'
        [   24.099506] dracut-initqueue[261]: ls: cannot access /mnt/azure_bek_disk/LinuxPassPhraseFileName*: No such file or directory
        [   24.104460] dracut-initqueue[261]: + mkdir -p /mnt/azure_bek_disk/
        [   24.107648] dracut-initqueue[261]: + mount -L 'BEK VOLUME' /mnt/azure_bek_disk/
        [   24.111029] dracut-initqueue[261]: mount: unknown filesystem type 'vfat'
        [   24.114456] dracut-initqueue[261]: ++ ls '/mnt/azure_bek_disk/LinuxPassPhraseFileName*'
        [   24.118570] dracut-initqueue[261]: ls: cannot access /mnt/azure_bek_disk/LinuxPassPhraseFileName*: No such file or directory
        [   24.124108] dracut-initqueue[261]: + cryptsetupopts='--header /osluksheader'
        [   24.127630] dracut-initqueue[261]: + '[' -n '' -a '' '!=' none -a -e '' ']'
        [   24.131265] dracut-initqueue[261]: + '[' 1 -eq 0 ']'
        [   24.134614] dracut-initqueue[261]: + sleep 1 
        [   24.817478] dracut-initqueue[261]: + info 'No key found for /dev/sda2.  Will try 1 time(s) more later.'
        [   24.823243] dracut-initqueue[261]: + check_quiet
    
  • RHEL 7.x VM,OS 磁碟已加密且 VFAT 已停用:

    %G%G[[32m  OK  [0m] Found device Virtual_Disk BEK_VOLUME.
    
             Mounting /bek...
    
    [[1;31mFAILED[0m] Failed to mount /bek.
    
    See 'systemctl status bek.mount' for details.
    
  • RHEL 8.x VM,OS 磁碟已加密且 VFAT 已停用:

    [   11.592932] dracut-initqueue[470]: + systemctl start bek.mount
    [   11.600362] dracut-initqueue[470]: Bus n/a: changing state UNSET → OPENING         Mounting /bek...
    
    [   11.611171] dracut-initqueue[470]: Bus n/a: changing state OPENING → AUTHENTICATING
    [   11.616206] dracut-initqueue[470]: Executing dbus call org.freedesktop.systemd1.Manager StartUnit(bek.mount, replace)
    [   11.622972] dracut-initqueue[470]: Bus n/a: changing state AUTHENTICATING → RUNNING
    [   11.628048] dracut-initqueue[470]: Sent message type=method_call sender=n/a destination=org.freedesktop.systemd1 path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=StartUnit cookie=1 reply_cookie=0 signature=ss error-name=n/a error-message=n/a
    [   11.639221] dracut-initqueue[470]: Got message type=method_return sender=org.freedesktop.systemd1 destination=n/a path=n/a interface=n/a member=n/a cookie=1 reply_cookie=1 signature=o error-name=n/a error-message=n/a[[0;1;31mFAILED[0m] Failed to mount /bek.
    See 'systemctl status bek.mount' for details.
    
  • 在某些舊系統中,您可能會在 Azure 序列控制台中看到下列錯誤:

    未知的檔案系統類型 'vfat' 錯誤。

所有有此問題的 VM 最終都會卡在 dracut/initramfs,並顯示在序列控制台記錄的結尾:

  • RHEL/CentOS/SLES:

    ///lib/dracut/hooks/emergency/80-\x2fdev\x2fmapper\x2frootvg-rootlv.sh@1(source): warn '/dev/mapper/rootvg-rootlv does not exist'
    //lib/dracut-lib.sh@79(warn): echo 'Warning: /dev/mapper/rootvg-rootlv does not exist'
    Warning: /dev/mapper/rootvg-rootlv does not exist
    /bin/dracut-emergency@19(main): echo
    ...
    /bin/dracut-emergency@29(main): '[' -f /run/dracut/fsck/fsck_help_auto.txt ']'
    /bin/dracut-emergency@30(main): '[' -f /etc/profile ']'
    /bin/dracut-emergency@30(main): . /etc/profile
    //etc/profile@1(source): PS1='dracut:${PWD}# '
    /bin/dracut-emergency@31(main): '[' -z 'dracut:${PWD}# ' ']'
    /bin/dracut-emergency@32(main): exec sh -i -l
    dracut:/# 
    
  • Ubuntu:

    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)
    

若要解決開機問題,請移至 在線疑難解答脫機疑難解答

注意

如果未加密 OS 磁碟,而且只有使用 ADE 來加密資料檔案系統,ADE 加密的數據磁碟將無法掛接,因為 VFAT 已停用。 在此情況下,請遵循在線疑難解答或離線疑難解答中的相同步驟來解決此問題。

在線疑難解答

提示

如果您在停用 VFAT 之前有 VM 的最新備份, 請從備份 還原 VM 以修正開機問題。

序列主控台是解決此問題最快的方法。 它可讓您直接修正問題,而不需要將系統磁碟呈現至復原 VM。 請確定您符合散發套件的必要條件。 如需詳細資訊,請參閱 適用於Linux的虛擬機序列主控台。

非加密的 VM 無法掛接 /boot/efi

  1. 使用 Azure 序列主控台以單一使用者模式開機 VM。 如需詳細資訊,請參閱使用序列主控台來存取 GRUB 與單一使用者模式

    若要以單一使用者模式開機 VM,請中斷 GRUB 功能表層級的開機程式,並編輯主要核心專案,以在以 開頭linux的 GRUB 行中新增init=/bin/bash核心選項。

    動畫 GIF,顯示中斷 GRUB 功能表層級開機程式以單一使用者模式開機系統的程式。

  2. 請確定已掛接所有必要的文件系統,且根目錄處於讀取和寫入模式。

    1. 如果您使用核心選項開機系統 init=/bin/bash ,請執行下列命令來準備必要的檔案系統:

      mount -o rw,remount /
      mount -a
      
    2. 重新啟用 VFAT

    3. 重新啟動系統。

注意

如果 VM 是 Gen1 且未加密,您也可以直接將 /etc/fstab /boot/efi 中的專案批注化/boot/efi為 Gen1 VM 中不需要的專案。 如需詳細資訊,請參閱 針對Linux VM啟動問題進行疑難解答,因為 fstab 錯誤

ADE 加密的 VM 無法開機

  • 已加密 OS 磁碟的 VM:

    當 OS 磁碟加密時,您無法從 Azure 序列主控台針對此問題進行疑難解答。

  • 只有加密資料磁碟的 VM 因為 /etc/fstab 問題而無法開機:

    1. 如果只有 VM 數據磁碟已加密(OS 磁碟未加密),若要啟動系統,請使用 Azure 序列控制台,將掛接選項新增nofail至 /etc/fstab 中的對應專案。 如需詳細資訊,請參閱 針對Linux VM啟動問題進行疑難解答,因為 fstab 錯誤

    2. VM 開機後, 請重新啟用 VFAT 並重新啟動 VM。

離線疑難解答

提示

如果您在停用 VFAT 之前有 VM 的最新備份, 請從備份 還原 VM 以修正開機問題。

如果 Azure 序列主控台無法在特定 VM 中運作,或不是訂用帳戶中的選項,請使用救援/修復 VM 針對此問題進行疑難解答。

非加密的 VM 無法掛接 /boot/efi

  1. 使用 VM 修復命令 來建立修復 VM,該 VM 具有鏈接受影響 VM 的 OS 磁碟復本。 使用 chroot 掛接修復 VM 中的 OS 檔案系統複本。

    注意

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

  2. 重新啟用 VFAT

  3. 重新啟用 VFAT 之後,請執行下列動作:

    1. 結束 chroot,並從救援/修復 VM 卸除文件系統的複本。

    2. az vm repair restore執行 命令,將修復的OS磁碟與VM的原始OS磁碟交換。 如需詳細資訊,請參閱使用 Azure 虛擬機修復命令修復 Linux VM 中的步驟 5。

    3. 查看 Azure 序列主控台或嘗試連線到 VM,驗證 VM 是否能夠開機。

注意

如果 VM 是 Gen1 且未加密,您也可以直接將 /etc/fstab /boot/efi 中的專案批注化/boot/efi為 Gen1 VM 中不需要的專案。 如需詳細資訊,請參閱 針對Linux VM啟動問題進行疑難解答,因為 fstab 錯誤

ADE 加密的 VM 無法開機

  1. 使用 VM 修復命令 來建立修復 VM,該 VM 具有鏈接受影響 VM 的 OS 磁碟復本。

  2. 使用 ADE 加密 VM 時, Azure VM 修復命令 會為您處理解除鎖定和掛接加密檔案系統。 加密的檔案系統會掛接為 /investigateroot/*/investigateboot。 您可以使用 chroot 登入修復 VM,並將檔案系統重新掛接至所需的裝入點

    注意

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

  3. 重新啟用 VFAT

  4. 重新啟用 VFAT 之後,請執行下列動作:

    1. 結束 chroot,並從救援/修復 VM 卸除文件系統的複本。

    2. az vm repair restore執行 命令,將修復的OS磁碟與VM的原始OS磁碟交換。 如需詳細資訊,請參閱使用 Azure 虛擬機修復命令修復 Linux VM 中的步驟 5。

    3. 查看 Azure 序列主控台或嘗試連線到 VM,驗證 VM 是否能夠開機。

重新啟用 VFAT

  1. 執行下列命令來識別停用 VFAT 和對應行號的檔案:

    grep -nr vfat /etc/modprobe.d/
    
  2. 修改對應的檔案並批注化或刪除 VFAT 專案。 專案最常是: install vfat /bin/true

    vi /etc/modprobe.d/disable.conf
    

    注意

    將取代 disable.conf 為已停用 VFAT 的對應檔名。

  3. 使用下列對應的命令重新產生 initramfs 檔案:

    • 從 Azure 序列主控台執行 命令:

      • RHEL/CentOS/Oracle Linux 7/8

        dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
        
      • SLES 12/15

        dracut -f /boot/initrd-$(uname -r) $(uname -r)
        
      • Ubuntu 18.04

        mkinitramfs -k -o /boot/initrd.img-$(uname -r)
        
    • 從修復/救援 VM 執行命令:

      重要

      請確定已遵循離線疑難解答中的步驟 1,並在 chroot執行這些命令。

      • RHEL/CentOS/Oracle Linux 7/8

        dracut -f /boot/initramfs-3.10.0-1160.59.1.el7.x86_64.img 3.10.0-1160.59.1.el7.x86_64
        

        重要

        將取代 3.10.0-1160.59.1.el7.x86_64 為對應的核心版本。

      • SLES 12/15

        dracut -f /boot/initrd-5.3.18-150300.38.53-azure 5.3.18-150300.38.53-azure
        

        重要

        將取代 5.3.18-150300.38.53-azure 為對應的核心版本。

      • Ubuntu 18.04

        mkinitramfs -k -o /boot/initrd.img-5.4.0-1077-azure
        

        重要

        將取代 5.4.0-1077-azure 為對應的核心版本。

下一步

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

與我們連絡,以取得說明

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