Гайд: Траблшутинг загрузки Linux: восстановление сломанного GRUB2 на UEFI и Legacy BIOS
Причины повреждения загрузочного сектора и конфигурации GRUB2
Системный загрузчик GRUB2 (GRand Unified Bootloader) отвечает за первичную инициализацию оборудования, загрузку ядра Linux (vmlinuz) и передачу управления виртуальному диску инициализации (initramfs). Сбой загрузчика оставляет сервер в неработоспособном состоянии, встречая администратора минималистичными консолями восстановления:
- grub rescue>: Ядро загрузчика не может найти модуль
normal.modили раздел/boot/grub(переименован UUID диска или удален раздел); - grub>: Базовый командный интерпретатор загружен, но отсутствует файл конфигурации
grub.cfg; - Unknown filesystem / Error: file '/boot/vmlinuz' not found: Повреждение метаданных файловой системы или некорректная запись после неудачного обновления ядра.
Бизнес-риски
Длительный простой инфраструктуры при плановых или аварийных перезагрузках серверов, невозможность загрузки хостов виртуализации.
Сравнение архитектур загрузки: Legacy MBR и UEFI NVRAM
| Параметр | Legacy BIOS (MBR) | UEFI (GPT) |
|---|---|---|
| Расположение загрузчика | Первые 512 байт диска (Master Boot Record) + зазор MBR Gap. | Специальный FAT32 раздел (ESP - EFI System Partition). |
| Исполняемый файл | Сырой бинарный код stage1 / stage2. | PE32+ бинарный файл /boot/efi/EFI/boot/grubx64.efi. |
| Хранение путей | Фиксированные секторы диска. | Переменные энергонезависимой памяти материнской платы (NVRAM / efibootmgr). |
Регламент восстановления загрузчика GRUB2
Сценарий 1: Интерактивная ручная загрузка из консоли grub rescue>
Если сервер упал в консоль спасения:
# 1. Просмотр доступных дисков и разделов:
grub rescue> ls
# Вывод: (hd0) (hd0,msdos1) (hd0,gpt1) (hd0,gpt2)
# 2. Поиск раздела с установленным ядром и GRUB:
grub rescue> ls (hd0,gpt2)/
grub rescue> ls (hd0,gpt2)/boot/grub
# 3. Установка переменных окружения на найденный раздел:
grub rescue> set root=(hd0,gpt2)
grub rescue> set prefix=(hd0,gpt2)/boot/grub
# 4. Загрузка стандартного модуля и переход в нормальный режим:
grub rescue> insmod normal
grub rescue> normalСценарий 2: Восстановление GRUB2 через LiveCD и Chroot (Универсальный метод)
Загрузитесь с любого установочного LiveCD (Ubuntu/Debian/SystemRescue) и выполните подготовку изолированного окружения:
# 1. Определение корневого и EFI разделов (например, /dev/sda2 - корень, /dev/sda1 - EFI):
sudo fdisk -l
# 2. Монтирование целевой файловой системы:
sudo mount /dev/sda2 /mnt
# Если /boot и /boot/efi вынесены на отдельные разделы:
sudo mount /dev/sda1 /mnt/boot/efi # Для UEFI систем
# 3. Биндинг системных псевдофайловых систем ядра:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
# 4. Вход в окружение Chroot:
sudo chroot /mnt /bin/bashСценарий 3: Переустановка загрузчика внутри Chroot
# Для Legacy BIOS (MBR) систем (диск целиком, например /dev/sda):
grub-install --target=i386-pc /dev/sda
update-grub
# Для UEFI (GPT) систем:
# Убедитесь, что смонтирован efivarfs:
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
# Переустановка GRUB EFI:
apt install --reinstall grub-efi-amd64 # Для Debian/Ubuntu
# dnf reinstall grub2-efi-x64 shim-x64 # Для RHEL/CentOS
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck
update-grub
# Выход из Chroot и перезагрузка:
exit
sudo umount -R /mnt
sudo rebootТиповые ошибки администраторов
- Установка grub-install на раздел вместо диска: В режиме Legacy BIOS команда
grub-install /dev/sda1выдаст ошибку или сломает загрузочный сектор PBR. Указывать нужно целевой накопитель:/dev/sda. - Забытый монтированный каталог EFI: Переустановка GRUB EFI без смонтированного каталога
/boot/efiзапишет файлы во временную папку корневого раздела, оставив системный FAT32 ESP раздел пустым.
Специалисты ITSTM оперативно восстановят конфигурации EFI NVRAM, разберут поврежденные LVM/RAID тома и восстановят штатную загрузку.
Частые вопросы (FAQ)
Как добавить параметр ядра (например, nomodeset или single) при старте?
В меню выбора GRUB нажмите клавишу 'e' на нужном пункте ядра, найдите строку, начинающуюся с linux /vmlinuz-..., добавьте в конец нужные параметры и нажмите Ctrl+X (или F10) для загрузки.
Что делать, если efibootmgr выдает ошибку 'EFI variables are not supported on this system'?
Это означает, что хост загружен в режиме Legacy BIOS, либо не смонтирована служебная файловая система: mount -t efivarfs efivarfs /sys/firmware/efi/efivars.
Как восстановить поврежденный initramfs?
Внутри chroot-окружения выполните команду: update-initramfs -u -k all (в Ubuntu/Debian) или dracut -f (в RHEL/CentOS).
Почему после смены диска UUID в fstab перестает совпадать?
Узнайте актуальный UUID раздела командой blkid и обновите записи в файле /etc/fstab и конфигурации /etc/default/grub перед выполнением update-grub.