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

Неприятности случаются. ВНЕЗАПНО теряется загрузчик GRUB2. Поскольку GRUB2 - это не GRUB, то рецепты по восстановлению GRUB, коих полно в Сети, не работают. Чаще всего загрузчик теряется после повторной установки ОС Windows, которая бесцеремонно перезаписывает MBR, позволяя запускать только её собственное величество, и ничего с этим невозможно поделать. Автор сам на этом попадался, осваивая работу с машиной, на которой сосуществовало несколько ОС. Оставим, однако, агрессивность на совести корпорации Microsoft и постараемся исправить положение.

Существует несколько методов восстановления GRUB2. Рассмотрим тот, который на сленге называют чрут-метод; в русской IT-терминологии он известен как метод замены корня системы. Понадобится LiveCD и отсутствие боязни команд терминала. Чаще всего LiveCD - это тот самый дистрибутив, с которого устанавливали эксплуатируемый Линукс, но если нет "родного", то подойдёт и другой, начиная с версии 9.10. Если подводит память или вы восстанавливаете загрузчик на чужом компьютере и не знаете, с какого диска он грузится, то придётся заглянуть в секцию BOOT BIOS'а, чтобы потом не ошибиться. Запомните, откуда именно начинается загрузка, и запомните размеры винчестеров, если их несколько. По размерам легко ориентироваться "что есть что". Перестраиваем, если нужно, с помощью BIOS'а компьютер на загрузку с оптического привода и загружаемся с LiveCD. Нет, нет, Линукс переустанавливать не будем.

Понадобится LiveCD и отсутствие боязни команд терминала.

Для начала запускаем терминал "Приложения > Стандартные > Терминал" ("Applications > Accessories > Terminal", если LiveCD англоязычный). Чтобы разобраться с дисковым хозяйством, весьма полезно воспользоваться утилитой Gparted, которая, как правило, имеется на LiveCD. Запускается GParted командой терминала sudo gparted. Можно также воспользоваться командой терминала sudo fdisk -l, но информация будет менее наглядна.

Пусть до потери загрузчика GRUB2 Линукс-система (т.е. корневой директорий /, а не загрузчик!) располагалась в разделе sdxy, где x = a,b,c,d и т.д. - буква, означающая жёсткий диск (их в компьютере может быть и несколько), y = 1...8 - номер раздела внутри этого диска. Например, sdb1. Также пусть загрузка компьютера после включения ранее производилась с жёсткого диска sdz. Именно с диска, а не его раздела! Итак, куда ставить загрузчик, определились, продолжаем.

"Замонтим" системный раздел sdxy, содержащий родной Линукс, в директорий mnt пришлого Линукса:

sudo mount /dev/sdxy /mnt 

Если у вас тело загрузчика находилось в отдельном разделе sduw, то нужно примонтировать и его:

sudo mount /dev/sduw /mnt/boot

Здесь параметры uw играют ту же роль, что и xy, рассмотренные выше, т.е. u - это диск, а w - номер его раздела. Далее подменим некоторые системные разделы ОС, загруженной с LiveCD, системными разделами Линукса, к которым из-за потери загрузчика утрачен доступ:

sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

Теперь можем перейти на правах корневого пользователя в старый Линукс, для которого пропал загрузчик:

sudo chroot /mnt

Всё, сейчас мы находимся в своём Линуксе, а не в том, который только что был загружен с LiveCD. В принципе, если подменить остальные директории, то можно было бы и поработать, но как-то очень неудобно каждый раз этим заниматься. Поэтому просто восстановим загрузчик. На всякий случай обновляем файл конфигурации загрузчика /boot/grub/grub.cfg (вдруг он испорчен) командой:

update-grub

По этой команде ваш Линукс найдёт все операционные системы, ранее установленные на компьютере, и пропишет места их проживания в файл конфигурации загрузчика. И, наконец, торжественно ставим загрузчик на прежнее место:

grub-install /dev/sdz 

Даже если вы и не получите сообщение об ошибке, воспользуйтесь следующей командой:

sudo grub-install --recheck /dev/sdz 

для перепроверки корректности установки загрузчика.

Чтобы возвратиться к корню ОС, загруженной из LiveCD, нажмите Ctrl+D. Затем отмонтируйте командой umount всё, что смонтировали:

sudo umount /mnt/boot

(если монтировалось, разумеется)

sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys

Прежде чем отмонтировать корневой раздел своей системы, отмонтируйте свой пользовательский директорий, который примонтировался автоматически:

sudo umount /mnt /usr

Теперь можно отмонтировать и свой системный раздел:

sudo umount /mnt

Выйдите из загруженной с LiveCD ОС, нажав на экране кнопку выключения компьютера. Извлеките LiveCD и, как обычно, загрузитесь с жёсткого диска.

Команда sudo update-grub - команда правильная в буквальном смысле. У меня в версии Ubuntu 10.4 LTS "Lucid" по мере обновления этой версии накопилось много старых ядер 2.6.32 с разными минорами. После установки версии 11.04 "Natti" на другой винчестер каждый раз при загрузке "Natti" приходилось созерцать на экране целый "зоопарк" из ядер, принадлежащих "Lucid". Последующее удаление лишних ядер из "Lucid" ничего не меняло до тех пор, пока при загруженной "Natti" конфигурация её загрузчика не была освежена командой sudo update-grub.

Распространённые ошибки:

  1. используют LiveCD, не обращая внимания на разрядность ранее установленной системы, и
  2. используют старый LiveCD c загрузчиком GRUB вместо GRUB2.

Другие известные методы восстановления загрузчика GRUB2 основаны на копировании его файлов из разных источников и, по моему мнению, менее действенны, хотя тоже могут пригодиться, поэтому см. здесь: help.ubuntu.com/community/Grub2, если, конечно, с английским в ладах.

Михаил ГУРЧИК,
[email protected]

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Читайте также

Комментарии

Несколько раз восстанавливал загрузчик GRUB2 на своём компе по разным причинам. Есть одно замечание при отправке команды:

sudo chroot /mnt неоходимо указать "командую оболочку" вот так

sudo chroot /mnt /bin/bash

наслаждаемся...в противном случае live-система может не понять команды типа update-grub.