Восстановление данных. Практическое руководство, стр. 58
Листинг 8.4. Структура дискового тома, размеченного под ext2fs
смещение размер описание-------- ------ -------- 0 1 boot record ; Загрузочный сектор<b> -- block group 0 -- ; Группа блоков 0</b>(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 ; Блоки данных ; (файлы, каталоги)<b> -- block group 1 -- ; Группа блоков 1</b> 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 ; Блоки данных ; (файлы, каталоги)<b> -- block group 2 -- ; Группа блоков 2</b> 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 ; Значение, зависящее от ОС<b> 40 12 x 4 i_block ; Ссылки на первые 12 блоков файла</b> 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 BLOCKSBLOCK_SIZE4×12 == 48INDIRECT BLOCK1x INDIRECT BLOCKINDIRECT BLOCKi_indirect_blockBLOCK_SIZE/sizeof(DWORD) * BLOCK_SIZE == 4096/4 *4 2х INDIRECT BLOCKDOUBLE INDIRECT BLOCKBLOCK_SIZE/sizeof(DWORD))**2* BLOCK_SIZE =4096/4 ** 4096 == 43х INDIRECT BLOCKTRIPLE INDIRECT BLOCK