Загрузка виртуальной машины Linux для восстановления GRUB

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

Примечание.

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

В этой статье рассматривается несколько условий, которые вызывают проблемы с спасением GRUB и предоставляют рекомендации по устранению неполадок.

Во время загрузки загрузчик пытается найти ядро Linux и передать элемент управления загрузки. Если этот раздаток не удается выполнить, виртуальная машина входит в консоль спасения GRUB. Запрос на спасение GRUB не отображается в журнале последовательной консоли Azure, но его можно просмотреть на снимке экрана загрузки Azure диагностика.

Определение проблемы спасения GRUB

Просмотрите снимок экрана диагностика загрузки виртуальной машины на странице загрузки виртуальной машины диагностика портал Azure. Снимок экрана помогает диагностировать проблему спасения GRUB и определить, вызвана ли ошибка загрузки.

Следующий текст является примером проблемы спасения GRUB:

error: file '/boot/grub2/i386-pc/normal.mod' not found.  
Entering rescue mode...  
grub rescue>

Устранение неполадок аварийного восстановления GRUB в автономном режиме

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

    Примечание.

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

  2. Определите проблему спасения GRUB. При возникновении одной из следующих проблем с спасением GRUB перейдите к соответствующему разделу, чтобы устранить эту проблему:

  3. После устранения проблемы спасения GRUB выполните следующие действия:

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

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

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

  4. Если отсутствует весь раздел /boot или другое важное содержимое и не удается восстановить его, рекомендуется восстановить виртуальную машину из резервной копии. Дополнительные сведения см. в статье "Как восстановить данные виртуальной машины Azure в портал Azure".

Дополнительные сведения об ошибках, возможных причинах и решениях см. в следующих разделах.

Примечание.

В командах, упомянутых в следующих разделах, замените /dev/sdX на соответствующее дисковое устройство операционной системы (OS).

Ошибка: неизвестная файловая система

На следующем снимку экрана показано сообщение об ошибке:

Снимок экрана: ошибка неизвестной файловой системы grub.

Эта ошибка может быть связана с одной из следующих проблем:

  • Повреждение файловой системы /boot.

    Чтобы устранить эту проблему, выполните действия, описанные в разделе "Исправление повреждения файловой системы /boot".

  • Загрузчик GRUB указывает на недопустимый диск или секцию.

    Чтобы устранить эту проблему, переустановите GRUB и повторно создайте файл конфигурации GRUB.

  • Проблемы с таблицей секционирования диска ОС, вызванные ошибкой человека.

    Чтобы устранить такие проблемы, выполните действия, описанные в статье "Ошибка: нет такой секции с рекомендациями повторно создать раздел /boot, если отсутствует или создан неправильно".

Исправление повреждения файловой системы /boot

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

  2. Чтобы устранить проблемы с повреждением в соответствующей секции /boot, см. сведения об устранении ошибок повреждения файловой системы в Azure Linux .

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

Переустановите GRUB и повторно создайте файл конфигурации GRUB

  1. Проверьте, была ли создана виртуальная машина спасения и восстановления. Если он не был создан, выполните шаг 1, чтобы устранить проблему аварийного восстановления GRUB в автономном режиме , чтобы создать виртуальную машину. Подключите все необходимые файловые системы, включая /и /boot в виртуальной машине спасения и восстановления, а затем введите среду chroot .

  2. Переустановите GRUB и повторно создайте соответствующий файл конфигурации GRUB с помощью одной из следующих команд:

    • RHEL/CentOS/Oracle 7.x/8.x Linux без UEFI (BIOS на основе 1-го поколения)

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • RHEL/CentOS/Oracle 7.x/8.x Linux с UEFI (2-го поколения)

      yum reinstall grub2-efi-x64 shim-x64
      grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/efi/EFI/redhat/grub.cfg
      

      Если виртуальная машина работает CentOS, замените centos redhat на файл grub.cfg абсолютный путь /boot/efi/EFI/centos/grub.cfg.

    • SLES 12/15 15-го поколения и 2-го поколения

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • Ubuntu 18.04/20.04

      grub-install /dev/sdX
      update-grub
      
  3. Перейдите к шагу 3 в разделе "Устранение неполадок аварийного спасения GRUB" в автономном режиме , чтобы переключить диск ОС.

Ошибка 15. Файл не найден

На следующем снимку экрана показано сообщение об ошибке:

Снимок экрана: ошибка grub 15 не найдена.

Проблему можно устранить следующим способом.

  1. Проверьте, была ли создана виртуальная машина спасения и восстановления. Если он не был создан, выполните шаг 1, чтобы устранить проблему аварийного восстановления GRUB в автономном режиме , чтобы создать виртуальную машину. Подключите все необходимые файловые системы, включая /и /boot в виртуальной машине спасения и восстановления, а затем введите среду chroot .

  2. Проверьте содержимое файловой системы /boot и определите, что отсутствует.

  3. Если файл конфигурации GRUB отсутствует, переустановите GRUB и повторно создайте файл конфигурации GRUB.

  4. Убедитесь, что разрешения файла в файловой системе /boot являются ОК. Вы можете сравнить разрешения с помощью другой виртуальной машины под управлением той же версии Linux.

  5. Если отсутствует весь раздел /boot или другое важное содержимое и не удается восстановить его, рекомендуется восстановить виртуальную машину из резервной копии. Дополнительные сведения см. в статье "Как восстановить данные виртуальной машины Azure в портал Azure".

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

Ошибка: файл "/boot/grub2/i386-pc/normal.mod" не найден

На следующем снимку экрана показано сообщение об ошибке:

Снимок экрана: ошибка grub normal.mod не найдена.

  1. Проверьте, была ли создана виртуальная машина спасения и восстановления. Если он не был создан, выполните шаг 1 в разделе "Устранение неполадок аварийного восстановления GRUB в автономном режиме " для создания. Подключите все необходимые файловые системы, включая /и /boot в виртуальной машине спасения и восстановления, а затем введите среду chroot .

  2. Если не удается подключить файловую систему /boot из-за ошибки повреждения, исправьте повреждение файловой системы /boot.

  3. При расположении внутри chroot проверьте содержимое каталога /boot/grub2/i386-pc . Если содержимое отсутствует, скопируйте содержимое из /usr/lib/grub/i386-pc. Для этого воспользуйтесь следующими командами:

    ls -l /boot/grub2/i386-pc
    cp -rp /usr/lib/grub/i386-pc /boot/grub2
    
  4. Если содержимое секции /boot пусто, используйте следующие команды, чтобы повторно создать его:

    Примечание.

    Следующие действия применяются к виртуальным машинам RHEL/CentOS/Oracle 7.x/8.x Linux без UEFI (на основе BIOS 1-го поколения).

    1. В рамках процесса chroot переустановите grub. Замените /dev/sd[X] соответствующим образом соответствующую копию диска ОС, подключенного к виртуальной машине восстановления и спасения:

      grub2-install /dev/sd[X]
      
    2. Убедитесь, что укажите /etc/resolv.conf допустимую запись DNS, чтобы разрешить имя репозитория:

      cat /etc/resolv.conf
      
    3. Переустановите ядро:

      yum reinstall $(rpm -qa | grep -i kernel)
      
    4. Создайте файл grub.cfg:

      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
  5. Перейдите к шагу 3, чтобы устранить проблему аварийного спасения GRUB в автономном режиме , чтобы переключить диск ОС.

Ошибка: нет такой секции

На следующем снимку экрана показано сообщение об ошибке:

Снимок экрана: ошибка grub нет такой секции.

Эта ошибка возникает на виртуальной машине на основе RHEL (Red Hat, Oracle Linux, CentOS) в одном из следующих сценариев:

  • Раздел /boot удаляется по ошибке.
  • Раздел /boot создается повторно с помощью неправильных начальных и конечных секторов.

Решение. Повторное создание /загрузочного раздела

Если раздел /boot отсутствует, повторно создайте его, выполнив следующие действия:

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

  2. Определите, создана ли таблица секций в качестве типа dos или GPT с помощью следующей команды:

    sudo fdisk -l /dev/sdX
    
    • Таблица секционирования Dos

      Снимок экрана: загрузка с таблицей секционирования типа dos.

    • Таблица секций GPT

      Снимок экрана: загрузка с таблицей секционирования типа GPT.

  3. Если таблица секционирования выполняется в качестве типа таблицы секции, повторно создайте раздел /boot в системах dos. Если таблица секционирования имеет GPT в качестве типа таблицы секции, повторно создайте раздел /boot в системах GPT.

  4. Убедитесь, что загрузчик GRUB установлен с помощью соответствующего диска. Чтобы установить и настроить файл конфигурации GRUB, выполните действия, описанные в разделе "Переустановка GRUB" и повторное создание файла конфигурации GRUB.

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

Повторное создание секции /boot в системах dos

  1. Повторно создайте раздел /boot с помощью следующей команды:

    sudo fdisk /dev/sdX
    

    Используйте значения по умолчанию в первых и последних секторах, а также тип секции (83). Убедитесь, что таблица секций /boot помечена как загрузочная с помощью a параметра в средстве fdisk , как показано в следующих выходных данных:

    sudo fdisk /dev/sdc
    
    The device presents a logical sector size that is smaller than
    the physical sector size. Aligning to a physical sector (or optimal
    I/O) size boundary is recommended, or performance may be impacted.
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): p
    Partition number (1,3,4, default 1): 1
    First sector (2048-134217727, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-2099199, default 2099199):
    Using default value 2099199
    Partition 1 of type Linux and of size 1 GiB is set
    
    Command (m for help): t
    Partition number (1,2, default 2): 1
    Hex code (type L to list all codes): 83
    Changed type of partition 'Linux' to 'Linux'
    
    Command (m for help): a
    Partition number (1,2, default 2): 1
    
    Command (m for help): p
    
    Disk /dev/sdc: 68.7 GB, 68719476736 bytes, 134217728 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disk label type: dos
    Disk identifier: 0x000b7179
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1   *        2048     2099199     1048576   83  Linux
    /dev/sdc2         2099200   134217727    66059264   8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
  2. После повторного создания отсутствующих секций /boot проверьте, обнаружена ли файловая система /boot. Вы должны увидеть запись /dev/sdX1 для (отсутствующий раздел /boot).

    sudo blkid /dev/sdX1
    
    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" TYPE="ext4"
    
  3. Если файловая система /boot не отображается blkid после повторного создания раздела, это означает, что данные /boot больше не существуют. Необходимо повторно создать файловую систему /boot (используя тот же формат UUID и файловой системы, который находится в записи /etc/fstab /boot), а затем восстановить его содержимое из резервной копии.

Повторное создание секции /boot в системах GPT

  1. Повторно создайте раздел /boot с помощью следующей команды:

    sudo gdisk /dev/sdX
    

    Используйте значения по умолчанию в первых и последних секторах и тип секции (8300), как показано в следующих выходных данных:

    sudo gdisk /dev/sdc
    GPT fdisk (gdisk) version 1.0.3
    
    Partition table scan:
      MBR: protective
      BSD: not present
      APM: not present
      GPT: present
    
    Found valid GPT with protective MBR; using GPT.
    
    Command (? for help): n
    Partition number (1-128, default 1): 1
    First sector (34-134217694, default = 1026048) or {+-}size{KMGTP}:
    Last sector (1026048-2050047, default = 2050047) or {+-}size{KMGTP}:
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): p
    Disk /dev/sdc: 134217728 sectors, 64.0 GiB
    Model: Virtual Disk
    Sector size (logical/physical): 512/4096 bytes
    Disk identifier (GUID): 6D915856-445A-4513-97E4-C55F2E1AD6C0
    Partition table holds up to 128 entries
    Main partition table begins at sector 2 and ends at sector 33
    First usable sector is 34, last usable sector is 134217694
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 6076 sectors (3.0 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1         1026048         2050047   500.0 MiB   8300  Linux filesystem
       2         2050048       134215679   63.0 GiB    8E00
      14            2048           10239   4.0 MiB     EF02
      15           10240         1024000   495.0 MiB   EF00  EFI System Partition
    
    Command (? for help): w
    
    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!
    
    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/sdc.
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot or after you
    run partprobe(8) or kpartx(8)
    The operation has completed successfully.
    
  2. Проверьте, обнаружена ли файловая система /boot системой с помощью следующей команды:

    sudo blkid /dev/sdX1
    

    Вы должны увидеть запись /dev/sdX1 для (отсутствующий раздел /boot).

    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="<PARTUUID>"
    
  3. Если файловая система /boot не отображается после повторного создания раздела, это означает, что данные /boot больше не существуют. Необходимо повторно создать файловую систему /boot (используя тот же идентификатор UUID, который находится в записи /etc/fstab /boot), а затем восстановить его содержимое из резервной копии.

Ошибка: символ "grub_efi_get_secure_boot" не найден

На следующем снимку экрана показано сообщение об ошибке:

Снимок экрана: ошибка grub

Ядро Linux версии 4.12.14 (используемое в SLES 12 SP5) не поддерживает параметр безопасной загрузки . Таким образом, если во время развертывания виртуальной машины включена безопасная загрузка (то есть поле типа безопасности установлено на доверенные виртуальные машины запуска), виртуальная машина создает ошибку безопасной загрузки через консоль при попытке начать с помощью этой версии ядра SUSE на образе виртуальной машины 2-го поколения.

Решение

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

  1. Проверьте, была ли создана виртуальная машина спасения и восстановления. Если он не был создан, выполните шаг 1, чтобы устранить проблему аварийного восстановления GRUB в автономном режиме , чтобы создать виртуальную машину. Подключите все необходимые файловые системы, включая /и /boot, а затем введите среду chroot .

  2. Выполните следующую команду YaST в среде chroot:

    yast2 bootloader
    
  3. Снимите флажок "x" из параметра "Включить поддержку безопасной загрузки", а затем выберите F10 , чтобы сохранить изменение.

    Снимок экрана: параметры загрузчика YaST2 в консоли SUSE.

  4. Выполните шаг 3, чтобы устранить проблему аварийного восстановления GRUB в автономном режиме , чтобы переключить диск ОС.

Другие ошибки спасения GRUB

На следующем снимку экрана показано сообщение об ошибке:

Снимок экрана: еще одна проблема спасения grub.

Эта ошибка активируется в одном из следующих сценариев:

  • Отсутствует файл конфигурации GRUB.
  • Используется неправильная конфигурация GRUB.
  • Отсутствует раздел /boot или его содержимое.

Для устранения этой ошибки выполните следующие действия.

  1. Проверьте, была ли создана виртуальная машина спасения и восстановления. Если он не был создан, выполните шаг 1, чтобы устранить проблему аварийного восстановления GRUB в автономном режиме , чтобы создать виртуальную машину. Подключите все необходимые файловые системы, включая /и /boot, а затем введите среду chroot .

  2. Убедитесь, что файл конфигурации /etc/default/grub настроен. Утвержденные образы Azure Linux уже имеют необходимые конфигурации. Дополнительные сведения см. в следующих статьях:

  3. Переустановите GRUB и повторно создайте файл конфигурации GRUB.

    Примечание.

    Если отсутствует файл /boot/grub/menu.lst, эта ошибка предназначена для более старых версий ОС (RHEL 6.x, Centos 6.x и Ubuntu 14.04). Команды будут отличаться, так как GRUB версии 1 используется в этих системах. GRUB версии 1 не рассматривается в этой статье.

  4. Если отсутствует весь раздел /boot, выполните действия, описанные в разделе "Ошибка": нет такой секции.

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

Следующие шаги

Если конкретная ошибка загрузки не является проблемой спасения GRUB, обратитесь к разделу "Устранение неполадок с azure Linux Виртуальные машины ошибками загрузки" для дальнейшего устранения неполадок.

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Microsoft не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.

Отказ от ответственности стороннего контакта

Корпорация Майкрософт предоставляет контактные данные сторонних производителей в целях получения дополнительных сведений по данной теме. Эти контактные данные могут быть изменены без предварительного уведомления. Корпорация Майкрософт не гарантирует точность контактных данных сторонних производителей.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или помощь, создайте запрос на поддержку или попросите сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.