Falha na inicialização da máquina virtual Linux do Azure após o tipo de sistema de arquivos VFAT ser desabilitado
Aplica-se a: ✔️ VMs do Linux
Observação
O CentOS mencionado neste artigo é uma distribuição Linux e chegará ao fim da vida útil (EOL). Considere seu uso e planeje adequadamente. Para obter mais informações, consulte Diretrizes de fim da vida útil do CentOS.
Este artigo fornece soluções para um problema em que uma VM (máquina virtual) Linux do Azure não pode inicializar depois de desabilitar o tipo de sistema de arquivos VFAT (tabela de alocação de arquivos virtual).
O VFAT é necessário nos seguintes cenários:
As distribuições do Linux endossadas em VMs do Azure montam o sistema de arquivos /boot/efi .
As VMs do Linux Gen2 (baseadas em UEFI) exigem o sistema de arquivos /boot/efi , mas ele está incluído nas imagens do Linux Gen1 (baseadas em BIOS).
Criptografe o sistema operacional e os discos de dados das VMs Linux do Azure usando o Azure Disk Encryption (ADE).
Desabilitar o VFAT fará com que as VMs Linux do Azure falhem ao inicializar. Várias ferramentas de proteção podem desativar o VFAT. Para evitar esse tipo de problema, certifique-se de que o VFAT esteja excluído da proteção e habilitado.
Pré-requisitos
Verifique se o console serial está habilitado e funcional na VM do Linux.
Como identificar o problema de inicialização
Para identificar um problema de inicialização, use a CLI do AZ ou o portal do Azure para exibir a saída do log do console serial da VM no painel de diagnóstico de inicialização ou no painel do console serial. Se o VFAT estiver desativado, você enfrentará os seguintes problemas:
Falha ao montar /boot/efi
Quando o sistema de arquivos /boot/efi falha ao ser montado, uma ou mais das seguintes saídas são exibidas:
Saída 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.
Saída 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.
Saída 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.
A VM criptografada do ADE não consegue acessar o volume raiz
Quando uma VM com o sistema operacional criptografado e o VFAT desabilitado falha ao inicializar, a saída correspondente é exibida, conforme mostrado abaixo. Depois que o sistema expirar, o shell dracut ou initramfs aparecerá no final do log do console serial.
Ubuntu VM com o disco do sistema operacional criptografado e VFAT desabilitado:
[ 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 com o disco do sistema operacional criptografado e o VFAT desabilitado:
%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 com o disco do sistema operacional criptografado e VFAT desabilitado:
[ 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.
Em alguns sistemas antigos, você pode ver o seguinte erro no console serial do Azure:
Erro de tipo de sistema de arquivos desconhecido 'vfat'.
Todas as VMs com esse problema acabarão travadas em dracut/initramfs e aparecerão no final do log do console serial:
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)
Para resolver o problema de inicialização, vá para Solução de problemas online ou Solução de problemas offline.
Observação
Se o disco do sistema operacional não estiver criptografado e apenas os sistemas de arquivos de dados forem criptografados usando o ADE, os discos de dados criptografados pelo ADE não serão montados porque o VFAT está desabilitado. Nesse caso, siga as mesmas etapas em Solução de problemas online ou Solução de problemas offline para resolver esse problema.
Solução de problemas on-line
Dica
Se você tiver um backup recente da VM antes que o VFAT seja desabilitado, restaure a VM do backup para corrigir o problema de inicialização.
O console serial é o método mais rápido para resolver esse problema. Ele permite que você corrija o problema diretamente sem precisar apresentar o disco do sistema a uma VM de recuperação. Certifique-se de atender aos pré-requisitos necessários para sua distribuição. Para obter mais informações, consulte Console serial da máquina virtual para Linux.
Falha nas VMs não criptografadas ao montar /boot/efi
Use o console serial do Azure para inicializar a VM no modo de usuário único. Para obter mais informações, consulte Use o Console Serial para acessar o GRUB e o modo de usuário único.
Para inicializar a VM no modo de usuário único, interrompa o processo de inicialização no nível do menu GRUB e edite a entrada principal do kernel para adicionar a
init=/bin/bash
opção kernel na linha GRUB que começa comlinux
.Certifique-se de que todos os sistemas de arquivos necessários estejam montados e que a raiz esteja no modo de leitura e gravação.
Se você inicializar o sistema usando a
init=/bin/bash
opção kernel, prepare os sistemas de arquivos necessários executando os seguintes comandos:mount -o rw,remount / mount -a
Reinicie o sistema.
Observação
Se a VM for Gen1 e não estiver criptografada, você também poderá simplesmente comentar a /boot/efi
entrada de /etc/fstab , pois /boot/efi
não é necessário em VMs Gen1. Para obter mais informações, consulte Solucionar problemas de inicialização da VM do Linux devido a erros de fstab.
Falha ao inicializar VMs criptografadas ADE
VM com disco do sistema operacional criptografado:
Quando o disco do sistema operacional é criptografado, não é possível solucionar esse problema no console serial do Azure.
A VM com apenas discos de dados criptografados falha ao inicializar devido a problemas de /etc/fstab:
Se apenas os discos de dados da VM forem criptografados (o disco do sistema operacional não é criptografado), para inicializar o sistema, adicione a
nofail
opção mount às entradas correspondentes em /etc/fstab do modo de usuário único usando o console serial do Azure. Para obter mais informações, consulte Solucionar problemas de inicialização da VM do Linux devido a erros de fstab.Depois que a VM for inicializada, habilite novamente o VFAT e reinicie a VM.
Solução de problemas off-line
Dica
Se você tiver um backup recente da VM antes que o VFAT seja desabilitado, restaure a VM do backup para corrigir o problema de inicialização.
Se o console serial do Azure não funcionar na VM específica ou não for uma opção em sua assinatura, solucione esse problema usando uma VM de resgate/reparo.
Falha nas VMs não criptografadas ao montar /boot/efi
Use comandos de reparo vm para criar uma VM de reparo que tenha uma cópia anexada do disco do sistema operacional da VM afetada. Monte a cópia dos sistemas de arquivos do sistema operacional na VM de reparo usando chroot.
Observação
Como alternativa, você pode criar uma VM de resgate manualmente usando o portal do Azure. Para obter mais informações, confira Solucionar problemas de uma VM do Linux anexando o disco do sistema operacional a uma VM de recuperação usando o portal do Azure.
Depois que o VFAT for reativado, execute as seguintes ações:
Saia do chroot e desmonte a cópia dos sistemas de arquivos da VM de resgate/reparo.
Execute o comando
az vm repair restore
para trocar o disco reparado do sistema operacional pelo disco original do sistema operacional da VM. Para obter mais informações, consulte a Etapa 5 em Reparar uma VM do Linux usando os comandos de reparo da Máquina Virtual do Azure.Valide se a VM pode inicializar examinando o console serial do Azure ou tentando se conectar à VM.
Observação
Se a VM for Gen1 e não estiver criptografada, você também poderá simplesmente comentar a /boot/efi
entrada de /etc/fstab , pois /boot/efi
não é necessário em VMs Gen1. Para obter mais informações, consulte Solucionar problemas de inicialização da VM do Linux devido a erros de fstab.
Falha na inicialização de VMs criptografadas do ADE
Use comandos de reparo vm para criar uma VM de reparo que tenha uma cópia anexada do disco do sistema operacional da VM afetada.
Quando a VM é criptografada usando o ADE, os comandos de reparo da VM do Azure cuidam do desbloqueio e da montagem dos sistemas de arquivos criptografados para você. Os sistemas de arquivos criptografados serão montados como
/investigateroot/*
e/investigateboot
. Você pode entrar na VM de reparo e remontar os sistemas de arquivos nos pontos de montagem desejados usando chroot.Observação
Como alternativa, você pode criar uma VM de resgate manualmente usando o portal do Azure e anexando uma cópia do disco do sistema operacional criptografado no momento da criação da VM. Para obter mais informações, consulte Solucionar problemas de uma VM do Linux anexando o disco do sistema operacional a uma VM de recuperação usando o portal do Azure.
Depois que o VFAT for reativado, execute as seguintes ações:
Saia do chroot e desmonte a cópia dos sistemas de arquivos da VM de resgate/reparo.
Execute o comando
az vm repair restore
para trocar o disco reparado do sistema operacional pelo disco original do sistema operacional da VM. Para obter mais informações, consulte a Etapa 5 em Reparar uma VM do Linux usando os comandos de reparo da Máquina Virtual do Azure.Valide se a VM pode inicializar examinando o console serial do Azure ou tentando se conectar à VM.
Reativar o VFAT
Identifique os arquivos que desabilitam o VFAT e os números de linha correspondentes executando o seguinte comando:
grep -nr vfat /etc/modprobe.d/
Modifique o arquivo correspondente e comente ou exclua a entrada do VFAT. A entrada será mais comumente:
install vfat /bin/true
.vi /etc/modprobe.d/disable.conf
Observação
Substitua
disable.conf
pelo nome do arquivo correspondente em que o VFAT está desativado.Gere novamente o arquivo initramfs usando o seguinte comando correspondente:
Execute o comando no console serial do 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)
Execute o comando de uma VM de reparo/resgate:
Importante
Certifique-se de que a etapa 1 em Solução de problemas offline seja seguida e que esses comandos sejam executados dentro do 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
Substitua
3.10.0-1160.59.1.el7.x86_64
pela versão do kernel correspondente.SLES 12/15
dracut -f /boot/initrd-5.3.18-150300.38.53-azure 5.3.18-150300.38.53-azure
Importante
Substitua
5.3.18-150300.38.53-azure
pela versão do kernel correspondente.Ubuntu 18.04
mkinitramfs -k -o /boot/initrd.img-5.4.0-1077-azure
Importante
Substitua
5.4.0-1077-azure
pela versão do kernel correspondente.
Próximas etapas
Se o erro de inicialização específico não for um problema desabilitado do VFAT, consulte Solucionar problemas de erros de inicialização de Máquinas Virtuais Linux do Azure para obter mais opções de solução de problemas.
Entre em contato conosco para obter ajuda
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.