Литмир - Электронная Библиотека
Содержание  
A
A

Листинг 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 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 (блок тройной косвенной адресации не показан).

58
{"b":"837815","o":1}