Восстановление загрузчика в Линукс
🕛 25.04.2007, 17:07
Сподвигли меня, на написание этой статьи, частые вопросы о том, каквосстановить загрузчик (asploader, lilo...) после того как там
поковырялась редмонская операционная система. Корень проблемы в том, что
мокрософт никак не может/не хочет уяснить что в мире есть и другие
операционки. В результате вышеупомянутая система, при установке, начисто
вычищает MBR, где и был прописан lilo (asploaser...). Вот тут то новичок
и попадает в интересную ситуацию, вроде Linux, установлен, но добраться
до него нельзя, так как коекто поленился включить поддержку открытых
файловых систем в поставку своего "гениального" творения. А если учесть,
что период полураспада мастдая, в сравнении с линухом, пренебрежительно
мал, то мы приходим к пониманию, что нужно что-то делать.
Есть три способа выхода из ситуации: правильный, админский и умный.
Первый способ. Правильный. При установке дистрибутива мы создаем
загрузочную дискетку. После чего ее нужно спрятать подальше. После
очередной переустановки мастдая мы загружаемся в линуху с дискетки и
оттуда все прописываем.
Недостатки. Практика показывает что о таких ситуациях редко кто
задумывается заранее. Да и сама дискетка может потеряться или запоротся.
Кроме того в наше смутное время не у всех есть соответствующий привод.
В любом случае рассказывать про этот метод не хочу. О нем много исписано
сайтов. Любой поисковик выдаст вам с десяток ссылок.
Второй способ. Админский. Перед переустановкой мастдая мы загружаемся в
линуха и накнопываем команду
# aspldr -d /dev/fd0
или
# lilo -M /dev/fd0
В этом случае загрузочная запись будет помещена в MBR флопа. При этом
можно дальше пользоваться дискеткой по прямому назначению а в случае
необходимости с нее загрузиться. Недостатки. Те же что и в первом
способе плюс не спасет сли вы испортили корневой роздел, на котором у
вас находился /boot. Уверен что есть похожие рули и в других
загрузчиках. Поискать их я предоставляю вам.
Третий способ. Умный. Для него нам понадобиться загрузочный компакт с
Linux. Какой именно Linux там будет нас не волнует. Необходимо только
получить доступ к консоли и корневой файловой системе вашего линуха.
Практика показывает что самыми подходящими для этих целей являются Blin
в виду их легкости и ориентированности на работу с компакта. Подойдут и
компакты с системой. Те самые, с которых вы ее поставили. Любой
дистрибутив имеет режим загрузки reskue или подобный ему. Загружаемся в
нем и ищем на винте свой корневой раздел. Удобнее всего это сделать с
помощью fdisk
# fdisk -l
Видим список всех доступных разделов. Выбираем из него наш. Это будет
что-то вида
/dev/hd*
Где hd* - может принимать значения hda, hdb, hdc или hdd. В зависимости
на каком контроллере у вас "подвешен" винт (Primary Master, Primary
Slave, Secondary Master или Sekondary Slave соответственно). Цифирька в
конце означает номер раздела на винте. Все что до 4 (включительно) основные, выше - логические. Это связано с тем, что по спецификации
может быть только четыре основных раздела. Если появляются логические один основной раздел преобразуеться.
Например будет такое
Disk /dev/hdb: 33.8 GB, 33820286976 bytes
255 heads, 63 sectors/track, 4111 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hdb1 * 26 4111 32820795 83 Linux
/dev/hdb2 2 25 192780 5 Extended
/dev/hdb5 2 25 192748+ 82 Linux swap
Нас интересует /dev/hdb1. Теперь его надо смонтировать. Обращу ваше
внимание что такие дистрибутивы, как Blin и Knoppix сами все находят и
монтируют. Только проверьте что смонтировано на запись (попробуйте
создать новую папку). Если нет, перемонтируйте
# mount -o remount,rw /mnt/hdb
Мы будем брать во внимание случай загрузки, когда ничего не подключено.
Создаем папку, куда все будет монтироваться. Можно из Midnight
Commander, а можно из консоли
# mkdir /mnt/hdb
далее
# mount /dev/hdb1 /mnt/hdb
Не забывайте о том что у вас корневой раздел может располагаться не как
у меня на /dev/hdb1.
Далее пишем команду
# chroot /mnt/hdb /bin/bash
Она запустит bash в каталоге /mnt/hdb как в корневом. Осталось подать
последнюю команду
# lilo
или
# aspldr
ну или чем вы пользуетесь?..
Теперь перезагружаемся.
# reboot
Только команду reboot надо подать с другой консоли. Почему попробуйте
догадаться сами.
Преимущества метода: работает ВСЕГДА, им пользуюсь я :)).
Недостатки. Некоторая трудоемкость. Хотя после пары раз идешь по всем
пунктам "на автомате" не задумаваясь.