Как починить повреждённый GRUB
Пару раз сталкивался с тем, что GRUB переставал работать, проваливаясь в выдавая ошибки вроде grub error symbol grub_disk_native_sectors not found. Чаще всего такое случается при некорректном обновлении, когда основная часть загрузчика (установленная в загрузочный сектор) обновилась, а модули в /boot/grub — нет, или наоборот, но могут быть и другие причины.
Что делать в таких случаях. Во-первых, можно попытаться загрузить Linux вручную с помощью команд:
Вместо sdaX нужно указать свой раздел (например, /dev/sda1) , а вместо y.z-u-generic — свою версию ядра. Её можно посмотреть с помощью команды ls. Сначала ls покажет список устройств, которые видит grub вида (hd0,msdos1), (hd0,msdos2), (hd1). Дальше нужно повторить ls для каталога /boot с указанием имени устройства перед ним. Т.е. ls (hd0,msdos1)/boot. Дальше выбрать подходящий файл vmlinuz и соответствующий ему initrd (они должны быть одинаковой версии).
Однако в случае повреждения некоторых модулей GRUB такое не работает, начинаются ошибки после команд insmod или linux. Тогда есть два варианта. Либо найти установочный диск/флешку той же версии системы, что установлена на компьютере, и загрузиться с неё. Но загрузочный образ может быть весьма большим, поэтому может оказаться проще использовать другое решение — SuperGrub 2 Disk. Это крошечный образ ISO (менее 20 Мб), в котором есть только загрузчик GRUB с таким файлом конфигурации, который умеет автоматически находить операционные системы на всех доступных разделах, и начинать процесс загрузки. Очень удобно, если нужно чинить GRUB на удалённом сервере с возможностью монтирования ISO через KVM.
После того, как загрузиться удалось, нужно переустановить GRUB командой
В Debian-подобных системах имеет смысл также обновить файл конфигурации GRUB с помощью команды sudo update-grub.
Что делать в таких случаях. Во-первых, можно попытаться загрузить Linux вручную с помощью команд:
insmod linux
set root=/dev/sdaX
linux /boot/vmlinuz-y.z-u-generic root=/dev/sdaX
initrd /boot/initrd.img-y.z-u-generic
boot
Вместо sdaX нужно указать свой раздел (например, /dev/sda1) , а вместо y.z-u-generic — свою версию ядра. Её можно посмотреть с помощью команды ls. Сначала ls покажет список устройств, которые видит grub вида (hd0,msdos1), (hd0,msdos2), (hd1). Дальше нужно повторить ls для каталога /boot с указанием имени устройства перед ним. Т.е. ls (hd0,msdos1)/boot. Дальше выбрать подходящий файл vmlinuz и соответствующий ему initrd (они должны быть одинаковой версии).
Однако в случае повреждения некоторых модулей GRUB такое не работает, начинаются ошибки после команд insmod или linux. Тогда есть два варианта. Либо найти установочный диск/флешку той же версии системы, что установлена на компьютере, и загрузиться с неё. Но загрузочный образ может быть весьма большим, поэтому может оказаться проще использовать другое решение — SuperGrub 2 Disk. Это крошечный образ ISO (менее 20 Мб), в котором есть только загрузчик GRUB с таким файлом конфигурации, который умеет автоматически находить операционные системы на всех доступных разделах, и начинать процесс загрузки. Очень удобно, если нужно чинить GRUB на удалённом сервере с возможностью монтирования ISO через KVM.
После того, как загрузиться удалось, нужно переустановить GRUB командой
sudo grub-install /dev/sdaX
В Debian-подобных системах имеет смысл также обновить файл конфигурации GRUB с помощью команды sudo update-grub.