NTFS — ручное восстановление

Ручное восстановление файловой системы NTFS без потери данных


В этой статье покажу, как мы восстанавливаем данные с дисков, где есть повреждения файловой системы на примере NTFS.


В данном случае данные есть раздел NTFS с утерянными BOOT секторами и затертыми первыми MFT записями. Раздел не открывается в Windows. Можно, конечно, воспользоваться одной из сотни программ автоматического восстановления удаленных/утерянных данных, но это не наш метод.


Такой способ не дает гарантии того, что нашлись все данные, часто разного рода R-Studio «теряют» некоторые папки и файлы, как будто их и не было, либо добавляют в дерево восстановленных файлов много лишнего «мусора» оставшегося на диске от предыдущих установок ОС, переразбиений диска, дефрагментаций и прочей жизнедеятельности.


Запускаем Hex редактор, начинаем анализ с BOOT сектора:



   Вместо привычного NTFS boot сектора видим щепки после мышей «мусор». В этом месте чуть позже воссоздадим правильную boot структуру. Просканируем диск на предмет поиска структур NTFS, посмотрим сколько и каких нашлось MFT записей, а нашлось много интересного:



   Сразу бросается в глаза большая непрерывная цепочка с адреса 6291551– это основное тело искомой файловой системы. Однако записи с номерами от 0 до 16 либо невалидны, либо вовсе пусты. Отсеиваем файловые записи из не интересующих нас остатков других файловых систем и приступаем к анализу MFT#0 искомой:


   Ясно-понятно, диск еще и форматировали, создана новая $MFT. Размер – 64 кластера.

Значит, нужно воссоздать оригинальные записи boot и MFT#0, тогда можно будет собрать полное дерево каталогов. Также для полноценного анализа нам понадобится оригинальный файл $Bitmap (карта занятого пространства тома)– это позволит оценить качество восстановления по оценке объема занятого пространства. Зная характерные места расположения этого метафайла и его приблизительное содержимое, находим его по адресу LBA 6231879:



   Для проверки найденного файла вычисляем его размер согласно предположению, что диск использовался целиком под NTFS и использовался стандартный размер кластера: 1953520000 / 8 / (512*8) = 59616 секторов. Проверим:



  В яблочко! Здесь виден конец диска, маркированный как занятое пространство.


 Дальше дело техники: создаем новую boot структуру, вручную в редакторе записи MFT вписываем в MFT#0 вычисленную кластерную цепочку (здесь она одна, но бывает и сотня-другая), создаем для нее новый Bitmap записи. Затем можно проверить валидность полученного файла $MFT по последним записям, обычно они пустые, но с заголовком:



Всё сходится. Строим дерево каталогов по полученному файлу, занято 785 Gb:



Просто чудесно – потерь нет, дерево полностью цело. Сверяемся по объему c картой занятого пространства тома:



  Итого, не включенного в файловое дерево осталось всего 506 Мб данных. Проверим эти данные с помощью анализатора по содержимому и убедимся, что они являются индексными записями, а значит результат отличный и без потерь!


  Всё, можно сохранять все файлы из восстановленной файловой системы, проверяя параллельно содержимое файлов по известным заголовкам и сообщать клиенту о положительном результате!