Литмир - Электронная Библиотека
Содержание  
A
A

Теперь необходимо сгенерировать новый список отрезков. В общем виде он будет выглядеть так:

13 XX XX XX YY 00
, где
XX XX XX
 — трехбайтное значение размера
$MFT
в кластерах, a
YY
— стартовый кластер. Стартовый кластер обязательно должен указывать на первый кластер MFT, в противном случае chkdsk не сможет работать. Если новый список отрезков длиннее нынешнего (скорее всего, именно так и будет), то необходимо скорректировать длину атрибутного заголовка (она расположена по смещению
04h
от его начала). Проделав эту нехитрую операцию, запустим chkdsk с ключом
/F
и блаженно откинемся на спинку кресла, созерцая, как возрождаются наши милые папки и файлы. Единственное, что не восстанавливается — так это дескрипторы безопасности. Всем файлам и папкам будут назначены права доступа по умолчанию. Во всех остальных отношениях с отремонтированным таким образом диском вполне можно будет работать, не опасаясь, что он рухнет окончательно. Файлы, ссылающиеся на несуществующие каталоги, складываются в папку Found.xxx. Это — "долгожители", пережившие несколько циклов переформатирования, в буквальном смысле вытащенные из небытия.

Сложнее восстановить том, чья MFT сильно фрагментирована. Прежний список отрезков при форматировании был уничтожен, зеркальная копия также пострадала. Ничего другого не остается, как собирать все фрагменты руками. К счастью, на практике это оказывается не так сложно, как может показаться на первый взгляд. В отличие от всех остальных файлов диска, файл

$MFT
имеет замечательную сигнатуру file, присутствующую в начале каждой файловой записи. Поэтому все, что нам требуется сделать, сводится к следующим операциям. Последовательно сканируя раздел от первого кластера до последнего, выпишите начало и конец каждого из фрагментов, принадлежащих MFT. Затем из этой цепочки необходимо исключить файл
$MFTMirr
. Его легко узнать, так как он расположен в середине раздела и содержит копии файловых записей
$MFT
,
$MFTMirr
,
$LogFile
и
$Volume
, причем
$MFTMirr
ссылается на себя. В рассматриваемом примере наш список выглядит так:
08h
333h
,
669h
966h
,
1013
3210h
. В грубом приближении ему будет соответствовать следующий список отрезков:
12 2B 03 08 22 23 03 69 96 22 FD 21 13 10 00
. Подробная информация о кодировании и декодировании списков отрезков была приведена в гл. 6.

"В грубом приближении" сказано потому, что мы не знаем, в какой последовательности располагались эти отрезки в файле (порядок расположения фрагментов на диске далеко не всегда совпадает с порядком отрезков в списке отрезков). Что произойдет, если порядок сборки файла

$MFT
окажется нарушен? Внутри MFT все файловые записи ссылаются друг на друга по своим порядковым номерам, представляющим собой индексы массива. Эти ссылки необходимы для восстановления структуры каталогов, организации жестких ссылок (hard links) и еще некоторых служебных структур. Ссылки на родительский каталог дублируются в индексах и восстанавливаются элементарно.

Жесткие ссылки теряются безвозвратно (единственный способ восстановить их заключается в повторении попытки сборки файла

$MFT
в другом порядке). Однако они практически нигде и никак не используются, так что их потеря не столь уж существенна. По-настоящему туго приходится сильно фрагментированным файлам, занимающим несколько файловых записей, раскиданных по разным фрагментам
$MFT
. Здесь выручает только перестановка фрагментов. К счастью, количество комбинаций обычно бывает невелико, и процедура восстановления занимает совсем немного времени. Хорошая новость — начиная с NTFS версии 3.1 (соответствующей Windows XP) в MFT номера файловых записей хранятся в явном виде (четырехбайтовое поле, расположенное по смещению 2Ch от начала файловой записи), что делает задачу восстановления тривиальной.

Восстановление после тяжелых повреждений

В результате сбоя содержимое дискового тома может стать недоступным операционной системе. При попытке чтения оглавления такого тома будут выдаваться различные сообщения об ошибках (рис. 7.11). Chkdsk сообщает о повреждении MFT и прекращает работу.

Восстановление данных. Практическое руководство - img_59.jpeg

Рис. 7.11. Безуспешная попытка прочитать поврежденный том

Не паникуйте! Попробуйте запустить NT Explorer и посмотрите, что он покажет. Маловероятно, чтобы содержимое всего тома было утеряно целиком. Если хотя бы часть файловых записей уцелела, то R-Studio. GetDataBack или EasyRecovery их обязательно восстановят!

Анализ показывает, что основной причиной, по которой chkdsk отказывается проверять том, обычно становится порча файловой записи, описывающей

$MFT
. Если в процессе обновления
$MFT
внезапно отключить питание, то такой исход вполне вероятен, особенно на жестких дисках с емким аппаратным кэшем. Такие диски не успевают завершить сохранение секторов, потребляя энергию, накопленную в конденсаторах, а вот их младшие собраться с этим справляются. То же самое происходит при неудачном перемещении файла
$MFT
или физическом разрушении первого сектора MFT. Зеркальная копия
$MFT
во всех этих случаях остается цела, однако chkdsk по каким-то таинственным причинам не хочет ей пользоваться, и вы должны восстановить ее самостоятельно. Просто скопируйте первый сектор
$MFTMirr
в первый сектор
$MFT
! Поклонники утилиты Sector Inspector могут воспользоваться для этого командным файлом, приведенным в листинге 7.2.

Листинг 7.2. Командный файл для ручного восстановления $MFT из $MFTMirr, XXX — номер сектора $MFTMirr, YYY — номер сектора $MFT

SECINSPECT.EXE -backup  d: backup.dsk XXX 1

SECINSPECT.EXE -restore d: backup.dsk YYY CONFIRM

Теперь можно смело запускать chkdsk. Если же chkdsk по-прежнему не работает, это может происходить по одной из следующих причин.

□ Повреждение загрузочного сектора. Решить проблему можно, восстановив загрузочный сектор, используя методику, рассмотренную в гл. 5.

□ Несовпадение списка отрезков файла

$MFT:$DATA
с истинным началом MFT. Чтобы решить эту проблему, найдите сектор с файловой записью
$MFT
и исправьте список отрезков. Вопросы, связанные с кодированием и декодированием списка отрезков, были изложены в гл. 6, а методика исправления списка отрезков — ранее в этой главе.

□ Несовпадение размера кластера, указанного в загрузочном секторе с фактическим размером кластера. Определение истинного размера кластера и методика восстановления были рассмотрены ранее в этой главе.

Если же сбой был настолько серьезен, что вместе с

$MFT
пострадало и зеркало, задача сводится к восстановлению отформатированного диска. При тяжелых разрушениях файловой структуры, когда на диске образуется настоящий кавардак, восстановление тома полезно начинать не с чего-нибудь, а именно с его форматирования. Нет, это не первоапрельская шутка! Утилита format.exe формирует заведомо исправные ключевые структуры, а подключение файловых записей — не проблема. Главное — сохраните список отрезков файла
$MFT:$DATA
, если, конечно, он еще уцелел. Все остальное — дело техники!

53
{"b":"837815","o":1}