Как восстановить поврежденный загрузчик GRUB

grub ubuntu 18.04 is dead

В этой статье я рассказываю свой случай восстановления загрузчика GRUB на Ubuntu 18.04 LTS. Поиск в google и чтение man не дало быстрого решения, и я потратил почти целый день на восстановление работоспособности сервера.

Сколько раз я обещал себе не трогать сервера и железо без особой надобности ?!
Пришел с работы уставший, поужинав и заглянув в душ какого то лешего меня потянуло на домашний сервер. Зашел, увидел что Ubuntu давно не обновлял.
Обновил…
Потом увидел что у меня ZFS зеркало развалилось. Что то я там делал, не помню ничего — всё как в тумане. Перезагрузил его и он не вернулся. Сижу за 2000+ километров и думаю — мдаа. Доигрался. Молодец!

Попросил на месте глянуть что у него в консоли — говорят ничего. Белый курсор на черном экране. Приехал домой, включил сервер — действительно сразу после логотипа BIOS я вижу белый курсор на черном фоне.
Перезагружаю сервер, зажимаю клавишу Shift, вижу перед собой надпись GRUB и этот самый курсор.

Честно признаться, я потратил кучу времени на то чтобы понять что случилось, что происходит, как оно работает. Ранее я не сталкивался с GRUB в аварийных ситуациях. Сейчас я не буду рассказывать о десятках перепробованных вариантов восстановления, а лишь остановлюсь на том что мне помогло в итоге.

Качаем образ Ubuntu 18.04 LTS с официального веб сайта, и записываем на флешку с помощью Rufus. Загружаемся с флешки, доходим до момента где программа установки предлагает выбрать раскладку клавиатуры и язык системы. Нажимаем ALT+F2 переключившись на другую консоль.

Выполняем команду sudo su и получаем привилегии суперпользователя.

Выполняем команду fdisk -l и смотрим разделы жесткого диска

Ubuntu 18.04 LTS command fdisk -l

Монтируем наш раздел в текущую загруженную Live систему.
mount /dev/sda2 /mnt

Говорим команду grub-install, а он говорит что не знает что мы от него хотим:
Устанавливаем утилиту командой apt install grub2-common. В общей сложности около 14.8 мегабайт.

Если после этого запустить grub-install, он ругался на то что отсутствует скрипт modinfo.sh.

Далее я установил apt-get install grub-pc. Автоматически запустился конфигуратор который спросил на какой диск поставить GRUB ? Я указал, на что он ответил что не получилось. Ошибка. Ок …

НО теперь если запустить grub-install, то он более не ругается что у него нет скрипта.
Запускаем его указав диск для установки GRUB, команда:
grub-install —root-directory=/mnt/ /dev/sda

Ubuntu 18.04 LTS grub installed

После этого я перезагрузил сервер. Вот сейчас я делаю все то же самое на виртуалке — и она уже загрузилась и заработала. Странно. В моем случае — нет. Открылась командная строка GRUB (rescue mode), в которой я выполнял следующие команды:

Команда ls показала мне список устройств. Были hd0.gpt1 & hd0.gpt2. По аналогии с sda1 & sda2 я понял что это и есть мои диски.
Я выполнил следующие команды:

set prefix=(hd0,gpt2)/boot/grub
set root=(hd0,gpt2)
insmod normal
normal
insmod linux
linux /boot/vmlinuz-4.15.0-72-generic (имя может отличаться TAB)
initrd /boot/initrd.img-4.15.0-72-generic (имя может отличаться TAB)
boot
после этой команды у меня запустилась система, и все работало как нужно. По сути я просто ручками запустил ее, так как GRUB оказался не настроенным.

В уже загруженной системе я выполнил команду update-grub, которая сгенерировала конфигурационные файлы под текущую систему.
После выполняем команду grub-install /dev/sda и загрузчик устанавливается успешно. Перезагружаем систему — и все работает.
Обратите внимание что загрузчик устанавливается в загрузочный сектор жесткого диска а не партиции, поэтому указываем имя устройства а не партиции.

В сети очень много разных инструкций, и я начал естественно с официального мануала. Но почему то всё шло не так как написано и ничего не получалось. А сейчас я пишу этот пост — и вовсе на виртуалке всё получилось в половину быстрее, чем на реальном сервере. Для меня до сих пор остается загадкой каким образом слетел (или я его зацепил) загрузчик на моем сервере.

Возможно кому то будет полезен этот опыт…

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *