Загрузчик может исчезнуть после установки второй системы, обновления прошивки, сбоя питания или ошибки при разметке. Симптомы разные: чёрный экран, приглашение grub rescue, строка grub> либо сразу загружается Windows. Паника здесь лишняя: почти всё чинится с live-USB за пятнадцать-двадцать минут, если действовать по шагам и не форматировать разделы.
Почему GRUB ломается
Типичные причины — установка Windows рядом с Linux, которая перезаписывает загрузочную запись, обновление прошивки, смена режима SATA или переразметка диска. Иногда виноват сбой питания в момент записи конфигурации. Реже встречается несовместимость Secure Boot с неподписанными модулями. Во всех случаях сначала сохраняйте данные, а уже потом экспериментируйте с загрузчиком.
Определите режим загрузки и разметку
Сначала выясните, UEFI или BIOS. В UEFI на диске есть раздел EFI с FAT32, а в прошивке — записи загрузки. В BIOS загрузчик живёт в MBR или в начале раздела. От этого зависит команда grub-install. Загрузитесь с установочной флешки в режиме live и посмотрите разметку. Проверка ниже показывает режим, в котором загрузилась флешка; наличие раздела EFI на диске подскажет режим установленной системы.
lsblk -f
sudo parted -l
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
sudo efibootmgr -v
Смонтируйте корень и EFI-раздел
Найдите корневой раздел по метке и размеру. Для LVM активируйте тома, для Btrfs подключите субтом @. Затем смонтируйте EFI-раздел в /boot/efi: без него grub-install для UEFI не сработает. Если /boot вынесен отдельно, смонтируйте и его.
sudo vgchange -ay
sudo mount /dev/nvme0n1p2 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
# для Btrfs вместо второй строки: sudo mount -o subvol=@ /dev/nvme0n1p2 /mnt
Строка с комментарием нужна только для Btrfs: она заменяет обычное монтирование корня. Проверьте, что в /mnt/etc/fstab правильные UUID: после клонирования диска они меняются, и загрузка ломается снова.
Войдите в систему через chroot
Чтобы grub-install видел установленную систему, а не live-окружение, нужен chroot с проброшенными псевдофайловыми системами. Смонтируйте их, затем войдите в корень и проверьте fstab.
for d in dev dev/pts proc sys run; do sudo mount --bind /$d /mnt/$d; done
sudo chroot /mnt
mount -a
cat /etc/fstab
Переустановите GRUB
Внутри chroot переустановите загрузчик. Для UEFI укажите ESP и идентификатор загрузчика, для BIOS — диск целиком, без номера раздела. Затем пересоберите меню и initramfs. В Fedora вместо update-grub используется grub2-mkconfig с путём к grub.cfg, а initramfs пересобирает dracut -f.
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck
grub-install /dev/nvme0n1
update-grub
update-initramfs -u -k all
Вторая строка относится к BIOS-системам, первая — к UEFI. Не выполняйте обе подряд без понимания режима: можно создать лишнюю запись, которая потом будет мешать.
Если видно приглашение grub rescue
В этом режиме загрузчик нашёл свой код, но потерял модули или конфигурацию. Найдите раздел с каталогом /boot/grub через ls, задайте root и prefix, загрузите модуль normal. Это временный вход: после загрузки сразу переустановите GRUB нормально.
ls (hd0,gpt2)/boot/grub
set root=(hd0,gpt2)
set prefix=(hd0,gpt2)/boot/grub
insmod normal
normal
Ручная загрузка из grub>
Если появилась строка grub>, модули загрузились, но меню не нашлось. Найдите ядро и initrd через ls, затем передайте ядру корневой раздел и загрузитесь. Имена файлов зависят от версии ядра — подставьте свои. Этот способ даёт временный доступ, чтобы починить систему изнутри.
ls (hd0,gpt2)/boot
linux (hd0,gpt2)/boot/vmlinuz-<version> root=/dev/nvme0n1p2 ro
initrd (hd0,gpt2)/boot/initrd.img-<version>
boot
Если grub-install не видит EFI
Проверьте, смонтирован ли ESP именно в /boot/efi и виден ли он внутри chroot. В выводе grub-install должна быть строка про установку в EFI. Если система загрузилась в BIOS-режиме, а диск размечен для UEFI, цель x86_64-efi не сработает: загрузите флешку в UEFI-режиме. Иногда мешает старая запись в NVRAM — её можно удалить через efibootmgr -b с номером и ключом -B, но только после создания рабочей записи.
Если меню пустое или нет нужной системы
Иногда загрузчик работает, но в меню только одна строка или отсутствует вторая система. Проверьте, что os-prober установлен и включён, а разделы второй системы доступны. В Debian и Ubuntu параметр GRUB_DISABLE_OS_PROBER в /etc/default/grub должен быть false. После правки выполните update-grub и перезагрузку. Если система попала в emergency mode, ищите ошибку в fstab: сравните UUID из blkid с тем, что записан в файле.
Проверка после загрузки
Убедитесь, что меню видит все ядра и вторую систему. В UEFI посмотрите порядок загрузки: иногда запись Ubuntu есть, но стоит после Windows. Команда efibootmgr -o задаёт порядок, а efibootmgr -c создаёт новую запись. Не удаляйте чужие записи, пока не убедитесь, что система стабильно грузится. Если загрузка всё равно идёт в Windows, проверьте порядок в efibootmgr и при необходимости задайте его заново. Иногда помогает загрузка с флешки в UEFI-режиме и повторный grub-install: в BIOS-режиме запись создастся в MBR и не появится в UEFI-меню.
sudo efibootmgr -v
sudo update-grub
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck
sudo reboot
Secure Boot и подписи
Secure Boot проверяет подпись загрузчика. Штатный GRUB из дистрибутива обычно подписан, поэтому восстановление не требует отключения защиты. Проблемы начинаются, если вы собирали загрузчик вручную или ставили сторонние модули: тогда подпишите файлы, зарегистрировав ключ через MOK, либо временно отключите Secure Boot в прошивке. После восстановления включите защиту обратно и проверьте загрузку.
Профилактика
Держите под рукой live-USB и копию системных конфигов. После обновления ядра проверяйте, что меню GRUB собирается без ошибок, а после клонирования диска сразу правьте UUID в fstab. Простые привычки экономят часы восстановления.
- Сохраните вывод efibootmgr -v и содержимое fstab.
- Не меняйте UUID без обновления fstab.
- Проверяйте меню после установки второй системы.
- Храните резервную копию /etc на внешнем носителе.
Чек-лист восстановления
- Режим загрузки определён до запуска grub-install.
- Корень, /boot и ESP смонтированы в /mnt.
- fstab содержит актуальные UUID разделов.
- Меню GRUB пересобрано, initramfs обновлён.
- Порядок загрузки в UEFI проверен через efibootmgr.
Итог
Восстановление GRUB сводится к четырём шагам: загрузиться с live-USB, смонтировать систему, войти в chroot и переустановить загрузчик. Главное — не спешить с форматированием и проверить UUID. Если после перезагрузки меню появилось, но система не стартует, ищите причину в fstab и initramfs, а не в самом загрузчике. Сохраните рабочую флешку: она ещё пригодится при следующем крупном обновлении.