Введение / Зачем это нужно
При загрузке Linux вы видите приглашение grub rescue> вместо обычного меню GRUB? Это означает, что загрузчик не может найти свои файлы или конфигурацию. Система не запускается, но данные на диске целы. Данный гайд поможет вам временно загрузиться через rescue-режим и полностью восстановить GRUB, чтобы снова видеть меню выбора ОС. Мы разберём случай для наиболее распространённых дистрибутивов: Ubuntu, Debian, CentOS, RHEL, Fedora.
Требования и подготовка
Перед началом убедитесь, что:
- Есть доступ к консоли — вы находитесь в режиме
grub rescue>. - Знаете, какой раздел содержит Linux — если не уверены, будем искать.
- Подготовьте загрузочный носитель (LiveCD/USB) с любым дистрибутивом на основе Debian/Ubuntu или CentOS/RHEL. Он понадобится для финального шага — переустановки GRUB.
- Права администратора при работе с LiveCD (обычно они есть по умолчанию).
⚠️ Важно: Если вы не знаете, какой именно раздел содержит вашу систему, не выполняйте команду
set rootнаугад. Это может привести к ошибкам.
Пошаговая инструкция
Шаг 1: Определите разделы диска в rescue-режиме
В приглашении grub rescue> выполните:
ls
Вы увидите список устройств, например:
(hd0) (hd0,msdos1) (hd0,msdos2) (hd0,msdos3)
или для GPT:
(hd0) (hd0,gpt1) (hd0,gpt2) (hd0,gpt3)
Теперь проверьте каждый раздел на наличие папки /boot или файлов ядра (vmlinuz*, linux). Для раздела (hd0,msdos1):
ls (hd0,msdos1)/
Если в выводе есть boot или файлы вроде vmlinuz-5.4.0-42-generic, этот раздел, скорее всего, содержит вашу систему. Повторите для всех разделов, пока не найдёте нужный.
💡 Совет: Если
lsпоказываетFilesystem is unknown, раздел, вероятно, не содержит Linux или имеет неподдерживаемую файловую систему (например, NTFS). Пропускайте его.
Шаг 2: Установите корневой раздел
Предположим, вы нашли раздел (hd0,msdos1). Установите его как корневой:
set root=(hd0,msdos1)
GRUB запомнит этот раздел для дальнейших операций.
Шаг 3: Загрузите ядро и initrd
Теперь нужно указать путь к ядру (vmlinuz или linux) и initrd (initrd.img или initramfs). Сначала посмотрите, что лежит в /boot на вашем разделе:
ls (hd0,msdos1)/boot/
Пример вывода:
vmlinuz-5.4.0-42-generic
initrd.img-5.4.0-42-generic
grub
Загрузка ядра (подставьте ваши имена файлов):
linux /boot/vmlinuz-5.4.0-42-generic root=/dev/sda1 ro
/boot/vmlinuz-...— путь к ядру относительно корня (/).root=/dev/sda1— важно: укажите устройство вашего корневого раздела (тот, который вы нашли на шаге 1). Обычно это/dev/sda1,/dev/nvme0n1p1или подобное. Если не уверены, можно временно указатьroot=/dev/sda1, но лучше точный путь.ro— монтирует корневой раздел только для чтения на этапе загрузки (стандартный параметр).
Затем загрузите initrd:
initrd /boot/initrd.img-5.4.0-42-generic
⚠️ Внимание: Если у вас CentOS/RHEL 7+, имена файлов могут быть другими, например:
- Ядро:
vmlinuz-3.10.0-1127.el7.x86_64- Initrd:
initramfs-3.10.0-1127.el7.x86_64.imgВсегда проверяйте содержимое/boot!
Шаг 4: Загрузите систему
boot
Если всё сделано верно, система временно загрузится. Это не исправит GRUB навсегда, но даст вам доступ к ОС для дальнейших действий.
Шаг 5: Переустановите GRUB с LiveCD
После успешной загрузки (но в текущей сессии GRUB всё ещё сломан) перезагрузитесь с LiveCD. Затем:
- Откройте терминал.
- Определите, как ваш корневой раздел называется в LiveCD (обычно
/dev/sda1,/dev/nvme0n1p1и т.д.). Можно использоватьlsblkилиsudo fdisk -l. - Смонтируйте его в
/mnt:
sudo mount /dev/sda1 /mnt
⚠️ Если у вас раздел
/bootотдельный, смонтируйте и его:sudo mount /dev/sda2 /mnt/boot(заменитеsda2на ваш раздел/boot).
- Для Debian/Ubuntu:
sudo grub-install --boot-directory=/mnt/boot /dev/sda
sudo update-grub
- Для CentOS/RHEL/Fedora:
sudo grub2-install --boot-directory=/mnt/boot /dev/sda
sudo grub2-mkconfig -o /mnt/boot/grub2/grub.cfg
- Размонтируйте и перезагрузитесь:
sudo umount /mnt
sudo reboot
Удалите LiveCD при перезагрузке. Теперь GRUB должен работать как раньше.
Проверка результата
После перезагрузки вы должны увидеть обычное меню GRUB с выбором операционных систем. Если меню появилось и система загружается — проблема решена.
Если ошибка осталась, проверьте:
- Правильно ли указан корневой раздел при переустановке (
/dev/sda— это диск, а не раздел!). - Не менялась ли разметка диска после появления ошибки? Возможно, буквы разделов сместились (например,
sda1сталsda2). Уточните черезlsblkв LiveCD.
Возможные проблемы
| Проблема | Решение |
|---|---|
error: unknown filesystem при ls (hd0,msdos1)/ | Раздел не содержит Linux или файловая система не поддерживается GRUB (например, Btrfs без модуля). Попробуйте другие разделы. |
linux или initrd не найдены | Уточните имена файлов в /boot вашего раздела. Возможно, используются другие имена (например, vmlinuz-linux вместо vmlinuz-<версия>). |
grub-install завершается с ошибкой No such device | Убедитесь, что указали правильный диск (/dev/sda, а не /dev/sda1). Также проверьте, смонтирован ли раздел /boot (если он отдельный). |
| После восстановления GRUB не видит Windows | Выполните sudo update-grub (Ubuntu/Debian) или sudo grub2-mkconfig -o /boot/grub2/grub.cfg (CentOS/RHEL) в уже загруженной системе. Это добавит Windows в меню. |
Система загружается, но сразу падает с kernel panic | Возможно, в команде linux указан неверный root=. Проверьте, какой раздел смонтирован как / в вашей системе (df -h в LiveCD). |
Если ни один раздел не содержит ожидаемых файлов (boot, vmlinuz*), возможно, раздел с Linux был удален или поврежден. В этом случае потребуется восстановление данных или переустановка системы.