Восстановление NTFS раздела

Даже с великими гуру случаются неприятности такого рода. От них не застрахован никто. Я попытаюсь рассказать, как можно восстановить данные в подобной ситуации. Ведь, скорее всего, данные никуда не делись, как были, так и остались на диске. Просто повреждена служебная область раздела. Поэтому попытаемся разобраться, как она устроена, а поняв, выработаем алгоритм действий.

Информация о структуре NTFS довольно скудна, и, вследствии закрытости основных спецификаций на нее, получена так называемым методом reverse engineering. Как и другие файловые системы, NTFS делит поверхность диска на кластеры. Размер кластеров имеет фиксированный размер, выбираемый из интервала от 512 байт (1 сектор) до 64 Кб (128 секторов). Обычно используется размер кластера в 4 Кб (8 секторов). Каждый элемент файловой системы, включая служебные (которые принято называть метафайлами), представляет из себя файл. Метафайлы находятся в корневом каталоге NTFS раздела и начинаются с символа имени "$", Основной служебный файл - $MFT (Master File Table) - список абсолютно всех файлов, хранящихся в разделе, включая MFT. Вновь отформатированный раздел NTFS выглядит следующим образом:

Место под файл $MFT

Место под содержимое файлов

Boot файл $MFT зарезервированное
место для файла
 $MFT
остальные метафайлы свободно

Место под MFT файл выделяется сразу и с большим запасом, обычно 12,5% (но может быть и 25%, 37,5% и 50%) от объема раздела. Оставшееся место предназначено для хранения содержимого файлов. Однако ОС, при необходимости, может сокращать место, выделенное для MFT файла, когда место под содержимое файлов заполнено. Для этого, в текущих версиях NTFS, оставшееся свободное место, выделенное под MFT файл, уменьшается вдвое, тем самым, увеличивая место, отведенное для размещения содержимого файлов. И когда ОС информирует о свободном месте, то это сумма свободного места в обеих частях раздела (зарезервированное под MFT файл и выделенное под хранение содержимого файлов). Но файлы не только добавляются в раздел, но и удаляются из него. И в этом случае возможно вновь увеличение места, отводимого под MFT файл. При этом в служебной области может оказаться содержимое файлов, которое там и останется. MFT файл начнет фрагментироваться, хотя это и не есть good. Еще раз повторюсь, сказанное относится к вновь отформатированному разделу. Когда я при помощи программы Partition Magic добавил неразмеченное пространство перед NTFS разделом к NTFS разделу (F:), то MFT у меня начинается с 1731201 кластера, хотя обычное значение - 4.

Сам MFT поделен на записи фиксированного размера по 1 Кб (2 сектора) каждая. Первые 24 записи - это служебные файлы, причем первым в списке идет сам MFT. Ввиду особой важности MFT файла, копия первых четырех записей хранится в файле $MFTMirr где-то в районе середины раздела. Также в последнем секторе раздела (для Win'2k/XP) хранится резервная копия boot сектора. Таким образом, для восстановления раздела необходимо найти и скопировать в начало раздела 4 первые записи MFT из резервной копии и, возможно, сам загрузочный сектор. 

Для работы нам потребуется любой дисковый редактор. Главное, чтоб он мог видеть все пространство твоего диска. Можно воспользоваться DiskEdit от дяди Нортона из пакета Norton Utilities 2002 или штатным дисковым редактором Win'2k - Disk Probe, для чего нужно с дистрибутива Windows из папки Support\Tools установить дополнительные инструменты, в том числе и Disk Probe. Также потребуется программа PartitionInfo из пакета Partition Magic. Для начала, выясним физические границы требуемого NTFS раздела. Это можно сделать при помощи программы PartitionInfo из пакета Partition Magic.

В моем случае раздел NTFS начинается с 5060538 сектора диска. (также в нижнем окне доступна информация в формате C:H:S) Теперь получим информацию о номере последнего сектора и о расположении MFT и ее копии, для чего нажимаем кнопку Boot Record…

Итак, последний сектор раздела это 5060538 + 3341456 = 8401994 (первый сектор раздела + Total NTFS Sectors), MFT начинается с 8х4=32 сектора (MFT start cluster * Sectors per cluster), MFT Mirr - c 417682 х 4=1670728 сектора (MFT Mirror start cluster * Sectors per cluster). Уточним размер отдельной записи в MFT файле, для чего запустив программу Partition Magic, выбрав требуемый раздел, нажав правую кнопку мыши, выберем пункт Properties  В появившемся окне выберем вкладку NTFS Info. Как и должно быть, размер записи в MFT файле (File Record Size) составляет 1 Кб (2 сектора).

Запускаем дисковый редактор, например Disk Probe, и выбираем пункты меню <Drives> - <Logical Volume>. В появившемся окне дважды щелкаем мышкой по требуемому разделу (в моем случае это G), нажимаем последовательно кнопки Set Active и OK. Теперь переходим на сектор, содержащий копию MFT. Для этого выбираем пункт меню <Sectors> - <Read> и в открывшемся окне вводим номер сектора 1670728 и число требуемых секторов (16) и нажимаем кнопку Read. Теперь перепишем эти сектора по месту расположения MFT, с 32 сектора. Для этого выбираем пункт меню <Sectors> - <Write>. Отвечаем утвердительно на вопрос изменения режима работы с Read Only на Read/Write, в появившемся окне указываем сектор, с которого надо осуществить запись (в нашем случае это 32) и нажимаем кнопку Write it. Подтверждаем свое желание еще раз и MFT восстановлена. 

Теперь необходимо скопировать на свое место загрузочный сектор. Для этого выбираем пункт меню <Drives> - <Physical Drive…> после чего устанавливаем активным требуемый физический диск. Это аналогично тому, что мы осуществили для логического диска. Теперь надо перейти на последний сектор восстанавливаемого раздела. Через меню <Sectors> - <Read> вводим значение 8401994 после чего записываем это значение в сектор 5060538. Будьте особенно внимательны, поскольку вы работаете с целым диском и не ограничены границами поврежденного раздела! 

Осталось запустить утилиту chkdsk e: /f, которая найдет и исправит просто огромное количество ошибок, после чего поздравить себя со спасенным разделом.

PS: Поскольку все операции потенциально опасны, не поленись сделать резервную копию разделов, находящихся на том же физическом диске, что и восстанавливаемый раздел.


Источник статьи