L  i  n  u  x    P  a  r  k
при поддержке ВебКлуба

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

1. Введение
    В связи с часто возникающими в чате на http://linux.ru.net вопросами о восстановлении ядра и загрузчика Linux используя boot-дискетту или cdrom возникла мысль написать небольшую статью на эту тему. Надеюсь, что всем попавшим в затруднительную ситуацию данная статья окажет ощутимую помощь.
    Используемые материалы: Linux kernel source (init/main.c) и документ kernel-parameters.txt, идущий с исходными кодами ядра.
2. Восстановление загрузчика.
    Иногда у вас может возникнуть ситуация, когда загрузчик LILO удален установившимся на соседний раздел M$ Windows или просто установлен не корректно. Что сделать в этом случае? Переставлять систему? Что вы - никогда! В общем Linux я вообще не рекомендую переставлять никогда, т.к. из любой затруднительной ситуации можно найти корректный выход.
Для восстановления LILO вам может понадобится машина с установленным Unix или любая загрузочная дискетта от любого дистрибутива. Или загрузочный CD с любой версией любого дистрибутива.
    Для начала необходимо каким-то образом загрузить установленный у вас Linux. Для этого: вставьте загрузочный диск в CDROM или FLOPPY. Настройте загрузку с него в вашем BIOS. Во время загрузки вам загрузчик вам выдаст фразу: boot: или подобную. В ответ нужно сказать: vmlinuz -S root=/dev/ваш_root_раздел . После загрузки ядра вы должны будете попасть в восстанавливаюмую систему. На сообщения об ошибках при загрузке не обращайте внимания. Попав в систему под пользователем root поправьте файл /etc/lilo.conf (если это необходимо) и дайте команду lilo. После этого смело вводите команду reboot и грузитесь с вашего жесткого диска.
    Правда иногда бывают случаи, когда загрузить систему подобным образом не удается. Для этого у ядра существует еще парочка неплохих параметров. В частности один из них - "init=" а другой - "rw". Скажите в ответ на приглашение boot: cледующую магическую фразу:
vmlinuz root=/dev/ваш_root_раздел init=/bin/bash rw
Эта фраза после загрузки вашего ядра не будет запускать init, а вместо него запустит обычный bash и при этом root раздел диска будет примонтирован в режиме "read-write" что позволит вам производить необходимые изменения. Но - будьте осторожны - у вас не окажется ни только прописанных в переменную PATH путей, но и в целом всей системы контроля за вашими неправльными действиями. После того, как вы поправите необходимые вам файлы нужно в обязательном порядке сказать:
bash# sync
bash# mount -o remount,ro /
    Эти две команды сбросят кеш на диск и перемонтируют файловую систему в режим "Read only" (Только для чтения). После выполнения команд проверьте возможность записи на раздел, например создав какой-нибуть любой файл: bash# echo "test" >/test .Если не получилось - смело давите CTRL+ALT+DEL и загружайтесь обычным порядком как всегда не обращая внимания на проверку жесткого диска.
    В общем - это две оновных хитрости, которые позволяют практтически в любом случае получить доступ к работоспособной системе и ликвидировав ошибки перегрузить ее. Но - есть еще один способ. Гораздо проще. Для его выполнения вам понадобится всего-лишь ядро Linux и утилита rdev. Чистую отформатированную дискетту вставьте в дисковод на рабочей Linux машине. Запишите ядро на дискетту:
bash# cat /dev/vmlinuz>/dev/fd0
после записи укажите этому ядру root каталог для загрузки:
bash# rdev /dev/fd0 /dev/ваш_упавший_root_раздел
ну и загрузитесь с этой дискетты на вашей упавшей машине.
3. Как это работает.
Ну а теперь под конец на вашей восстановленной машине (я искренне надеюсь на то, что у вас все получилось) давайте же посмотрим что бы раз и навсегда решить для себя вопрос с восстановлением, как это работает.
Идем в каталог /usr/src/linux (там у вас должны быть исходники ядра) и далее в каталоге init смотрим файл main.c. Вы там найдете вызов программы init, и , я надеюсь все сразу и поймете. :-)

06.12.1999г.
Anton Farygin aka Rider
http://linux.ru.net