Condividi tramite


L'avvio della macchina virtuale Linux di Azure non riesce 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.

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

VFAT è necessario negli scenari seguenti:

La disabilitazione di VFAT causerà l'esito negativo dell'avvio delle macchine virtuali Linux di 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

Per identificare un problema di avvio, usare l'interfaccia della riga di comando di Az o portale di Azure per visualizzare l'output del log della console seriale della macchina virtuale nel riquadro di diagnostica di avvio o nel riquadro della 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:

  • Output 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.
    
  • Output 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 macchina virtuale crittografata di Azure 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 di 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 di 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.

L'avvio delle macchine virtuali crittografate di Azure non riesce

  • Macchina virtuale con disco del sistema operativo crittografato:

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

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

    1. Se vengono crittografati solo i dischi dati della macchina virtuale (il disco del sistema operativo non è crittografato), per avviare il sistema, aggiungere l'opzione nofail di montaggio alle voci corrispondenti in /etc/fstab dalla modalità utente singolo usando la console seriale di 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 di 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 salvataggio usando il portale di Azure. Per altre informazioni, vedere Risolvere i problemi di una macchina virtuale Linux collegando il disco del sistema operativo a una macchina virtuale di ripristino tramite 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 ripristino/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 Riparare una macchina virtuale Linux usando i comandi di riparazione della macchina virtuale di Azure.

    3. Verificare se la macchina virtuale è in grado di avviarsi dando un'occhiata alla console seriale di 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 di Azure 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 tramite ADE, i comandi di ripristino della macchina virtuale di 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 altre informazioni, vedere Risolvere i problemi di una macchina virtuale Linux collegando il disco del sistema operativo a una macchina virtuale di ripristino tramite il portale di Azure.

  3. Riabilitare VFAT.

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

    1. Uscire da chroot e smontare la copia dei file system dalla macchina virtuale di ripristino/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 Riparare una macchina virtuale Linux usando i comandi di riparazione della macchina virtuale di Azure.

    3. Verificare se la macchina virtuale è in grado di avviarsi dando un'occhiata alla console seriale di 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. Modificare il file corrispondente e impostare come commento o eliminare 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 di 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 da una macchina virtuale di ripristino/ripristino:

      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 è un problema di VFAT disabilitato, vedere Risolvere gli errori di avvio di Linux di Azure Macchine virtuali per altre opzioni di risoluzione dei problemi.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.