Восстановление загрузчика или ядра в 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, и, я надеюсь все сразу и поймете.