Восстановление загрузчика lilo linux
Сподвигли меня, на написание этой статьи, частые вопросы о том, как восстановить загрузчик Linux (asploader, lilo…) особенно после Windows OS. Корень проблемы в том, что мокрософт никак не может/не хочет уяснить что в мире существуют и другие операционные системы. В результате вышеупомянутая система, при установке, начисто вычищает MBR, где и был прописан lilo (asploaser…). Вот тут то новичок и попадает в интересную ситуацию, вроде Linux установлен, но добраться до него нельзя, так как коекто поленился включить поддержку открытых файловых систем в поставку своего “гениального” творения. А если учесть, что период полураспада мастдая, в сравнении с линухом, пренебрежительно мал, то мы приходим к пониманию, что нужно что-то делать.
Есть три способа выхода из ситуации c MBR:
— правильный;
— админский;
— умный;
Первый способ — Правильный
При установке дистрибутива мы создаем загрузочную дискетку. После чего ее нужно спрятать подальше. После очередной переустановки мастдая мы загружаемся в линуху с дискетки и оттуда все прописываем.
Недостатки
Практика показывает что о таких ситуациях редко кто задумывается заранее. Да и сама дискетка может потеряться или запоротся. Кроме того в наше смутное время не у всех есть соответствующий привод. В любом случае рассказывать про этот метод не хочу. О нем исписано много сайтов. Любой поисковик выдаст вам с десяток ссылок.
Второй способ — Админский
Перед переустановкой мастдая мы загружаемся в линуха и накнопываем команду # 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 надо подать с другой консоли. Почему попробуйте догадаться сами.
Преимущества метода:
работает ВСЕГДА )
Недостатки
Некоторая трудоемкость. Хотя после пары раз проходятся все пункты “на автомате” не задумаваясь.
восстановление загрузчика lilo МСВС
восстановил резервную копию МСВС 3.0 на другой жесткий диск акронисом, хотел с него запуститься и выдает экран L 99 99 99 99 99. Гугл говорит, что надо восстановить загрузчик LILO следующим алгоритмом действий: 1. загрузиться с диска 2. прописать mkdir /mnt 3. mount /dev/sdb3 /mnt 4. chroot /mnt 5. /sbin/lilo 6. sync 7. exit
Сделал все как написано, система выдает, что Mount: unknown filesystem type ‘swap’ пробовал тоже самое с sdb5, вроде все прошло, но с какими-то ошибками и выдает те же L 99 99 99 99 в чем может быть проблема?
Надо смонтировать все разделы перед chroot и не только разделы, нужно так же смонтировать /dev и /proc. Скорее /dev/sdb5 — корень, /dev/sdb2 — /home, а /dev/sdb1 — /boot.
mkdir /mnt/root mount /dev/sdb5 /mnt/root mount /dev/sdb2 /mnt/root/home mount /dev/sdb1 /mnt/root/home mount /dev /mnt/root/dev -o bind mount -t proc none /mnt/root/proc
Но тут тебе лучше самому знать что на каком разделе находится, монтируй куда-либо, смотри что на нём, но проще посмотреть /etc/fstab на корневой файловой системе.
Теперь по поводу настройки lilo, это файл /etc/lilo.conf, в выводе у тебя есть /dev/sdb, а это значит что есть и /dev/sda, в конфигурацонном файле /etc/lilo.conf указывается жёстко диск по номеру, в главную загрузочную запись которого и будет прописываться загрузчик. Так что, если в исходной системе диск был один, то при вызове /sbin/lilo ты пропишешь загрузчик не на /dev/sdb, а на /dev/sda.
Так что разбирайся что и куда ты хочешь прописать, /dev должен быть смонтирован и ошибок не должно быть.
Помогите восстановить загрузчик Lilo
При попытке копирования hdd с Linux как-то повредил исходный hdd. При включении комп выдаёт полный экран 01 01 01 и зависает. Я полагаю что-то с загрузчиком. При монтировании данного hdd в другой рабочей системе никаких изменений не вижу. Файл lilo.conf в запортаченой системе такой же как и в рабочей. На диска два раздела swap и linux (82 и 83). Загрузчик Lilo. Пните, пжалуста, куда копать.
загрузись через chainloader с флэшки и переставь загрузчик
А можно подробней для чайника. Гружу другую рабочую систему, примонтирую поломатую, делаю в неё chroot, как установить lilo?
Подключаете диск к рабочей системе.
Грузитесь в рабочую систему.
# mkdir /r # mount /dev/sdb1 /r # где там у вас корень # for d in dev proc sys; do mkdir /r/$d; mount --bind /$d /r/$d; done # chroot /r
Бэкапите lilo.conf (снаружи это /r/etc/lilo.conf, изнутри chroot-а это /etc/lilo.conf), правите строку boot, чтобы вместо /dev/sda там был указан ваш диск, как он виден в этой системе, например,
01 01 с самого, вообще начала?, тоды енто у тебя самый приглючнейший контроллер на сист платке, и дистр к этому вообще никаким боком.
Спасибо. Сделал как написали, только mcdir он мне сделать не дал, эти каталоги там уже были. Теперь другой затык выскакивает: VFS: Cannot root device 08:02 Kernel panic: VFS: Unable to mount root fs on 08:02
Kernel panic: VFS: Unable to mount root fs on 08:02
не удалось смонтировать корневую систему на втором разделе первого диска. Там повыше обычно табличка есть с разделами, которые опознаны ядром, есть смысл привести ее тут (текстом или фото).
Возможные причины:
1) такого устройства (08:0) в железе вообще нет (старт машины без HDD вовсе, поскольку это первый HDD)
2) такое устройство (08:0) не опознано ядром (для контроллера не оказалось в ядре драйвера, вкомпилированного или загруженного из initrd)
3) на устройстве нет такого раздела (08:02)
4) файловая система раздела не опознана ядром (для ФС не оказалось в ядре драйвера вкомпилированного или загруженного из initrd)
Используя LILO, нужно понимать, как он работает.
По команде lilo формируется тело загрузчика и записывается на место (куда указано в boot= или параметром комстроки), поэтому это место должно быть актуальным на момент вызова lilo. При формировании загрузчика вычисляются номера секторов, занятых ядром (image=) и образом начальной загрузки (initrd=), и записываются в сформированный загрузчик, поэтому эти данные также должны быть актуальны на момент вызова lilo.
Записанный код будет выполняться при перезагрузке машины (код в MBR первого (или выбранного) диска будет загружен загрузчиком BIOS, код в BR раздела — каким-либо другим загрузчиком). Получив управление, код загрузчика LILO загрузит по номерам секторов в память ядро, initrd (если указан), сформирует блок параметров ядра и передаст ядру управление. Поэтому все параметры ядра (append=, addappend=, root=, а для initrd также корень, заданный ключом -r команды mkinitrd) должны быть актуальны на момент выполнения кода загрузчика.
Поэтому проще всего ремонтировать загрузчик LILO на той машине, где он будет грузить систему, поскольку не нужно учитывать те самые нюансы от смены номеров устройств.
О какой системе идет речь? Обязателен ли в ней initrd для монтирования корня (ядро не содержит вкомпилированного драйвера коневой ФС)?