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