Программа TestDisk предназначена для того, чтобы помочь восстановить потерянные разделы и/или восстановить возможность загрузки с диска, для которого такая возможность была утеряна вследствие сбоя в работе программного обеспечения, воздействия вируса или простой человеческой ошибки (например, если вы случайно затерли таблицу разделов). Она позволяет проанализировать структуру диска и найти потерянные разделы, а при необходимости и восстановить таблицу разделов. Утилита разработана К. Гренье (Christophe GRENIER). У меня в системе Knoppix 3.2 обнаружилась версия 4.0 этой программы, датированная 3 апреля 2002 г. А на сайте
http://www.cgsecurity.org я обнаружил версию 5.3, снабженную довольно подробной документацией (man-страница к программе настолько краткая, что не позволяет понять, как этой программой пользоваться).
Программа TestDisk может быть запущена
• под DOS (как в "чистом" ДОС, так и окне под Win9x),
• под Windows (NT4 / 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. В любом варианте запуска программы вначале выводится список дисков, обнаруженных в системе (рис. 29).
Рис. 29. Основное меню программы testdisk
С помощью клавиш управления курсором "стрелка вверх/вниз" вы можете выбрать диск для анализа. В нижней части окна имеется список доступных команд, перемещаться по которому можно с помощью клавиш "стрелка вправо/влево". А строка подсказки, расположенная ниже этого меню, дает краткое пояснение к подсвеченному пункту. Когда нажимаем клавишу <Enter> при подсвеченном пункте меню Analyze вначале, видимо, выводится просто содержимое таблицы разделов из MBR и предлагается единственный пункт меню Quit (рис. 30), что может привести пользователя в некоторое недоумение.
Рис. 30. Первый результат работы программы testdisk
Однако повторное нажатие клавиши <Enter> запускает все же процесс анализа структуры разделов диска (рис. 31), ход которого отображается в строке "Analyze cylinder NNNN/MMMM". Поскольку процесс анализа, надо отметить, продолжается очень долго, эта строка является не лишней, она помогает сохранить терпение.
Рис. 31. Процесс анализа диска
Анализ структуры диска заключается в том, что TestDisk просматривает начальные сектора всех цилиндров. Первичные разделы обычно размещаются начиная с первого сектора цилиндра (head=0, sector=1), а логические разделы - со второго сектора (head=1, sector=1) или даже со второго цилиндра. Сканируя все возможные начальные сектора разделов TestDisk анализирует их на наличие заголовков файловых систем (a filesystem header): для FAT или NTFS это загрузочный сектор, для EXT2/EXT3 - суперблок, для BSD - метка диска (disklabel) и так далее. Обнаружение такого заголовка интерпретируется как начало раздела соответствующего типа. Размер раздела определяется непосредственно исходя из его структуры на диске. Каждый обнаруженный во время такого сканирования раздел TestDisk добавляет в список найденных разделов.
Поскольку, как уже было сказано при описании утилиты gpart, на диске могут присутствовать "останки" или "следы присутствия" давно удаленных разделов, которые просто не были затерты более поздней информацией (это особенно часто случается в том случае, когда проводится детальный поиск потерянных разделов), пользователь должен внимательно проанализировать результаты поиска, чтобы выбрать те разделы, которые действительно присутствовали на диске перед тем, как была испорчена таблица разделов.
По завершении этого процесса программа предлагает (рис. 32) исправить характеристики разделов, которые указаны в виде одиночного символа (*, P, E, L или D) в первом столбце таблицы. Изменение этого параметра обнаруженного раздела осуществляется с помощью клавиш-стрелок "вправо\влево" (вы просто перебираете циклически значения, перечисленные в нижней строке экрана, пока не найдете нужное). Тут же можно изменить тип раздела, нажав клавишу <T>. А по клавише <P> можно вывести список файлов в том разделе, на который указывает подсветка.
Рис. 32. Окно с результатами анализа диска
Еще одно нажатие клавиши <Enter> и мы видим дополнительное меню из трех пунктов (рис. 33). С помощью пункта Search можно провести углубленный поиск потерянных разделов. А команда Write служит для того, чтобы записать на диск исправленную таблицу разделов.
Рис. 33. Дополнительное меню
Если вы присмотритесь к рисунку 33, вы обратите внимание на то, что программа показывает всего два раздела. Это следствие того, что я слишком поспешно воспользовался командой Write. Не знаю, в чем причина, но после выполнения команды Write та же утилита TestDisk стала видеть на моем диске только 2 раздела. Возможно, вина в этом полностью моя, но результат был обескураживающим. Прежде чем рассказывать о своих дальнейших действиях, я все же приведу еще описание других команд из основного меню программы, заимствованное из документации.
Команда меню Delete
Если вы выберете эту команду из меню программы TestDisk, будет обнулена таблица разделов в главной загрузочной записи, то есть во все 64 байта, отведенные под эту таблицу, будут записаны нулевые значения. Код загрузчика и другие данные в главном загрузочном секторе (байты сигнатуры и тому подобное) останутся нетронутыми.
Команда меню MBRCode
По этой команде TestDisk перезаписывает код первичного загрузчика и сигнатуру MBR (то есть значение 0xAA55 в двух последних байтах MBR). Это действие примерно аналогично тому, что делает команда MS-DOS fdisk, будучи запущенной с "недокументированной" опцией /MBR, то есть записывает код стандартного первичного загрузчика. Это может оказаться полезным в том случае, если ваша система вообще отказывается загружаться и вы уже исчерпали все другие способы выхода из этой ситуации.
Команда меню Geometry
Эта команда служит для того, чтобы задать значения параметров геометрии диска (число цилиндров, головок или секторов), которые TestDisk использует для поиска начальных секторов разделов. Дело в том, что программы для создания разделов для архитектуры i386 чаще всего создают разделы, оканчивающиеся на границе цилиндра. Поэтому изменение параметров геометрии, используемых программой, приводит к тому, что будут просматриваться другие сектора.
Команда не меняет параметров самого жесткого диска до тех пор, пока вы не выполните команду записи данных о найденных разделах на диск. Имейте в виду, что задание неправильной геометрии и запись этих неправильных данных на диск может привести к невозможности в дальнейшем восстановления ваших данных. Как предупреждает руководство, команда эта ТОЛЬКО ДЛЯ ЭКСПЕРТОВ.
Руководство рекомендует в том случае, если вы решите менять геометрию диска, изменять в первую очередь число логических головок, причем опробовать значения числа головок, равные 255, 16, 32, 64, 128 и 240.
Команда меню Options
Значения опций меняются путем "подсвечивания" нужной строки и нажатия клавиши ENTER. Изменять можно значения следующих опций:
• Dump : Отображать содержимое "подозрительных" секторов (по умолчанию: не отображаются; опция аналогична опции /dump командной строки)
• Cylinder boundary : границы разделов совпадают с началом цилиндров (по умолчанию: да).
• Allow partial last cylinder : последний цилиндр может быть не полным (по умолчанию: нет)
• Ask partition order : разделы могут быть переупорядочены (по умолчанию: нет)
• Halt on errors : останавливаться при обнаружении ошибок дискового ввода/вывода (по умолчанию: да)
• Maximize extended part : если существуют логические разделы, расширенный раздел будет использовать все доступное дисковое пространство (по умолчанию: нет).
• Expert mode : Если эта опция установлена (значение "да"), программа предоставляет некоторые дополнительные возможности (по умолчанию: нет).
• Quit : сохранить (запомнить) выбранные значения опций и вернуться к главному меню.
Команда меню Advanced
Только для экспертов, пытающихся восстановить и отремонтировать загрузочные сектора операционных систем! TestDisk позволяет вам выполнить некоторые действия с загрузочными секторами на FAT- и NTFS-разделах. Выберите раздел, который вы хотите модифицировать, и выберите команду Boot. За описанием того, какие возможности Вы при этом получите, я отошлю вас к документации, прилагаемой к программе.
На этом я, пожалуй, завершу краткое описание программы TestDisk. Дело в том, что мой опыт работы с этой программой был тоже весьма невелик. Я надеюсь, что общее представление о программе вы получили и теперь можете продолжить эксперименты с ней самостоятельно.
В заключение раздела приведу еще три небольших замечания:
• 1. В процессе поиска инструментов для восстановления таблицы разделов я натолкнулся на ссылку о том, что существует еще программа rescuept, автором которой является Andries Brouwer (автор двух HOWTO о разделах диска, смотри ссылки). Эта утилита входит в состав пакета util-linux, который вы можете найти почти на любом ftp-сайте с программным обеспечением для Linux. Однако, поскольку я с этой програмой не работал, сказать о ней ничего не могу.
• 2. Некоторые из программ для работы с таблицей разделов диска, рассмотренные в предыдущих разделах, тоже обладают способностью восстановления испорченной структуры разделов. Для корректировки таблицы разделов диска можно, в частности, использовать утилиту sfdisk. Во-первых, у программы sfdisk имеется опция -V, которая служит для проверки таблицы разбиения диска. Правда, мне показалось, что результат ее выполнения команды sfdisk -V дает очень мало полезной информации:
Листинг 14.
[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
Утилита sfdisk интерпретирует строки входного файла как
<start> <size> <id> <bootable> <c,h,s> <c,h,s>
Отдельные поля при этом разделяются пробелами, запятыми или точкой с запятой (возможно с последующими пробелами). При этом два последних поля (<c,h,s>) могут быть опущены - программа сама вычислит нужные значения исходя из значения полей start и length, и геометрии диска, сообщаемой ядром.
Но я не решился воспользоваться этим способом корректировки таблицы разбиения диска.
• 3. После восстановления раздела всегда запускайте проверку целостности ФС с помощью соответствующей ее типу утилиты:
fsck.ext2 /dev/hdb1
reiserfsck /dev/hdb3
Тип лицензии: Open Source