Категории
Самые читаемые
Лучшие книги » Компьютеры и Интернет » Компьютерное "железо" » Восстановление данных. Практическое руководство - Крис Касперски

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

Читать онлайн Восстановление данных. Практическое руководство - Крис Касперски

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 44 45 46 47 48 49 50 51 52 ... 76
Перейти на страницу:

Восстановление удаленных файлов под 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        ; Значение, зависящее от ОС

      40 12 x 4 i_block       ; Ссылки на первые 12 блоков файла

      88      4 i_iblock      ; 1х INDIRECT BLOCK

      92      4 i_2iblock     ; 2x INDIRECT BLOCK

      96      4 i_3iblock     ; 3x INDIRECT BLOCK

     100      4 i_generation  ; Поколение файла (используется NFS)

     104      4 i_file_acl    ; Внешние атрибуты

     108      4 i_dir_acl     ; higher size

     112      4 i_faddr       ; Положение последнего фрагмента

     116     12 i_osd2        ; Структура, зависящая от ОС

Первые 12 блоков, занимаемых файлом, называются непосредственными блоками (для наглядности они выделены полужирным шрифтом). Они хранятся в массиве DIRECT BLOCKS непосредственно в теле inode. Каждый элемент массива представляет собой 32-битный номер блока. При среднем значении BLOCK_SIZE, равном 4 Кбайт, непосредственные блоки могут адресовать до 4×12 == 48 Кбайт данных. Если файл превышает этот размер, создаются один или несколько блоков косвенной адресации (INDIRECT BLOCK). Первый блок косвенной адресации (1x INDIRECT BLOCK или просто INDIRECT BLOCK) хранит ссылки на другие непосредственные блоки. Адрес этого блока хранится в поле i_indirect_block в inode. Как легко вычислить, он адресует порядка BLOCK_SIZE/sizeof(DWORD) * BLOCK_SIZE == 4096/4 *4 Мбайт данных. Если этого окажется недостаточно, создается косвенный блок двойной косвенной адресации (2х INDIRECT BLOCK или DOUBLE INDIRECT BLOCK), хранящий указатели на косвенные блоки, что позволяет адресовать (BLOCK_SIZE/sizeof(DWORD))**2* BLOCK_SIZE =4096/4 ** 4096 == 4 Гбайт данных. Если же и этого все равно недостаточно, создается блок тройной косвенной адресации (3х INDIRECT BLOCK или TRIPLE INDIRECT BLOCK), содержащий ссылки на блоки двойной косвенной адресации. Иерархия непосредственных блоков и блоков косвенной адресации показана на рис. 8.6 (блок тройной косвенной адресации не показан).

Рис. 8.6. Порядок размещения файла на диске — иерархия непосредственных и косвенных блоков (блок косвенной адресации третьего порядка не показан)

По сравнению с NTFS такая схема хранения информации о размещении устроена намного проще. Вместе с тем, она и гораздо "прожорливее". С другой стороны, ее несомненное достоинство по сравнению с NTFS состоит в том, что поскольку все ссылки хранятся в неупакованном виде, для каждого блока файла можно быстро найти соответствующий ему косвенный блок, даже если inode полностью разрушен!

Имя файла в inode не хранится. Ищите его внутри каталогов, представляющих собой массив записей, формат которого представлен в листинге 8.6.

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

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

-------- ------ --------

       0      4 inode ; Ссылка на inode

       4      2 rec_len ; Длина данной записи

       6      1 name_len ; Длина имени файла

       7      1 file_type ; Тип файла

       8    ... name ; Имя файла

При удалении файла операционная система находит соответствующую запись в каталоге, обнуляет поле inode и увеличивает размер предшествующей записи (поле rec_len) на величину удаляемой записи. Таким образом, предшествующая запись "поглощает" удаленную. Хотя имя файла в течение некоторого времени остается нетронутым, ссылка на соответствующий ему индексный дескриптор (inode) оказывается уничтоженной. Это создает проблему, так как теперь придется разбираться, какому файлу принадлежит обнаруженное имя.

В самом индексном дескрипторе при удалении файла тоже происходят большие изменения. Количество ссылок (i_links_count) обнуляется и обновляется поле последнего удаления (i_dtime). Все блоки, принадлежащие файлу, в карте свободного пространства (block bitmap) помечаются как неиспользуемые, после чего данный inode также освобождается (обновляется inode bitmap).

1 ... 44 45 46 47 48 49 50 51 52 ... 76
Перейти на страницу:
На этой странице вы можете бесплатно скачать Восстановление данных. Практическое руководство - Крис Касперски торрент бесплатно.
Комментарии