Macchina virtuale Linux di Azure non riesce ad avviarsi dopo la disabilitazione del tipo di file system VFAT

Si applica a: ✔️ macchine virtuali di Linux

Note

CentOS a cui si fa riferimento in questo articolo è una distribuzione Linux e raggiungerà End Of Life (EOL). Valutare le proprie esigenze e pianificare di conseguenza. Per altre informazioni, vedere Indicazioni sulla fine della vita di CentOS.

Sommario

Questo articolo fornisce soluzioni a un problema in cui una macchina virtuale Linux Azure non può essere avviata dopo aver disabilitato il tipo di file system VFAT (Virtual File Allocation Table).

VFAT è necessario negli scenari seguenti:

  • Distribuzioni Linux approvate su macchine virtuali Azure montano il file system /boot/efi.

    Le macchine virtuali Linux Gen2 (basate su UEFI) richiedono il file system /boot/efi , ma è incluso nelle immagini Linux gen1 (basate su BIOS).

  • Crittografare sia il sistema operativo che i dischi dati delle macchine virtuali Linux Azure usando Crittografia dischi di Azure(ADE).

La disabilitazione di VFAT causerà l'errore di avvio delle macchine virtuali Linux Azure. Diversi strumenti di protezione avanzata possono disabilitare VFAT. Per evitare questo tipo di problema, assicurarsi che VFAT sia escluso dalla protezione avanzata ed è abilitato.

Prerequisiti

Assicurarsi che la console seriale sia abilitata e funzionale nella macchina virtuale Linux.

Come identificare il problema di avvio del sistema

Per identificare un problema di avvio, usare AZ CLI o Azure Portal per visualizzare l'output del log della console seriale della macchina virtuale nel riquadro Diagnostica di avvio o Console seriale. Se VFAT è disabilitato, si verificano i problemi seguenti:

Impossibile montare /boot/efi

Quando il file system /boot/efi non viene montato, vengono visualizzati uno o più degli output seguenti:

  • Risultato 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.
    
  • Risultato 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.
    
  • Output 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.
    

La VM crittografata con ADE non è in grado di accedere al volume radice

Quando una macchina virtuale con il sistema operativo crittografato e VFAT disabilitato non viene avviata, viene visualizzato l'output corrispondente, come illustrato di seguito. Dopo il timeout del sistema, la shell dracut o initramfs verrà visualizzata alla fine del log della console seriale.

  • Macchina virtuale Ubuntu con il disco del sistema operativo crittografato e VFAT disabilitato:

        [   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
    
  • Vm RHEL 7.x con il disco del sistema operativo crittografato e VFAT disabilitato:

    %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.
    
  • Vm RHEL 8.x con il disco del sistema operativo crittografato e VFAT disabilitato:

    [   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 alcuni sistemi precedenti è possibile che venga visualizzato l'errore seguente nella console seriale Azure:

    errore 'vfat' di tipo file system sconosciuto.

Tutte le macchine virtuali con questo problema finiscono bloccate in dracut/initramfs e vengono visualizzate alla fine del log della console seriale:

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

Per risolvere il problema di avvio, passare a Risoluzione dei problemi online o Risoluzione dei problemi offline.

Note

Se il disco del sistema operativo non è crittografato e solo i file system di dati vengono crittografati tramite ADE, i dischi dati crittografati da ADE non verranno montati perché VFAT è disabilitato. In questo caso, seguire la stessa procedura descritta in Risoluzione dei problemi online o Offline per risolvere il problema.

Risoluzione dei problemi in linea

Suggerimento

Se si dispone di un backup recente della macchina virtuale prima che VFAT sia disabilitato, ripristinare la macchina virtuale dal backup per risolvere il problema di avvio.

La console seriale è il metodo più veloce per risolvere questo problema. Consente di risolvere direttamente il problema senza dover presentare il disco di sistema a una macchina virtuale di ripristino. Assicurarsi di soddisfare i prerequisiti necessari per la distribuzione. Per altre informazioni, vedere Console seriale della macchina virtuale per Linux.

Le macchine virtuali non crittografate non riescono a montare /boot/efi

  1. Usare la console seriale Azure per avviare la macchina virtuale in modalità utente singolo. Per altre informazioni, vedere Usare la console seriale per accedere a GRUB e alla modalità utente singolo.

    Per avviare la macchina virtuale in modalità utente singolo, interrompere il processo di avvio a livello di menu GRUB e modificare la voce principale del kernel per aggiungere l'opzione init=/bin/bash kernel nella riga GRUB che inizia con linux.

    GIF animata che mostra il processo di interruzione del processo di avvio a livello di menu GRUB per avviare il sistema in modalità utente singolo.

  2. Assicurarsi che tutti i file system necessari siano montati e che la radice sia in modalità di lettura e scrittura.

    1. Se si avvia il sistema usando l'opzione init=/bin/bash kernel, preparare i file system necessari eseguendo i comandi seguenti:

      mount -o rw,remount /
      mount -a
      
    2. Riabilitare VFAT.

    3. Riavviare il sistema.

Note

Se la macchina virtuale è Gen1 e non è crittografata, è anche possibile impostare come commento la /boot/efi voce da /etc/fstab perché /boot/efi non è necessaria nelle macchine virtuali gen1. Per altre informazioni, vedere Risolvere i problemi di avvio delle macchine virtuali Linux a causa di errori fstab.

Le macchine virtuali crittografate tramite Azure Disk Encryption (ADE) non si avviano.

  • Macchina virtuale con disco del sistema operativo crittografato:

    Quando il disco del sistema operativo è crittografato, non è possibile risolvere questo problema dalla console seriale Azure.

  • La macchina virtuale con solo i dischi dati crittografati non riesce ad avviarsi a causa di problemi /etc/fstab:

    1. Se solo i dischi dati della macchina virtuale sono crittografati (il disco del sistema operativo non è crittografato), per avviare il sistema, aggiungere l'opzione di montaggio nofail alle voci corrispondenti in /etc/fstabfrom single-user mode usando la console seriale Azure. Per altre informazioni, vedere Risolvere i problemi di avvio delle macchine virtuali Linux a causa di errori fstab.

    2. Dopo l'avvio della macchina virtuale, riabilitare VFAT e riavviare la macchina virtuale.

Risoluzione dei problemi offline

Suggerimento

Se si dispone di un backup recente della macchina virtuale prima che VFAT sia disabilitato, ripristinare la macchina virtuale dal backup per risolvere il problema di avvio.

Se la console seriale Azure non funziona nella macchina virtuale specifica o non è un'opzione nella sottoscrizione, risolvere questo problema usando una macchina virtuale di ripristino/ripristino.

Le macchine virtuali non crittografate non riescono a montare /boot/efi

  1. Utilizza i comandi di riparazione vm per creare una VM di riparazione a cui è collegata una copia del disco del sistema operativo della VM interessata. Montare la copia dei file system del sistema operativo nella macchina virtuale di ripristino utilizzando chroot.

    Note

    In alternativa, è possibile creare manualmente una macchina virtuale di ripristino usando il portale di Azure. Per ulteriori informazioni, consulta Risolvi i problemi di una VM Linux attaccando il disco del sistema operativo a una VM di ripristino usando il portale di Azure.

  2. Riabilitare VFAT.

  3. Dopo aver riabilitato il VFAT, eseguire le azioni seguenti:

    1. Uscire da chroot e smontare la copia dei file system dalla macchina virtuale di soccorso/riparazione.

    2. Eseguire il comando az vm repair restore per scambiare il disco del sistema operativo ripristinato con il disco del sistema operativo originale della macchina virtuale. Per altre informazioni, vedere il Passaggio 5 in Ripara una VM Linux utilizzando i comandi di riparazione della macchina virtuale di Azure.

    3. Verificare se la macchina virtuale è in grado di eseguire l'avvio esaminando la console seriale Azure o provando a connettersi alla macchina virtuale.

Note

Se la macchina virtuale è Gen1 e non è crittografata, è anche possibile impostare come commento la /boot/efi voce da /etc/fstab perché /boot/efi non è necessaria nelle macchine virtuali gen1. Per altre informazioni, vedere Risolvere i problemi di avvio delle macchine virtuali Linux a causa di errori fstab.

L'avvio delle macchine virtuali crittografate con ADE non riesce

  1. Utilizza i comandi di riparazione vm per creare una VM di riparazione a cui è collegata una copia del disco del sistema operativo della VM interessata.

  2. Quando la macchina virtuale viene crittografata con ADE, i comandi di ripristino della macchina virtuale Azure si occupano di sbloccare e montare automaticamente i file system crittografati. I file system crittografati verranno montati come /investigateroot/* e /investigateboot. È possibile accedere alla macchina virtuale di ripristino e rimontare i file system nei punti di montaggio desiderati usando chroot.

    Note

    In alternativa, è possibile creare manualmente una macchina virtuale di ripristino usando il portale di Azure e collegando una copia del disco del sistema operativo crittografato in fase di creazione della macchina virtuale. Per ulteriori informazioni, consulta Risolvi i problemi di una VM Linux attaccando il disco del sistema operativo a una VM di ripristino usando il portale di Azure.

  3. Riabilitare VFAT.

  4. Dopo aver riabilitato il VFAT, eseguire le azioni seguenti:

    1. Uscire dalla chroot e smontare la copia dei file system dalla macchina virtuale di ripristino.

    2. Eseguire il comando az vm repair restore per scambiare il disco del sistema operativo ripristinato con il disco del sistema operativo originale della macchina virtuale. Per altre informazioni, vedere il Passaggio 5 in Ripara una VM Linux utilizzando i comandi di riparazione della macchina virtuale di Azure.

    3. Verificare se la macchina virtuale è in grado di eseguire l'avvio esaminando la console seriale Azure o provando a connettersi alla macchina virtuale.

Riabilitare VFAT

  1. Identificare i file che disabilitano VFAT e i numeri di riga corrispondenti eseguendo il comando seguente:

    grep -nr vfat /etc/modprobe.d/
    
  2. Modifica il file corrispondente e metti in commento o elimina la voce VFAT. La voce è in genere: install vfat /bin/true.

    vi /etc/modprobe.d/disable.conf
    

    Note

    Sostituire disable.conf con il nome file corrispondente in cui VFAT è disabilitato.

  3. Rigenerare il file initramfs usando il comando seguente:

    • Eseguire il comando dalla console seriale 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)
        
    • Eseguire il comando dalla VM di riparazione o soccorso.

      Importante

      Assicurarsi che il passaggio 1 nella risoluzione dei problemi offline sia seguito e che questi comandi vengano eseguiti all'interno di 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
        

        Importante

        Sostituire 3.10.0-1160.59.1.el7.x86_64 con la versione del kernel corrispondente.

      • SLES 12/15

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

        Importante

        Sostituire 5.3.18-150300.38.53-azure con la versione del kernel corrispondente.

      • Ubuntu 18.04

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

        Importante

        Sostituire 5.4.0-1077-azure con la versione del kernel corrispondente.

Passaggi successivi

Se l'errore di avvio specifico non riguarda un problema relativo alla disabilitazione di VFAT, vedere Risoluzione dei problemi degli errori di avvio delle macchine virtuali Linux su Azure per ulteriori opzioni di risoluzione dei problemi.