Skip to content

Восстанавливаем GRUB на BtrFS

Описанное в статье актуально для случаев, когда используется файловая система BtrFS, запись GRUB повреждена или удалена, но сама система цела. Рассмотрим процесс восстановления GRUB на примере. Тестовый стенд и его разметка:

sda - SSD на 120GB. На нем размещены boot, swap и основная система.

sdb - HDD на 1000GB. Используется только для home

Итак, в случае наличия повреждённой записи GRUB мы увидим следующее приветствие:

shell
GNU GRUB version...
Minimal BASH-like line editing...
grub>

Теперь наша задача войти в систему. Для этого нам потребуется сначала найти директорию boot в корневом разделе. Но в GRUB свое обозначение разделов. Выведем список разделов командой ls и увидим примерно следующее:

(proc) (hd0) (hd0,gpt2) (hd0,gpt1) (hd1) (hd1,gpt3), (hd1,gpt2), (hd1,gpt1) (hd2) (hd2,gpt1)

Для того, чтобы разобраться что чем является в нашей файловой системе, в GRUB можно подсмотреть содержимое разделов, используя команду вида ls (hd#,gpt*)/, где # - номер диска, * - номер раздела.

Примеры:

ls (hd0,gpt2)/

grub/ ventoy/ efi/ ENROLL_THIS_KEY_IN_MOKMANAGER.cer tool/ - очевидно мы нашли вставленный в компьютер USB-носитель с Ventoy. Значит, диск hd0 нас больше не интересует

ls (hd2,gpt1)/

@home/ - мы нашли раздел нашего HDD-диска, на котором размещён раздел /home. Значит, диск hd2 нас больше не интересует

ls (hd1,gpt1)/

efi/ - судя по ответу, мы нашли раздел sda1 (смотрим разметку в начале статьи). Но он нам сейчас не нужен.

ls (hd1,gpt2)/

error: unknown filesystem. - здесь мы нашли swap-раздел

ls (hd1,gpt3)/

@/ - мы нашли корневой раздел в BtrFS. Просмотрим содержимое файловой системы, перейдя чуть глубже, используя следующую команду

ls (hd1,gpt3)/@/

dev/ run/ selinux/ boot/ lib/ sbin/ ... - теперь нам видна структура корневого раздела, в котором также присутствует директория /boot.

Теперь наша задача найти и указать GRUB путь к образу ядра Linux, путь к корневому разделу (мы уже знаем, что это будет root=/dev/sda3) и путь к образу Initrd. Для этого ещё углубимся в файловую систему

ls (hd1,gpt3)/@/boot/

System.map-6.1.57-un-def-alt1 initrd-un-def.img initrd.img vmlinuzinitrd-6.1.57-un-def-alt1.img grub/ vmlinuz-6.1.57-un-def-alt1 vmlinuz-un-defsplash/ memtest-6.20.bin config-6.1.57-un-def-alt1 efi/ memtest-6.20.efi - здесь мы нашли искомое и в следующих командах сможем точь-в-точь переписать пути к образу ядра (vmlinuz-6.1.57-un-def-alt1) и к образу initrd (initrd-6.1.57-un-def-alt1.img)


linux (hd1,gpt3)/@/boot/vmlinuz-6.1.57-un-def-alt1

root=/dev/sda3

initrd (hd1,gpt3)/@/boot/initrd-6.1.57-un-def-alt1.img

boot

После выполнения последней команды система начнёт загружаться и мы сможем войти в неё. Войдя в Параметрах системы KDE/Рабочая среда/Запуск и завершение/Загрузчик GRUB2 мы увидим то, что записей нет. Это говорит о том, что мы вошли в систему, но конфигурация GRUB автоматически не записалась. То есть если ничего не изменить, то при следующей перезагрузке мы попадём в GRUB. Для исправления ситуации устанавливаем GRUB

apt-get install grub

После установки GRUB, он автоматически создаст и сохранит конфигурацию. Увидеть это можно будет вновь зайдя в Параметрах системы KDE/Рабочая среда/Запуск и завершение/Загрузчик GRUB2. На этом восстановление повреждённой записи GRUB будет завершено

Авторы

История изменений