Azure virtuele Linux-machine kan niet worden opgestart nadat het VFAT-bestandssysteemtype is uitgeschakeld

Van toepassing op: ✔️ Virtuele Linux-machines

Notitie

CentOS waarnaar in dit artikel wordt verwezen, is een Linux-distributie en bereikt het einde van de levensduur (EOL). Houd rekening met uw gebruik en plan dienovereenkomstig. Zie De richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

Overzicht

Dit artikel bevat oplossingen voor een probleem waarbij een Azure virtuele Linux-machine (VM) niet kan worden opgestart nadat het VFAT-bestandssysteemtype (Virtual File Allocation Table) is uitgeschakeld.

VFAT is vereist in de volgende scenario's:

  • Endorsed Linux-distributies op Azure VMs koppelen het bestandssysteem /boot/efi aan.

    Linux Gen2-VM's (op basis van UEFI) vereisen het /boot/efi-bestandssysteem , maar is opgenomen in de Linux-installatiekopieën van Gen1 (BIOS).

  • Versleutel zowel besturingssysteem- als gegevensschijven van de Azure Linux-VM's met behulp van Azure Disk Encryption(ADE).

Als u VFAT uitschakelt, wordt de Azure Linux-VM's niet opgestart. Verschillende hardening-tools kunnen VFAT uitschakelen. Om dit soort problemen te voorkomen, moet u ervoor zorgen dat VFAT is uitgesloten van de beveiliging en is ingeschakeld.

Voorwaarden

Zorg ervoor dat de seriële console is ingeschakeld en functioneel is in de Virtuele Linux-machine.

Opstartprobleem identificeren

Als u een opstartprobleem wilt identificeren, gebruikt u de AZ CLI of Azure portal om de uitvoer van het seriële consolelogboek van de virtuele machine weer te geven in het deelvenster Diagnostische gegevens over opstarten of het deelvenster seriële console. Als VFAT is uitgeschakeld, ondervindt u de volgende problemen:

Kan /boot/efi niet koppelen

Wanneer het bestandssysteem /boot/efi niet kan worden gekoppeld, wordt een of meer van de volgende uitvoer weergegeven:

  • Uitvoer 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.
    
  • Uitvoer 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.
    
  • Uitvoer 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.
    

Met ADE versleutelde VM heeft geen toegang tot het hoofdvolume

Wanneer een virtuele machine met een versleuteld besturingssysteem en uitgeschakelde VFAT niet kan opstarten, wordt de bijbehorende uitvoer weergegeven, zoals hieronder te zien is. Nadat er een time-out optreedt voor het systeem, wordt de dracut- of initramfs-shell weergegeven aan het einde van het seriële consolelogboek.

  • Ubuntu-VM waarbij de besturingssysteemschijf is versleuteld en VFAT is uitgeschakeld:

        [   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 waarbij de besturingssysteemschijf is versleuteld en VFAT is uitgeschakeld:

    %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 waarbij de besturingssysteemschijf is versleuteld en VFAT is uitgeschakeld:

    [   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.
    
  • In sommige oude systemen ziet u mogelijk de volgende fout in de seriële console van Azure:

    onbekende bestandssysteemtype 'vfat'-fout.

Alle VM's met dit probleem blijven hangen bij dracut/initramfs en worden weergegeven aan het einde van het seriële consolelogboek:

  • 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)
    

Als u het opstartprobleem wilt oplossen, gaat u naar Online oplossen of Offline oplossen.

Notitie

Als de besturingssysteemschijf niet is versleuteld en alleen de gegevensbestandssystemen zijn versleuteld met ADE, kunnen de met ADE versleutelde gegevensschijven niet worden gekoppeld omdat VFAT is uitgeschakeld. In dit geval volgt u dezelfde stappen in Online-probleemoplossing of Offline-probleemoplossing om dit probleem op te lossen.

Online probleemoplossing

Tip

Als u een recente back-up van de virtuele machine hebt voordat VFAT is uitgeschakeld, herstelt u de VM vanuit de back-up om het opstartprobleem op te lossen.

De seriële console is de snelste methode om dit probleem op te lossen. Hiermee kunt u het probleem rechtstreeks oplossen zonder dat u de systeemschijf hoeft te presenteren aan een herstel-VM. Zorg ervoor dat u voldoet aan de vereiste vereisten voor uw distributie. Zie seriële console voor virtuele machines voor Linux voor meer informatie.

Niet-versleutelde VM's mislukken bij het koppelen van /boot/efi

  1. Gebruik de Azure seriële console om de virtuele machine in de modus voor één gebruiker op te starten. Zie Serial Console gebruiken voor toegang tot GRUB en modus voor één gebruiker voor meer informatie.

    Als u de VIRTUELE machine wilt opstarten in de modus voor één gebruiker, onderbreekt u het opstartproces op het menuniveau GRUB en bewerkt u de hoofdkernelvermelding om de init=/bin/bash kerneloptie toe te voegen aan de GRUB-regel die begint met linux.

    GIF-animatie die het proces van het onderbreken van het opstartproces op GRUB-menuniveau laat zien om het systeem in de modus voor één gebruiker op te starten.

  2. Zorg ervoor dat alle vereiste bestandssystemen zijn gemonteerd en dat de root zich in de lees- en schrijfmodus bevindt.

    1. Als u het systeem opstart met behulp van de init=/bin/bash kerneloptie, bereidt u de vereiste bestandssystemen voor door de volgende opdrachten uit te voeren:

      mount -o rw,remount /
      mount -a
      
    2. Schakel VFAT opnieuw in.

    3. Start het systeem opnieuw op.

Notitie

Als de VIRTUELE machine Gen1 is en deze niet is versleuteld, kunt u ook gewoon opmerkingen maken bij de /boot/efi vermelding van /etc/fstab , omdat /boot/efi deze niet nodig is in gen1-VM's. Zie Opstartproblemen met linux-VM's oplossen vanwege fstab-fouten voor meer informatie.

Versleutelde ADE-VM's kunnen niet worden opgestart

  • VM met besturingssysteemschijf versleuteld:

    Wanneer de besturingssysteemschijf is versleuteld, is het niet mogelijk om dit probleem op te lossen vanuit de Azure seriële console.

  • Vm met alleen versleutelde gegevensschijven kan niet worden opgestart vanwege /etc/fstab-problemen:

    1. Als alleen VM-gegevensschijven zijn versleuteld (de besturingssysteemschijf is niet versleuteld), voegt u de nofail koppelingsoptie toe aan de bijbehorende vermeldingen in /etc/fstabvan de modus voor één gebruiker met behulp van de Azure seriële console. Zie Opstartproblemen met linux-VM's oplossen vanwege fstab-fouten voor meer informatie.

    2. Zodra de VIRTUELE machine is opgestart, schakelt u VFAT opnieuw in en start u de VIRTUELE machine opnieuw.

Offline probleemoplossing

Tip

Als u een recente back-up van de virtuele machine hebt voordat VFAT is uitgeschakeld, herstelt u de VM vanuit de back-up om het opstartprobleem op te lossen.

Als de Azure seriële console niet werkt op de specifieke VM of geen optie in uw abonnement is, kunt u dit probleem oplossen met behulp van een herstel-/herstel-VM.

Niet-versleutelde VM's mislukken bij het koppelen van /boot/efi

  1. Gebruik vm-herstelopdrachten om een herstel-VM te maken waarop een kopie van de besturingssysteemschijf van de betreffende VM is gekoppeld. Mount de kopie van de besturingssysteem bestanden in de herstel-VM met behulp van chroot.

    Notitie

    U kunt ook handmatig een reddings-VM maken met behulp van de Azure-portal. Zie voor meer informatie Problemen oplossen met een Linux-VM door de OS-schijf aan een herstel-VM te koppelen via het Azure-portaal.

  2. Schakel VFAT opnieuw in.

  3. Nadat de VFAT opnieuw is ingeschakeld, voert u de volgende acties uit:

    1. Sluit chroot af en koppel de kopie van de bestandssystemen los van de herstel-VM.

    2. Voer de az vm repair restore opdracht uit om de herstelde besturingssysteemschijf te wisselen met de oorspronkelijke besturingssysteemschijf van de virtuele machine. Zie stap 5 in Een virtuele Linux-machine opnieuw maken met behulp van de Azure virtuele-machineherstelopdrachten voor meer informatie.

    3. Controleer of de VM kan worden opgestart door de Azure seriële console te bekijken of door verbinding te maken met de virtuele machine.

Notitie

Als de VIRTUELE machine Gen1 is en deze niet is versleuteld, kunt u ook gewoon opmerkingen maken bij de /boot/efi vermelding van /etc/fstab , omdat /boot/efi deze niet nodig is in gen1-VM's. Zie Opstartproblemen met linux-VM's oplossen vanwege fstab-fouten voor meer informatie.

Versleutelde ADE-VM's kunnen niet worden opgestart

  1. Gebruik vm-herstelopdrachten om een herstel-VM te maken waarop een kopie van de besturingssysteemschijf van de betreffende VM is gekoppeld.

  2. Wanneer de virtuele machine is versleuteld met behulp van ADE, zorgt de Azure VM-herstelopdrachten voor het ontgrendelen en koppelen van de versleutelde bestandssystemen voor u. De versleutelde bestandssystemen worden gekoppeld als /investigateroot/* en /investigateboot. U kunt zich aanmelden bij de herstel-VM en de bestandssystemen opnieuw koppelen aan de gewenste koppelpunten met behulp van chroot.

    Notitie

    U kunt ook handmatig een reddings-VM maken met behulp van de Azure-portal en een kopie van de versleutelde besturingssysteemschijf koppelen tijdens het maken van de VM. Zie voor meer informatie Problemen oplossen met een Linux-VM door de OS-schijf aan een herstel-VM te koppelen via het Azure-portaal.

  3. Schakel VFAT opnieuw in.

  4. Nadat de VFAT opnieuw is ingeschakeld, voert u de volgende acties uit:

    1. Sluit chroot af en ontkoppel de kopie van de bestandssystemen van de reddings-/herstel-VM.

    2. Voer de az vm repair restore opdracht uit om de herstelde besturingssysteemschijf te wisselen met de oorspronkelijke besturingssysteemschijf van de virtuele machine. Zie stap 5 in Een virtuele Linux-machine opnieuw maken met behulp van de Azure virtuele-machineherstelopdrachten voor meer informatie.

    3. Controleer of de VM kan worden opgestart door de Azure seriële console te bekijken of door verbinding te maken met de virtuele machine.

VFAT opnieuw inschakelen

  1. Identificeer de bestanden die VFAT en de bijbehorende regelnummers uitschakelen door de volgende opdracht uit te voeren:

    grep -nr vfat /etc/modprobe.d/
    
  2. Wijzig het bijbehorende bestand en maak commentaar of verwijder de VFAT-vermelding. De vermelding is meestal: install vfat /bin/true.

    vi /etc/modprobe.d/disable.conf
    

    Notitie

    Vervang door disable.conf de bijbehorende bestandsnaam waarbij VFAT is uitgeschakeld.

  3. Genereer het initramfs-bestand opnieuw met behulp van de volgende bijbehorende opdracht:

    • Voer de opdracht uit vanuit de Azure seriële console:

      • 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)
        
    • Voer de opdracht uit vanaf een herstel-/reddings-VM:

      Belangrijk

      Zorg ervoor dat stap 1 in Offline probleemoplossing wordt gevolgd en dat deze opdrachten worden uitgevoerd in 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
        

        Belangrijk

        Vervang door 3.10.0-1160.59.1.el7.x86_64 de bijbehorende kernelversie.

      • SLES 12/15

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

        Belangrijk

        Vervang door 5.3.18-150300.38.53-azure de bijbehorende kernelversie.

      • Ubuntu 18.04

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

        Belangrijk

        Vervang door 5.4.0-1077-azure de bijbehorende kernelversie.

Volgende stappen

Als de specifieke opstartfout geen VFAT-probleem is dat is uitgeschakeld, raadpleegt u Troubleshoot Azure Linux Virtual Machines opstartfouten voor verdere probleemoplossingsopties.