Чтение онлайн

ЖАНРЫ

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

Касперски Крис

Шрифт:

Доступность исходных текстов драйвера файловой системы значительно упрощает исследование ее внутренней структуры, которая, кстати говоря, очень проста. Поэтому восстановление данных на разделах ext2fs/ext3fs — задача тривиальная. Файловые системы UFS и FFS, работающие под FreeBSD, устроены намного сложнее, к тому же достаточно скудно документированы. А ведь FreeBSD занимает далеко не последнее место в мире UNIX-совместимых операционных систем, и разрушения данных даже в масштабах небольшого городка происходят сплошь и рядом. К счастью, в подавляющем большинстве случаев информацию можно полностью восстановить.

Подготовка к восстановлению

В первую очередь, обязательно размонтируйте дисковый

раздел, или, на худой конец, перемонтируйте его в режим "только на чтение". Лечение активных разделов зачастую только увеличивает масштабы разрушений. Если восстанавливаемые файлы находятся на основном системном разделе, у нас два пути — загрузиться с LiveCD или подключить восстанавливаемый жесткий диск на Linux-машину вторым.

Чтобы случайно что-нибудь не испортить, никогда не редактируйте диск напрямую. Работайте с его копией! Копию можно создать командой

cp /dev/sdb1 my_dump
, где
sdb1
— имя устройства, a
my_dump
— имя файла-дампа. Файл-дамп можно разместить на любом свободном разделе или скопировать на другую машину по сети. Все дисковые утилиты (lde, debugfs, fschk) не заметят подвоха и будут работать с ним как с "настоящим" разделом. При необходимости его даже можно смонтировать на файловую систему:
mount my_dump mount_point -о loop
, чтобы убедиться, что восстановление прошло успешно. Команда
cp my_dump /dev/sdb1
копирует восстановленный файл-дамп обратно в раздел, хотя делать это совсем необязательно. Проще (и безопаснее) копировать только восстанавливаемые файлы.

Восстановление удаленных файлов под ext2fs

Файловая система ext2fs все еще остается базовой файловой системой для многих клонов Linux, поэтому рассмотрим ее первой. Концепции, которые она исповедует, во многом схожи с NTFS, так что культурного шока при переходе с NTFS на ext2fs вы не испытаете. Подробное описание структуры хранения данных ищите в документе "Design and Implementation of the Second Extended Filesystem" (см. список рекомендованной литературы и ресурсов Интернета в данном разделе), а также книге Эндрю Таненбаума "Operating Systems: Design and Implementation", электронную версию которой можно раздобыть в e-Mule. Исходные тексты дисковых утилит (драйвер файловой системы, lde, debugfs) также не помешают.

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

В начале диска расположен загрузочный сектор, который на незагрузочных разделах может быть пустым. За ним по смещению 1024 байта от начала первого сектора лежит суперблок (super-block), содержащий ключевую информацию о структуре файловой системы. В FAT и NTFS эта информация хранится непосредственно в загрузочном секторе. В первую очередь нас будет интересовать 32-разрядное поле

s_log_block_size
, расположенное по смещению
18h
байт от начала суперблока. Здесь хранится размер одного блока (block) или, в терминологии MS-DOS/Windows, кластера, выраженный в виде указателя позиции, на которую нужно сдвинуть число
200h
. В естественных единицах это будет звучать так:
block_size == 200h << s_log_block_size
(байт). То есть если
s_log_block_size
равен нулю, размер одного блока составляет
400h
байт или два стандартных сектора. Структура дискового тома, отформатированного под ext2fs, показана в листинге 8.4.

Листинг 8.4. Структура дискового тома, размеченного под ext2fs

смещение размер описание

– ------- ------ --------

0 1 boot record ;
Загрузочный сектор

– - block group 0 -- ; Группа блоков 0

(1024 bytes) 1 superblock ; Суперблок

2 1 group descriptors ; Дескриптор группы

3 1 block bitmap ; Карта свободных блоков

4 1 inode bitmap ; Карта свободных inode

5 214 inode table ; Массив inode

; (сведения о файлах)

219 7974 data blocks ; Блоки данных

; (файлы, каталоги)

– - block group 1 -- ; Группа блоков 1

8193 1 superblock backup ; Копия суперблока

8194 1 group descriptors backup ; Копия дескриптора группы

8195 1 block bitmap ; Карта свободных блоков

8196 1 inode bitmap ; Карта свободных inode

8197 214 inode table ; Массив inode

; (сведения о файлах)

8408 7974 data blocks ; Блоки данных

; (файлы, каталоги)

– - block group 2 -- ; Группа блоков 2

16385 1 block bitmap ; Карта свободных блоков

16386 1 inode bitmap ; Карта свободных inode

16387 214 inode table ; Массив inode

; (сведения о файлах)

16601 3879 data blocks ; Блоки данных

; (файлы, каталоги)

Вслед за суперблоком идут дескрипторы групп (group descriptors) и карты свободного пространства (block bitmap/inode bitmaps которые не имеют большого практического значения для наших целей. Что же касается таблицы inode, расположенной за ними, то она заслуживает более подробного рассмотрения. В ext2fs (как и многих других файловых системах из мира UNIX), так называемый индексный дескриптор (inode) играет ту же самую роль, что и файловая запись в NTFS. Здесь сосредоточена вся информация о файле: тип файла (обычный файл, каталог, символьная ссылка и т.д.), его логический и физический размер, схема размещения на диске, время создания, модификации, последнего доступа или удаления, права доступа, а также ссылки на файл. Формат представления inode описан в листинге 8.5.

Листинг 8.5. Формат представления inode

смещение размер описание

– ------- ------ --------

0 2 i_mode ; Формат представления

2 2 i_uid ; Uid пользователя

4 4 i_size ; Размер файла в байтах

8 4 i_atime ; Время последнего доступа к файлу

12 4 i_ctime ; Время создания файла

16 4 i_mtime ; Время модификации файла

20 4 i_dtime ; Время удаления файла

24 2 i_gid ; Gid группы

26 2 i_links_count ; Количество ссылок на файл (0 — файл удален)

28 4 i_blocks ; Количество блоков, принадлежащих файлу

32 4 i_flags ; Различные флаги

36 4 i_osdl ; Значение, зависящее от ОС

Поделиться с друзьями: