Экспертный взгляд: Как восстановить файл на диске FAT
В этой статье мы рассмотрим алгоритм восстановления файла на диске FAT и покажем профессиональные методы восстановления данных без потерь. Если вы когда-либо сталкивались с потерей файла на диске FAT и не знали, как его восстановить, наша статья поможет вам разобраться в этом вопросе.
В первой части статьи мы рассмотрели алгоритм поиска и структуру таблицы разделов FAT. В файловой системе FAT каждому файлу и каталогу ставится в соответствие структура, называемая записью каталога. В этой структуре хранится вся базовая информация о файле включая имя файла, атрибуты, начальный адрес и длина файла.
Ищем файл в таблице FAT
Собственно содержимое файла или каталога хранится на диске в виде блоков данных фиксированной длины, называемых кластерами. Каждый кластер, в свою очередь, содержит некоторое фиксированное для каждого раздела количество физических секторов на диске. Конкретное количество секторов, содержащихся в кластере, определяется соответствующей записью в структурах файловой системы.
Самое интересное начинается в случае, если файл или каталог содержит более одного кластера. Последующие кластеры находятся при помощи структуры данных, называемой FAT. Эта структура используется с двоякой целью: для идентификации следующих кластеров в файлах и для определения того, свободен или занят данный конкретный кластер.
Рис.1 Физическая структура файловой системы FAT.
Перед тем, как начать анализ файловой системы FAT, требуется корректно идентифицировать три важных области этой системы.
- Первая область – зарезервированная, она содержит данные из категории файловой системы. В версиях FAT12 и FAT16 зарезервированная область занимает всего один сектор, но формально размер этой области определяется в загрузочном секторе.
- Вторая область – область FAT. Она содержит основные и резервные структуры файловой системе. Начало этой области – сектор, следующий за зарезервированной областью, а ее размер определяется количеством и размером структур FAT.
- Наконец, последняя область – область данных. Именно в этой области хранятся файлы и содержимое каталогов.
В процессе анализа файловой системы нас будет интересовать в первую очередь именно область FAT – именно здесь хранятся структуры, которые ставят в соответствие файлы и каталоги физическим адресам на диске, по которым хранится содержимое этих файлов.
При анализе файловой системы важно корректно идентифицировать все три физические области. Начало зарезервированной области – всегда в нулевом секторе файловой системы. Размер этой области указывается в загрузочном секторе, и для систем FAT12 и FAT16 составляет ровно один сектор. В FAT32 зарезервированная область может занимать несколько секторов.
Область FAT следует сразу за зарезервированной областью. Область FAT содержит одну или несколько структур FAT, а размер этой области вычисляется умножением количества структур FAT на размер каждой структуры. Эти значения хранятся в загрузочном секторе (зарезервированная область).
Восстановление файлов
Итак, мы вплотную подошли к вопросу о восстановлении диска FAT. Как мы помним, при удалении файла соответствующая ему запись в файловой системе помечается как удалённая, а занимаемые им кластеры, соответственно, получают статус свободных (не выделенных).
Важно отметить, что записи кластеров в FAT могут быть утеряны; соответственно, при анализе записи мы можем получить информацию о физическом адресе начала файла и об его размере. При этом какая бы то ни было информация об остальных кластерах файла отсутствует.
Итак, просто восстановить всю цепочку кластеров, принадлежащих удалённому файлу, мы не можем. Но можно попытаться восстановить содержимое файла, прочитав данные из известного начального кластера. Если файл небольшой и его содержимое умещается в единственном кластере – прекрасно. Если нет – придётся придумать, как выбрать оставшиеся кластеры. И здесь придётся повозиться.
Определить, какие именно кластеры принадлежали конкретному файлу, можно одним из двух методов. Можно просто последовательно скопировать объем данных, соответствующий размеру файла, игнорируя состояние выделения кластеров. Можно считать данные только из свободных кластеров. Логично предположить, что, действуя первым методом, мы надеемся исключительно на удачу, в то время как второй метод способен восстановить даже некоторые фрагментированные файлы.
Рис.2 Сценарии восстановления файла.
На рисунке 2 описаны три различных сценария восстановления файла на примере шести кластеров файловой системы. Размер файла – 7094 байт, а размер кластера — 2048 байт. Это означает, что для хранения данного файла изначально были выделены четыре кластера. Нам также известен адрес начального кластера файла – кластер 56. Голубым цветом обозначены кластеры, в которых хранилось содержимое удалённого файла в каждом сценарии.
- В сценарии 2.А файл занимает последовательно четыре кластера. В этом случае файл будет корректно восстановлен как первым, так и вторым методом: оба алгоритма корректно считают кластеры 56-59.
- В сценарии 2.В файл был фрагментирован и записан в виде трёх фрагментов. Кластеры 57 и 60 на момент восстановления уже выделены другому файлу. В этом сценарии первый метод точно так же, как и в предыдущем случае, восстанавливает кластеры 56-59, что приводит к очевидной ошибке: файл будет восстановлен некорректно. Второй метод корректно восстановит секторы 56, 58, 59 и 61.
- Наконец, в сценарии 2.С мы видим случай, при котором файлу выделены те же фрагменты, что и в прошлом сценарии, но кластеры 57 и 60 на момент восстановления не были заняты другим файлом. В этом сценарии оба метода ошибочно восстановят кластеры 56-59.
Как видим, второй метод даёт большую вероятность корректного восстановления файла по сравнению с первым. Именно этот метод был использован в продуктах Hetman Software.
В рассмотренных выше ситуациях подразумевается, что все фрагменты файла остаются доступными. Однако часто встречаются ситуации, в которых некоторые фрагменты оказываются перезаписанными новым содержимым. В таких случаях точно восстановить данные невозможно ни одним из описанных способов.
Заключение
Как мы увидели, файловая система FAT устроена достаточно просто, поэтому она часто используется в картах памяти CompactFlash, Memory Stick, xD-Picture Card. При этом гарантированно восстановить файл, удалённый с диска, размеченного в данной файловой системе, получается не всегда.
Для ёмких носителей (например, жёстких дисков) Windows гораздо чаще использует другую файловую систему – NTFS. Файловая система NTFS устроена значительно сложнее FAT. Восстановление удалённых файлов в NTFS – гораздо более сложный процесс, тем не менее, приводящий к более уверенным результатам. Исследование восстановления файлов в системе NTFS – тема для отдельной статьи или даже серии статей.