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

ЖАНРЫ

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

Листинг 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 Кбайт, непосредственные блоки могут адресовать до
4x12 == 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
).

Техника восстановления удаленных файлов

В ext2fs полное восстановление файлов невозможно, даже если эти файлы были только что удалены. В этом отношении данная файловая система проигрывает как FAT, так и NTFS. Как минимум, теряется имя файла. Точнее говоря, теряется связь имен файлов с их содержимым. При удалении небольшого количества хорошо известных файлов эта проблема остается решаемой. Однако ситуация серьезно осложняется, если вы удалили несколько служебных подкаталогов, в которых никогда ранее не заглядывали.

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