20 июл. 2009 г.

Восстановление GRUB2

Вчера я совершил страшное – обновил grub2 на своём Debian'е и на все вопросы установщика отвечал нажатием Enter, т.е. дал ответы по умолчанию. А делать так не следовало, потому что grub2 сломался и компьютер не грузился.

Здесь я расскажу, ка я его починил.

Я нашёл Live CD с Ubuntu (ну, какой был :), в принципе, любой подошёл бы) и загрузился с него. Прямо с этого диска восстановиться не удалось, потому что мой Debian на архитектуре AMD64, а Ubuntu – i386. Мне нужно было найти что-то загрузочное с той же архитектурой, что и мой Debian.

Немного погуглив, я обнаружил, что у Debian'а тоже есть Live CD, и даже Live USB. Найти можно здесь: http://live.debian.net/debian-cd/5.0.1/amd64/usb-hdd/ . Мне не нужны были красивости рабочего стола, поэтому я скачал просто образ для восстановления. Чтобы записать его на флешку, нужно выполнить команду (которая УДАЛИТ ВСЮ ИНФОРМАЦИЮ С ФЛЕШКИ):

# dd if=/path/to/the/debian-live-501-amd64-rescue.img of=/dev/sdX


Здесь /path/to/the/ директория, где хранится образ, /dev/sdX – устройство USB-накопителя, которое к моменту выполнения команды должно быть размонтировано.

После того, как образ был записан, я просто перезагрузился с флешки.

Все дальнейшие действия подразумевают, что выполняющий их знает, на каком разделе что у него находится. Если нет уверенности, можно поочерёдно примонтировать каждый раздел, скажем, в /mnt, посмотреть и даже записать, чтобы не убить систему окончательно.

У меня разделы расположены так:

/dev/sda5 -- /
/dev/sda2 -- /boot


Поэтому на восстановительной системе я делал следующее:

# mount /dev/sda5 /mnt
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount /dev/sda2 /mnt/boot


Или по-русски:

1. Примонтировали корневой раздел жёсткого диска в /mnt;
2. "Приязали" /dev к новому корню;
3. То же самое с /proc;
4. Примонтировали /boot к новому корню.

Всё это делалось для того, чтобы сделать:

# chroot /mnt


т.е. чтобы поменять корень и работать практически в своей системе.

И последний штрих:

# grub-install /dev/sda


И всё! :)