Поделиться через


Виртуальная машина Linux в Azure не загружается после отключения типа файловой системы VFAT

Область применения: ✔️ виртуальные машины Linux

Примечание.

CentOS, на который ссылается в этой статье, является дистрибутивом Linux и достигнет конца жизни (EOL). Думайте об использовании и планировании соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

В этой статье приводятся решения проблемы, из-за которой виртуальная машина Azure Linux не может загружаться после отключения типа файловой системы таблицы выделения виртуальных файлов (VFAT).

VFAT требуется в следующих сценариях:

Отключение VFAT приведет к сбою загрузки виртуальных машин Linux в Azure. Несколько средств защиты могут отключить VFAT. Чтобы избежать этой проблемы, убедитесь, что VFAT исключен из защиты и включен.

Предварительные требования

Убедитесь, что последовательная консоль включена и работает на виртуальной машине Linux.

Как определить проблему загрузки

Чтобы определить проблему загрузки, используйте AZ CLI или портал Azure для просмотра выходных данных журнала последовательной консоли виртуальной машины в области загрузки диагностика или последовательной консоли. Если 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 не может получить доступ к корневому тому

Если виртуальная машина с зашифрованной ОС и VFAT отключена, отображается соответствующий вывод, как показано ниже. После ожидания системы оболочка dracut или initramfs будет отображаться в конце журнала последовательной консоли.

  • Виртуальная машина Ubuntu с зашифрованным диском ОС и отключена VFAT:

        [   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 с зашифрованным диском ОС и отключена 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 с зашифрованным диском ОС и отключена 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".

Все виртуальные машины с этой проблемой в конечном итоге зависнут на 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)
    

Чтобы устранить проблему загрузки, перейдите в раздел "Устранение неполадок в Сети" или "Автономный" для устранения неполадок.

Примечание.

Если диск ОС не зашифрован, и только файловые системы данных шифруются с помощью ADE, диски данных, зашифрованные ADE, не будут подключены, так как VFAT отключен. В этом случае выполните те же действия, что и при устранении этой проблемы в Сети или в автономном режиме.

Сетевое устранение неполадок

Совет

Если у вас есть последняя резервная копия виртуальной машины до отключения VFAT, восстановите виртуальную машину из резервной копии, чтобы устранить проблему загрузки.

Последовательная консоль — это самый быстрый метод для устранения этой проблемы. Это позволяет напрямую устранять проблему без необходимости представить системный диск виртуальной машине восстановления. Убедитесь, что вы соответствуете необходимым предварительным требованиям для распространения. Дополнительные сведения см. в последовательной консоли виртуальной машины для Linux.

Не зашифрованные виртуальные машины не удалось подключить /boot/efi

  1. Используйте последовательную консоль Azure для загрузки виртуальной машины в однопользовательском режиме. Дополнительные сведения см. в статье Использование последовательной консоли для доступа к GRUB и однопользовательскому режиму.

    Чтобы загрузить виртуальную машину в однопользовательском режиме, прерывайте процесс загрузки на уровне меню GRUB и измените основную запись ядра, чтобы добавить init=/bin/bash параметр ядра в строке GRUB, которая начинается с linux.

    Анимированный GIF-файл, показывающий процесс прерывания процесса загрузки на уровне меню GRUB для загрузки системы в однопользовательском режиме.

  2. Убедитесь, что все необходимые файловые системы подключены, а корневой каталог находится в режиме чтения и записи.

    1. При загрузке системы с помощью init=/bin/bash параметра ядра подготовьте необходимые файловые системы, выполнив следующие команды:

      mount -o rw,remount /
      mount -a
      
    2. Повторно включите VFAT.

    3. Перезапустите систему.

Примечание.

Если виртуальная машина 1-го поколения не зашифрована, вы также можете просто закомментировать /boot/efi запись из /etc/fstab , так как /boot/efi не требуется в виртуальных машинах 1-го поколения. Дополнительные сведения см. в разделе "Устранение неполадок с запуском виртуальной машины Linux из-за ошибок fstab".

Не удалось загрузить зашифрованные виртуальные машины ADE

  • Виртуальная машина с зашифрованным диском ОС:

    При шифровании диска ОПЕРАЦИОННОй системы невозможно устранить эту проблему из последовательной консоли Azure.

  • Виртуальная машина с зашифрованными дисками данных завершается ошибкой загрузки из-за проблем /etc/fstab:

    1. Если шифруются только диски данных виртуальной машины (диск ОС не шифруется), чтобы загрузить систему, добавьте nofail параметр подключения к соответствующим записям в /etc/fstab из однопользовательского режима с помощью последовательной консоли Azure. Дополнительные сведения см. в разделе "Устранение неполадок с запуском виртуальной машины Linux из-за ошибок fstab".

    2. После загрузки виртуальной машины повторно включите VFAT и перезапустите виртуальную машину.

Автономное устранение неполадок

Совет

Если у вас есть последняя резервная копия виртуальной машины до отключения VFAT, восстановите виртуальную машину из резервной копии, чтобы устранить проблему загрузки.

Если последовательная консоль Azure не работает на определенной виртуальной машине или не является вариантом в подписке, устраните эту проблему с помощью виртуальной машины спасения и восстановления.

Не зашифрованные виртуальные машины не удалось подключить /boot/efi

  1. Используйте команды восстановления виртуальной машины для создания виртуальной машины с копией подключенного диска операционной системы затронутой виртуальной машины. Подключите копию файловых систем ОС на виртуальной машине восстановления с помощью chroot.

    Примечание.

    Кроме того, можно создать виртуальную машину спасения вручную с помощью портал Azure. Дополнительные сведения см. в статье "Устранение неполадок виртуальной машины Linux путем подключения диска ОС к виртуальной машине восстановления с помощью портал Azure".

  2. Повторно включите VFAT.

  3. После повторного включения VFAT выполните следующие действия:

    1. Закройте chroot и отключите копию файловых систем из виртуальной машины спасения и восстановления.

    2. az vm repair restore Выполните команду, чтобы переключить восстановленный диск ОС на исходный диск ОС виртуальной машины. Дополнительные сведения см. в шаге 5 в разделе "Восстановление виртуальной машины Linux" с помощью команд восстановления виртуальной машины Azure.

    3. Проверьте, может ли виртуальная машина загрузиться, взглянув на последовательную консоль Azure или попытаясь подключиться к виртуальной машине.

Примечание.

Если виртуальная машина 1-го поколения не зашифрована, вы также можете просто закомментировать /boot/efi запись из /etc/fstab , так как /boot/efi не требуется в виртуальных машинах 1-го поколения. Дополнительные сведения см. в разделе "Устранение неполадок с запуском виртуальной машины Linux из-за ошибок fstab".

Не удалось загрузить зашифрованные виртуальные машины ADE

  1. Используйте команды восстановления виртуальной машины для создания виртуальной машины с копией подключенного диска операционной системы затронутой виртуальной машины.

  2. Когда виртуальная машина шифруется с помощью ADE, команды восстановления виртуальной машины Azure заботятся о разблокировке и подключении зашифрованных файловых систем. Зашифрованные файловые системы будут подключены как /investigateroot/* и /investigateboot. Вы можете войти в виртуальную машину восстановления и повторно подключить файловые системы к нужным точкам подключения с помощью chroot.

    Примечание.

    Кроме того, можно вручную создать виртуальную машину спасения с помощью портал Azure и подключения копии зашифрованного диска ОС во время создания виртуальной машины. Дополнительные сведения см. в статье "Устранение неполадок виртуальной машины Linux путем подключения диска ОС к виртуальной машине восстановления с помощью портал Azure".

  3. Повторно включите VFAT.

  4. После повторного включения VFAT выполните следующие действия:

    1. Закройте chroot и отключите копию файловых систем из виртуальной машины спасения и восстановления.

    2. az vm repair restore Выполните команду, чтобы переключить восстановленный диск ОС на исходный диск ОС виртуальной машины. Дополнительные сведения см. в шаге 5 в разделе "Восстановление виртуальной машины Linux" с помощью команд восстановления виртуальной машины Azure.

    3. Проверьте, может ли виртуальная машина загрузиться, взглянув на последовательную консоль Azure или попытаясь подключиться к виртуальной машине.

Повторное включение 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)
        
    • Выполните команду из виртуальной машины восстановления и спасения:

      Внимание

      Убедитесь, что выполняется шаг 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. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.