Библиотека сайта rus-linux.net
Заметки пользователя Linux
“И узнаешь ты много
такого, о чем совсем не хотел знать”
Автор неизвестен
Поскольку я постоянно экспериментирую с ОС Linux, я часто попадаю в нестандартные ситуации. Иногда я попадаю в трудное положение по незнанию, иногда намеренно, с целью в чем-то разобраться. В этой серии заметок я буду рассказывать о своем опыте выхода из трудных ситуаций.
Восстанавливаем таблицу разбиения диска
(C) В.А.Костромин, 2004.
Отказ от ответственности. Имейте в виду, что если, прочитав настоящие заметки, вы что-то вздумаете делать со своим диском, то вы будете делать на свой страх и риск! Автор настоящей статьи не несет никакой ответственности за то, что вы испортите свой диск или потеряете записанную на нем информацию. Будьте внимательны и осторожны и постарайтесь не делать никаких ошибок, потому что их последствия могут быть фатальны для ваших данных. Прежде, чем приступить к экспериментам, сделайте резервную копию ваших данных и четко продумывайте каждое свое действие! Все, что описано ниже, проверено на моем компьютере, но я не могу гарантировать, что это будет работать на вашем.
1.1. Предисловие
В эту ситуацию я попал недавно. Не буду пока рассказывать, как это получилось, но в результате компьютер у меня вообще отказался загружаться. Загрузчик LILO выдавал две буквы “LI”, после чего все замирало. Я решил, что испорчена главная загрузочная запись (Master Boot Record) на моем жестком диске. А на этом диске (объемом, кстати, 40 Гбайт, причем половина его была отдана Линуксу, а вторая половина - Windows) у меня было много чего собрано, так что просто переустанавливать систему как-то не хотелось. К сожалению, загрузочная дискета у меня отсутствовала – в ходе многочисленных переустановок системы она была как-то испорчена, а восстановлением ее я вовремя не озаботился.
Надо сказать, что я почти не сомневался, что смогу восстановить информацию, поскольку знал, что никаких необратимых действий с жестким диском не выполнял, так что вся информация должна быть цела, надо только до нее добраться. Подтверждение этого я получил достаточно быстро, запустив дистрибутив Knoppix с загрузочного CD-ROM. Пришлось, правда, немного повозиться - я хоть и имел в запасе такой Live-CD, но еще ни разу им не пользовался. Он у меня отказался вначале нормально выйти в графический режим, однако после того, как я вышел в меню запуска (по клавише F2) и задал обычное для моего монитора разрешение 1024х768, все пошло. И я увидел на рабочем столе значки всех моих разделов (см. рис.1, для просмотра полномасштабного рисунка откройте его в отдельном окне).
Рис. 1. Значки “потерянных” разделов на рабочем столе.
Щелчок мышкой по любому из значков разделов на рабочем столе приводил к тому, что открывалось окно браузера Konqueror, в котором отображалось содержание этого раздела. На рисунке 2 вы видите, что раздел /dev/hda5 являлся у меня корневым разделом.
Рис.
2. Корневой каталог жесткого диска
Замечание: Между прочим, тут я подумал, что Линукс может добраться до содержимого раздела и не обращаясь к таблице разделов (когда чуть позже я начал разбираться с устройством таблицы разделов, я понял, что это мое предположение не верно, я потом это объясню). А, во-вторых, я обратил внимание на то, что Knoppix умеет распознавать тип файловой системы, потому что одинаково успешно открываются разделы с файловыми системами ext2, ext3, FAT16 и NTFS. А я ведь не создавал для него файл /etc/fstab! Позже мы тоже поймем, почему это происходит.
Хорошо, информация цела, так что задача восстановления системы сводится к тому, чтобы восстановить первый сектор жесткого диска с его главной загрузочной записью и таблицей разделов диска. Если вас такое вступление заинтересовало, читаем дальше.
1.2. Первые попытки
Вначале я попытался восстановить работоспособность системы известным методом “научного тыка”, основываясь на тех знаниях, которые у меня имелись. Надо сказать, что система у меня была установлена из дистрибутива ASP Linux 7.2, потом дополнялась какими-то отдельными пакетами, работала устойчиво, в ней запускалась система виртуальных машин VMware, поэтому полностью переустанавливать ее мне не хотелось.
Вначале я надумал просто переустановить Lilo из-под Knoppix. В соответствии с man lilo эта команда, запущенная с опцией -M, записывает новую загрузочную запись из "mbr.b", которая встроена в /sbin/lilo (как я выяснил чуть позже опция -M имеется только у Lilo версии 22.х).
Получил права root-а командой "su -" и запустил
Lilo командой /sbin/lilo -M /dev/hda. В ответ получил такое
сообщение:
Unrecognized token "! Please edit /etc/lilo.conf
before running lilo!" at or above line 20 in file
'/etc/lilo.conf'
Открыв файл /etc/lilo.conf (в дистрибутиве Knoppix это ссылка на /KNOPPIX/etc/lilo.conf), я обнаружил, что в нем есть предупреждение о том, что строку "! Please edit /etc/lilo.conf before running lilo!" надо предварительно удалить. А ведь эта строка говорит о том, что файл /etc/lilo.conf необходимо предварительно подредактировать! Этим и пришлось заняться.
Я сделал в этом файле следующие изменения:
- указал в качестве
загрузочного устройства /dev/hda;
- строку
"install=/boot/boot-menu.b" заменил на
"install=/mnt/hda3/boot-menu.b"; (предварительно
смонтировал старый раздел boot в каталог /mnt/hda3);
- вставил
разделы image из старого файла /etc/lilo.conf.
И снова запустил
команду lilo в следующем формате:
/sbin/lilo -C /mnt/floppy/lilo.conf -M /dev/hda
Результат перезагрузки - тот же: остановка загрузки после появления двух букв "LI".
Тогда я надумал смонтировать свои старые разделы и сделать chroot.
Снова загрузил Knoppix и выполнил следующие команды:
[root]
mount -t ext2 /dev/hda5 /mnt/hda5
[root] mount -t ext2
/dev/hda3 /mnt/hda5/boot
[root] mount -t ext2 /dev/hda6
/mnt/hda5/usr
[root] mount -t ext2 /dev/hda8
/mnt/hda5/home
[root] chroot /mnt/hda5
Затем выполнил команду "/sbin/lilo -t -v". Сообщений об ошибках не было, поэтому запустил "/sbin/lilo" без параметров. Как будто все прошло нормально. Перезапускаюсь. Результат прежний.
В ходе этих экспериментов как раз и выяснилось, что опция -M имеется только в версии Lilo из дистрибутива Knoppix. На диске же у меня была версия 21.7, где такой опции нет, зато есть -P fix. Однако при ее использовании результат тоже не изменился.
Но поскольку удается сделать chroot, причем после этого я вижу как
будто только свою старую файловую систему, надумал я изготовить
загрузочную дискету для своей старой системы с помощью команды
mkbootdisk. Заглянув на man-страничку, выяснил, что для этого нужно
дать следующую команду:
[root] mkbootdisk --device /dev/fd0
2.4.18-5asp
Это был первый успех - дискета успешно создалась и с ее помощью удалось загрузиться, причем я получил полностью свою старую систему. Поскольку загрузочная дискета в Линукс обладает тем свойством, что после окончания процесса загрузки ее можно убрать из дисковода (если, например, вам необходимо использовать другую дискету), причем ее даже размонтировать не требуется, то, в принципе, уже можно жить! Единственный недостаток у такого метода - загрузка проходит чуть медленнее.
Хоть и можно так жить, но все же хочется восстановить нормальную процедуру загрузки. И не потому, что с дискеты медленнее, а даже просто из принципа.
Поэтому я запустил fdisk /dev/hda из-под Knoppix. И получил следующий результат:
Command (m for help): p Disk /dev/hda: 16 heads, 63 sectors, 77545 cylinders Units = cylinders of 1008 * 512 bytes Device Boot Start End Blocks Id System /dev/hda1 1 765 385528 82 Linux swap Partition 1 does not end on cylinder boundary: phys=(47, 254, 62) should be (47, 15, 63) /dev/hda2 * 766 4575 1919736 c Win95 FAT32 (LBA) Partition 2 does not end on cylinder boundary: phys=(304, 254, 63) should be (304, 15, 63) /dev/hda3 4575 4766 96390 83 Linux Partition 3 does not end on cylinder boundary: phys=(298, 254, 63) should be (298, 15, 63) /dev/hda4 4766 77536 36676395 f Win95 Ext'd (LBA) Partition 4 does not end on cylinder boundary: phys=(1023, 14, 63) should be (1023, 15, 63) /dev/hda5 4766 6806 1028128+ 83 Linux /dev/hda6 6806 10886 2056288+ 83 Linux /dev/hda7 10886 27142 8193118+ 83 Linux /dev/hda8 27142 36896 4915858+ 83 Linux /dev/hda9 36896 77536 20482843+ b Win95 FAT32 |
"LI — первичный загрузчик сумел загрузить вторичный загрузчик, но не сумел запустить его на выполнение. Это может быть вызвано ошибкой в задании геометрии диска или тем, файл /boot/boot.b был перемещен без перезапуска /sbin/lilo".
Поскольку Lilo я переустанавливал и результата это не дало, то причина моих трудностей кажется, определилась однозначно - сбой в таблице разделов диска. Остается найти способ этот сбой исправить. И отправился я в Интернет за поиском рецептов. О том, что мне удалось выяснить, будет рассказано далее в этой серии заметок.
Все ссылки на найденные мной источники информации по данному вопросу перечислены в списке ссылок. Я же постараюсь в краткой форме изложить суть вопроса, то есть фактически приведу только краткий конспект перечисленных в этом списке материалов, дополненный рассказом о моем собственном опыте.
Продолжение: 1.3. Зачем нужны разделы?.