LinuxRuLinux без лишней теории
Загрузка Linux

Как восстановить загрузчик GRUB после Windows или неудачного обновления

Редакция LinuxRu7 мин чтенияИнструкции

Восстановить GRUB чаще всего можно за десять минут: на UEFI сначала проверьте порядок загрузки, а если система не стартует, загрузитесь с Live USB, войдите в установленную систему через chroot и выполните grub-install и update-grub. Ниже пошагово для Ubuntu, Debian, Fedora и Arch, плюс что делать в grub rescue и если Windows пропала из меню.

Как восстановить загрузчик GRUB после Windows или неудачного обновления
Фото: Software: Daniel Richter Screenshot: VulcanSphere, GPL, Wikimedia Commons
Содержание
  1. Что сломалось
  2. Порядок в UEFI
  3. grub rescue
  4. Live USB и chroot
  5. Fedora и Arch
  6. Windows в меню
  7. LUKS и Boot-Repair
  8. Чтобы не повторилось
  9. Частые вопросы

Сначала поймите, что именно сломалось

"Пропал GRUB" - это несколько разных поломок, и лечатся они по-разному. На компьютерах с UEFI загрузчик почти никогда не стирается физически: чаще Windows просто ставит себя первой в списке загрузки прошивки. А вот приглашение grub rescue> означает, что GRUB запустился, но не нашёл свои файлы.

Что вы видитеВероятная причинаЧто делать
Сразу грузится Windows, меню нетWindows поменяла порядок загрузки в UEFIВернуть порядок в прошивке или через efibootmgr
grub rescue>, "unknown filesystem" или "no such partition"Раздел с /boot переехал, удалён или изменёнЗагрузиться вручную, затем переустановить GRUB
grub> с надписью про minimal BASH-like editingНет или испорчен grub.cfgЗагрузить вручную, затем update-grub
Меню есть, но нет WindowsОтключён os-proberВключить os-prober и пересобрать конфиг
Ошибка Secure Boot или синий экран MOKНеподписанный загрузчик или ядроПереустановить shim и подписанный GRUB

Полезно сразу выяснить, в каком режиме стоит система. Загрузитесь с флешки и выполните ls /sys/firmware/efi: если каталог существует, это UEFI, если нет, легаси BIOS. Восстанавливать загрузчик нужно в том же режиме, в котором ставилась система, поэтому и флешку грузите в нём же.

Windows перехватила загрузку: вернуть порядок в UEFI

Самый частый случай после установки или крупного обновления Windows. Перезагрузитесь и вызовите меню выбора устройства клавишей прошивки, обычно F12, F11, F8 или Esc в зависимости от производителя. Если там есть пункт ubuntu, fedora или GRUB и система с него загружается - загрузчик цел, нужно только вернуть его на первое место в настройках UEFI.

То же самое можно сделать из загруженного Linux:

sudo efibootmgr -v
# пример: Boot0002 ubuntu, Boot0000 Windows Boot Manager
sudo efibootmgr -o 0002,0000

Номера у вас будут свои, берите их из вывода первой команды. Если пункта Linux в списке нет, но раздел EFI цел, его можно добавить заново командой grub-install, об этом ниже.

Некоторые ноутбуки после каждого обновления Windows снова ставят Windows Boot Manager первым. Тогда помогает пароль на настройки прошивки или выключение функции восстановления порядка загрузки, если она есть в вашем UEFI.

grub rescue: как загрузиться вручную

В режиме rescue работает лишь горстка команд, но этого хватит, чтобы загрузить систему. Сначала найдите раздел, где лежит каталог /boot/grub:

ls
ls (hd0,gpt2)/
ls (hd0,gpt2)/boot/grub

Команда ls без аргументов покажет диски и разделы вида (hd0,gpt1). Проверяйте их по очереди, пока не увидите файлы GRUB. Если у вас отдельный раздел /boot, путь будет (hd0,gpt2)/grub без /boot. Дальше:

set root=(hd0,gpt2)
set prefix=(hd0,gpt2)/boot/grub
insmod normal
normal

Появится обычное меню, загрузите Linux. Сразу после входа переустановите загрузчик, иначе при следующей перезагрузке всё повторится:

sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
sudo update-grub

Для легаси BIOS вместо первой команды: sudo grub-install /dev/sda, указывается весь диск, а не раздел. Если insmod normal пишет "unknown filesystem", значит GRUB не может прочитать раздел (например, он зашифрован или удалён), тогда переходите к восстановлению с Live USB.

Восстановление с Live USB через chroot

Универсальный способ, который работает почти всегда. Понадобится загрузочная флешка с тем же дистрибутивом, лучше той же версии. Если её нет, создайте по инструкции про загрузочную флешку. Загрузитесь в режиме "попробовать без установки" и откройте терминал.

Найти разделы

lsblk -f

Ищите раздел с файловой системой ext4 или btrfs нужного размера (корень Linux) и маленький раздел vfat на 100-1000 МБ (EFI). Ниже для примера корень /dev/nvme0n1p2 и EFI /dev/nvme0n1p1.

Подключить систему и войти в неё

sudo mount /dev/nvme0n1p2 /mnt
# для btrfs в Ubuntu и Fedora корень обычно в подтоме:
# sudo mount -o subvol=@ /dev/nvme0n1p2 /mnt      (Ubuntu)
# sudo mount -o subvol=root /dev/nvme0n1p2 /mnt   (Fedora)
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount --bind $i /mnt$i; done
# переменные UEFI, без них grub-install не запишет загрузочную запись
sudo mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars
sudo chroot /mnt

Если в системе отдельный раздел /boot, примонтируйте его в /mnt/boot до раздела EFI. Внутри chroot вы работаете в установленной системе от root.

Переустановить GRUB в Ubuntu и Debian

apt install --reinstall grub-efi-amd64-signed shim-signed
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
update-grub
exit
sudo umount -R /mnt
sudo reboot

Подписанные пакеты нужны для загрузки с включённым Secure Boot. Для Debian в --bootloader-id пишите debian. Если grub-install ругается "cannot find EFI directory", проверьте, что раздел EFI действительно смонтирован в /boot/efi внутри chroot. Для легаси BIOS: grub-install /dev/nvme0n1 и update-grub.

Отличия для Fedora и Arch Linux

Fedora

В Fedora на UEFI команду grub2-install использовать не рекомендуется: подписанные загрузчики приходят готовыми в пакетах. После входа в chroot по той же схеме выполните:

dnf reinstall shim-* grub2-efi-* grub2-common
grub2-mkconfig -o /boot/grub2/grub.cfg

Файл /boot/efi/EFI/fedora/grub.cfg в современных Fedora - маленькая заглушка, которая ссылается на основной конфиг. Перезаписывать его выводом grub2-mkconfig не надо.

Arch Linux

В установочном образе Arch есть arch-chroot, он сам монтирует служебные файловые системы:

mount /dev/nvme0n1p2 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

Точку монтирования EFI берите из своего /etc/fstab: в Arch это бывает /boot или /efi, и --efi-directory должен ей соответствовать. Подробности и редкие случаи разобраны на странице GRUB в ArchWiki.

В меню GRUB нет Windows: включаем os-prober

С версии GRUB 2.06 поиск других систем отключён по умолчанию из соображений безопасности. Если GRUB есть, а Windows в списке нет, включите os-prober:

sudo apt install os-prober     # Fedora: dnf install os-prober, Arch: pacman -S os-prober
echo 'GRUB_DISABLE_OS_PROBER=false' | sudo tee -a /etc/default/grub
sudo update-grub               # Fedora: grub2-mkconfig -o /boot/grub2/grub.cfg

В выводе update-grub должна появиться строка вида "Found Windows Boot Manager". В Ubuntu установщик обычно сам настраивает это при установке рядом с Windows. Если строки нет, проверьте, что Windows установлена в режиме UEFI, как и Linux: GRUB в UEFI не загрузит Windows, поставленную в легаси-режиме.

Зашифрованный диск и утилита Boot-Repair

Если корень на LUKS или LVM

Перед монтированием раздел нужно открыть:

sudo cryptsetup open /dev/nvme0n1p3 cryptroot
sudo vgchange -ay          # если внутри LVM
lsblk                       # смотрим, что появилось в /dev/mapper
sudo mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt

Имена томов у вас будут другими, ориентируйтесь на вывод lsblk. Дальше всё как в разделе про chroot. Обычно в такой схеме есть незашифрованный /boot, его тоже нужно примонтировать. Как устроено шифрование и почему стоит иметь резервную копию заголовка LUKS, рассказано в статье о шифровании LUKS.

Boot-Repair

Для Ubuntu и производных есть графическая утилита Boot-Repair, которая делает всё описанное выше автоматически. Ставится она из PPA прямо в Live-сеансе:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt install boot-repair
boot-repair

Кнопка "Рекомендуемое восстановление" справляется с большинством типовых случаев. Утилита предложит выложить отчёт и даст ссылку на него: если ничего не помогло, этот отчёт нужен тем, кто будет помогать на форуме. Для самых свежих релизов PPA иногда появляется с задержкой, тогда используйте ручной способ.

Как не попасть в эту ситуацию снова

  • Отключите в Windows быстрый запуск ("Панель управления", "Электропитание", "Действия кнопок питания"). Он оставляет диск в полусонном состоянии и мешает Linux монтировать разделы Windows.
  • Сохраните ключ восстановления BitLocker до любых экспериментов с загрузкой и Secure Boot. Смена порядка загрузки или настроек прошивки может вызвать запрос этого ключа.
  • Держите под рукой Live USB с вашим дистрибутивом, лучше той же версии, что установлена.
  • Перед изменениями разметки сделайте снимок или бэкап, а размеры разделов меняйте из Linux, а не из "Управления дисками" Windows, если на диске есть разделы Linux.

Запишите вывод lsblk -f и sudo efibootmgr -v в текстовый файл и сохраните его на телефоне или в облаке, пока всё работает. Когда загрузка сломается, вы будете точно знать, какой раздел корень, а какой EFI, и не придётся угадывать по размерам.

Если вы только планируете двойную загрузку, начните с руководства по установке Linux рядом с Windows 11, там же описано, как правильно оставить место под EFI. Про подпись драйверов и ключи MOK есть отдельный материал о Secure Boot.

Частые вопросы

grub rescue что делать в первую очередь?

Командой ls найдите раздел с каталогом boot/grub, задайте set root и set prefix, затем insmod normal и normal. После загрузки системы обязательно переустановите GRUB командой grub-install и выполните update-grub.

Пропал GRUB после установки Windows, данные Linux потеряны?

Почти наверняка нет. Windows меняет порядок загрузки или перезаписывает загрузочную запись, а разделы Linux не трогает, если вы не форматировали их при установке.

Нужно ли отключать Secure Boot для восстановления?

Нет, если вы переустанавливаете подписанные пакеты: grub-efi-amd64-signed и shim-signed в Ubuntu и Debian, shim и grub2-efi в Fedora. Отключение может понадобиться для дистрибутивов без подписанного загрузчика.

Можно ли восстановить GRUB с флешки другого дистрибутива?

Можно, chroot работает с любого Live-образа той же архитектуры. Внутри chroot используются программы установленной системы, поэтому версия флешки не так важна. Но для UEFI нужно загрузить флешку в режиме UEFI.

Чем update-grub отличается от grub-install?

grub-install записывает сам загрузчик в раздел EFI или в начало диска. update-grub только пересобирает файл меню grub.cfg. Если пропало меню или нет пункта Windows, хватает второго, если не грузится ничего, нужны обе команды.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.