1.8. Определяем “истинную” таблицу разделов. Утилита TestDisk.
Примечание: В документации программа называется TestDisk, а вызывается она командой testdisk, поэтому не удивляйтесь, что я пишу название иногда с заглавными буквами, иногда без таковых.
Программа TestDisk предназначена для того, чтобы помочь восстановить потерянные разделы и/или восстановить возможность загрузки с диска, для которого такая возможность была утеряна вследствие сбоя в работе программного обеспечения, воздействия вируса или простой человеческой ошибки (например, если вы случайно затерли таблицу разделов). Она позволяет проанализировать структуру диска и найти потерянные разделы, а при необходимости и восстановить таблицу разделов. Утилита разработана К. Гренье (Christophe GRENIER). У меня в системе Knoppix 3.2 обнаружилась версия 4.0 этой программы, датированная 3 апреля 2002 г. А на сайте http://www.cgsecurity.org я обнаружил версию 5.3, снабженную довольно подробной документацией (man-страница к программе настолько краткая, что не позволяет понять, как этой программой пользоваться).
Программа TestDisk может быть запущена
- под DOS (как в «чистом» ДОС, так и окне под Win9x),
- под Windows (NT 4/2000/XP/2003),
- под Linux или FreeBSD.
Программа может отыскать потерянные разделы с файловыми системами следующих типов:
- BeFS ( BeOS )
- DOS/Windows FAT12, FAT16 and FAT32
- Ext2 and Ext3 ( Linux)
- Linux Swap (версий 1 и 2)
- Netware (только старых версий)
- NTFS ( Windows NT/2K/XP )
- ReiserFS (версий 1 и 2)
- UFS ( FreeBSD/OpenBSD/NetBSD )
- JFS
Как сообщает краткая справка к программе, запускается она в одном из следующих форматов.
testdisk [/log] [/debug] [/dump]
testdisk /list [/log]
Будучи запущенной с опцией /list, команда просто выводит список существующих разделов (точнее, видимо, содержимое таблиц разделов из MBR) на всех жестких дисках. Во всех остальных вариантах после запуска программы TestDisk выводит вначале фразу «Please wait…» и приступает к сбору данных от BIOS или OS.
Опции (необязательные) /log, /dump и /debug имеют следующее назначение:
- /log — создавать файл протокола работы программы (его имя testdisk.log);
- /debug — добавлять отладочную информацию;
- /dump — отображать на экране и записывать в протокол содержание найденных начальных секторов разделов.
В документации к программе рекомендуется запускать ее с опциями /log и /debug. В любом варианте запуска программы вначале выводится список дисков, обнаруженных в системе (рис. 9).
Рис. 9. Основное меню программы testdisk
С помощью клавиш управления курсором «вверх/вниз» вы можете выбрать диск для анализа. В нижней части окна имеется список доступных команд, перемещаться по которому можно с помощью клавиш «вправо/влево». А строка подсказки, расположенная ниже этого меню, дает краткое пояснение к подсвеченному пункту. Когда нажимаем клавишу
Рис. 10. Первый результат работы программы testdisk
Однако повторное нажатие клавиши
Рис. 11. Процесс анализа диска
Анализ структуры диска заключается в том, что TestDisk просматривает начальные сектора всех цилиндров. Первичные разделы всегда размещаются начиная с первого сектора цилиндра (head=0, sector=1), а логические разделы — со второго сектора (head=1, sector=1). Сканируя все возможные начальные сектора разделов TestDisk анализирует их на наличие заголовков файловых систем (a filesystem header): для FAT или NTFS это загрузочный сектор, для EXT2/EXT3 — суперблок, для BSD — метка диска (disklabel) и так далее. Обнаружение такого заголовка интерпретируется как начало раздела соответствующего типа. Размер раздела определяется непосредственно исходя из его структуры на диске. Каждый обнаруженный во время такого сканирования раздел TestDisk добавляет в список найденных разделов.
Поскольку, как уже было сказано при описании утилиты gpart, на диске могут присутствовать «останки» или «следы присутствия» давно удаленных разделов, которые просто не были затерты более поздней информацией (это особенно часто случается в том случае, когда проводится детальный поиск потерянных разделов), пользователь должен внимательно проанализировать результаты поиска, чтобы выбрать те разделы, которые действительно присутствовали на диске перед тем, как была испорчена таблица разделов.
По завершении этого процесса программа предлагает (рис. 12) исправить характеристики разделов, которые указаны в первом столбце. Изменение этого параметра обнаруженного раздела осуществляется с помощью клавиш-стрелок «вправо\влево» (вы просто перебираете циклически значения, перечисленные в нижней строке экрана, пока не найдете нужное). Тут же можно изменить тип раздела, нажав клавишу можно вывести список файлов в том разделе, на который указывает подсветка. Еще одно нажатие клавиши Если вы присмотритесь к рисунку 13, вы обратите внимание на то, что программа показывает всего два раздела. Это следствие того, что я слишком поспешно воспользовался командой Write. Не знаю, в чем причина, но после выполнения команды Write та же утилита TestDisk стала видеть на моем диске только 2 раздела. Возможно, вина в этом полностью моя, но результат был обескураживающим. Прежде чем рассказывать о своих дальнейших действиях, я все же приведу еще описание других команд из основного меню программы, заимствованное из документации. Если вы выберете эту команду из меню программы TestDisk, будет обнулена таблица разделов в главной загрузочной записи, то есть во все 64 байта, отведенные под эту таблицу, будут записаны нулевые значения. Код загрузчика и другие данные в главном загрузочном секторе (байты сигнатуры и тому подобное) останутся нетронутыми. По этой команде TestDisk перезаписывает код первичного загрузчика и сигнатуру MBR (то есть значение 0xAA55 в двух последних байтах MBR). Это действие примерно аналогично тому, что делает команда MS-DOS fdisk, будучи запущенной с «недокументированной» опцией /MBR, то есть записывает код стандартного первичного загрузчика. Это может оказаться полезным в том случае, если ваша система вообще отказывается загружаться и вы уже исчерпали все другие способы выхода из этой ситуации. Эта команда служит для того, чтобы задать значения параметров геометрии диска (число цилиндров, головок или секторов), которые TestDisk использует для поиска начальных секторов разделов. Дело в том, что программы для создания разделов для архитектуры i386 чаще всего создают разделы, оканчивающиеся на границе цилиндра. Поэтому изменение параметров геометрии, используемых программой, приводит к тому, что будут просматриваться другие сектора. Команда не меняет параметров самого жесткого диска до тех пор, пока вы не выполните команду записи данных о найденных разделах на диск. Имейте в виду, что задание неправильной геометрии и запись этих неправильных данных на диск может привести к невозможности в дальнейшем восстановления ваших данных. Как предупреждает руководство, команда эта ТОЛЬКО ДЛЯ ЭКСПЕРТОВ. Руководство рекомендует в том случае, если вы решите менять геометрию диска, изменять в первую очередь число логических головок, причем опробовать значения числа головок, равные 255, 16, 32, 64, 128 и 240. Значения опций меняются путем «подсвечивания» нужной строки и нажатия клавиши ENTER. Изменять можно значения следующих опций: Только для экспертов, пытающихся восстановить и отремонтировать загрузочные сектора операционных систем! TestDisk позволяет вам выполнить некоторые действия с загрузочными секторами на FAT- и NTFS-разделах. Выберите раздел, который вы хотите модифицировать, и выберите команду Boot. За описанием того, какие возможности Вы при этом получите, я отошлю вас к документации, прилагаемой к программе. На этом я, пожалуй, завершу краткое описание программы TestDisk. Дело в том, что мой опыт работы с этой программой был тоже весьма невелик. Как уже было сказано, я поторопился записать «исправленную» таблицу разделов на диск и в результате совершенно ее запортил! Что я ни делал, после попытки загрузиться с жесткого диска появлялись две пресловутые буквы «LI» и на этом все заканчивалось. Тогда я решил установить систему заново. Очистил MBR командой Тогда я попробовал поставить на диск Mandrake Linux 10.0. Установка прошла успешно, но после перезагрузки я получил тот же непонятный результат — «LI«. Тут уж у меня зародилось сомнение в том, что я поставил правильный диагноз о причинах «заболевания» моей системы. Дело, видимо, не в искаженном загрузочном секторе! Так оно и оказалось! Причина, оказывается, была в том, что я неправильно задал порядок загрузочных устройств в BIOS. Вместо hdd-0 в качестве основного загрузочного устройства указал hdd-1 (перед ним шли CD-ROM и floppy). В результате BIOS пытался осуществить загрузку со второго жесткого диска, на котором я когда-то тоже что-то ставил (поэтому и появлялись буквы «LI«, которые ввели меня в заблуждение), но на котором давно не было никакой операционной системы (и вообще диск был уже дефектным). О том, что было дальше, я расскажу в следующей заметке. В заключение приведу еще два небольших примечания: Листинг 5. Но, если вы знаете как исправить таблицу разделов, можно поступить следующим образом: вначале таблица разделов диска выгружается в файл, корректируется, а затем снова загружается в начальный сектор диска. Делается это так: Листинг 6. Утилита sfdisk интерпретирует строки входного файла как Отдельные поля при этом разделяются пробелами, запятыми или точкой с запятой (возможно с последующими пробелами). При этом два последних поля ( Но я не решился воспользоваться этим способом корректировки таблицы разбиения диска.
Рис.12. Окно с результатами анализа диска
Рис. 13. Дополнительное менюКоманда меню Delete
Команда меню MBRCode
Команда меню Geometry
Команда меню Options
Команда меню Advanced
dd if=/dev/zero of=/dev/hda bs=512 count=1
и попытался установить на «чистый» диск Windows 2000. Программа инсталляции создала новый раздел, перенесла на него установочные файлы, после чего предложила перезагрузиться. После перезагрузки появилось сообщение «Missing operating system» и на этом снова все закончилось.
[root]# /sbin/sfdisk -V /dev/hda
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
sfdisk -d /dev/hda > hda.out
sfdisk /dev/hdb < hda.out
Источник http://rus-linux.net/kos.php?name=/papers/adv1/8.html