Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #82, ОКТЯБРЬ 2005 г.

Второе рождение удаленных файлов

Крис Касперски ака мыщъх

Хакер, номер #082, стр. 082-098-1


Восстанавливаем данные в Linux

Для восстановления удаленных файлов существует множество готовых утилит, но далеко не все (и не всегда) из них работают, как ожидается. Намного надежнее (и интереснее) восстанавливать данные вручную. Сейчас мы погрузимся в мир файловой системы ext2fs и посмотрим, какие шестеренки приводят ее в движение.

[введение]

Почему гибнут файлы? Карма у них такая. А если серьезно, то существуют тысячи причин — от вирусов до ошибок человеческого фактора. Основным способом общения с пользователям в Linux остается командная строка, легко удаляющая все без разбора. Стоит только отдать слегка неверный приказ и... Куда это подевались все мои файлы? В MS-DOS существовала замечательная утилита undelete, регулярно вытаскивающая из небытия многие мегабайты данных. В популярной оболочке Midnight Commander так же имеется похожая команда. К сожалению, она срабатывает не всегда (или обнаруживает не все файлы), и тогда приходится прибегать к ручному восстановлению. Не волнуйся! Это намного проще, чем может показаться на неискушенный взгляд!

[структура файловой системы]

В противовес Windows NT, поддерживающей только NTFS и FAT, операционные системы семейства Linux предлагают довольно широкий ассортимент файловых систем на любой вкус: ext2fs, ext3fs, reiserfs, xfs, jfs. При внешней схожести "потребительских" возможностях, их "физическое" устройство сильно отличается, и каждая из них требует своей техники восстановления. В рамках одной-единственной статьи поднять эту глыбу нереально, поэтому мы решили остановиться на ext2fs/ext3fs, как на самой популярной файловой системе, устанавливаемой по умолчанию в большинстве Linux-дистрибутивов.

Фактически, ext3fs - это ext2fs с поддержкой журналирования. Отличия базовых структур минимальны, но вот процесс удаления файлов в них протекает по-разному. В ext2fs при удалении файла теряется его имя (хотя и не затирается до поры до времени), поэтому автоматическое восстановление имен в ней невозможно, зато само содержимое файла остается нетронутым. Ext3fs поступает с точностью до наоборот — сохраняет имя файла, но частично уничтожает схему его размещения на диске, в результате чего техника восстановления колоссально усложняется. К тому же ext3fs намного менее производительна, так что для домашних компьютеров лучше всего использовать ext2fs. Как она устроена?

В начале раздела расположен boot-сектор, за ним, по смещению 1024 байта, находится супер-блок (super-block), отвечающий за хранение ключевой информации о структуре файловой системы (в ext2fs/ext3fs он играет точно такую же роль, что и boot-сектор в FAT и NTFS). В нем много различных полей, но нас будет интересовать лишь одно: s_log_block_size. Это 32-разрядное поле, расположенное по смещению 18h байт от начала супер-блока. Как и следует из его названия, оно определяет размер одного блока или, в терминологии MS-DOS/Windows, кластера. Размер задается в виде показателя степени, на которую сдвигается размер одного сектора, равный 200h (512 байт). В переводе на язык программиста это звучит так: block_size = 200h

Содержание  Вперед на стр. 082-098-2