Индексирование дескрипторов

Индексные дескрипторы файлов данной группы блоков хранятся в логических блоках, расположенных следом за битовой картой индексных дескрипторов. В одном 4-килобайтном логическом блоке помещается 32 таких записи. Таким образом, 16416 индексных дескрипторов, приходящихся на одну группу (см. листинг 8), займут подряд 513 логических блоков. Такой расчет справедлив для файловой системы EXT2FS, однако, если на логическом разделе смонтирована файловая система EXT3FS, информация, выводимая отладчиком debugfs, будет неверна. В журнализируемой файловой системе EXT3FS между битовой картой inode и таблицей индексных дескрипторов размещается журнал транзакций, под который обычно отводится 8192 блока. Таким образом, в первой группе блоков таблица индексных дескрипторов будет начинаться не с 4-го, а с 8195-го логического блока.

Индексный дескриптор файла имеет объем 128 байт и следующее строение:

Таблица 4 Структура индексного дескриптора файла

Размер поля в байтах

Смещение байт

Описание

2

0

Тип файла и права доступа к нему

2

2h

Идентификатор владельца файла UID

4

4h

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

4

8h

Время последнего обращения к файлу

4

Ch

Время создания файла.

4

10h

Время последней модификации файла

4

14h

Время удаления файла

2

18h

Идентификатор группы GID

2

1Ah

Счетчик числа связей («жестких» ссылок на файл)

4

1Ch

Число секторов по 512 байт, занимаемых файлом

4

20h

Флаги файла

4

24h

Зарезервировано для ОС

15x4

28h

Указатели на блоки, в которых содержатся данные файла

4

64h

Версия файла (для NFS)

4

68h

ACL файла

4

6Ch

ACL каталога

4

70h

Адрес фрагмента

1

74h

Номер фрагмента

1

75h

Размер фрагмента

2

76h

Заполнение

4x2

78h

Зарезервировано

Таблицу индексных дескрипторов можно вывести поблочно с помощью команды lde -b block_numder device. Произвольно взятый фрагмент из двух индексных дескрипторов представлен для анализа в листинге 11. Размер каждого из inode составляет 128 байт, следовательно, интервал между ними -80h и их начала выровнены по смещению 80h.

0х02003А00

ED

41

00

00

00

10

00

00

DC

09

69

40

ОС

96

59

40

0х02003А10

ОС

96

59

40

00

00

00

00

00

00

02

00

08

00

00

00

0х02003А20

00

00

00

00

00

00

00

00

IB

82

06

00

00

00

00

00

0х02003А30

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

0х02003А40

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

0х02003А50

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

0х02003Аб0

00

00

00

00

79

17

Е5

00

00

00

00

00

00

00

00

0х02003А70

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

0х02003А80

А4

81

00

00

37

00

00

00

96

59

40

ОС

96

59

40

0х02003А90

12

А8

ЗЕ

00

00

00

00

00

00

01

00

08

00

00

00

0х02003АА0

00

00

00

00

00

00

00

00

82

06

00

00

00

00

00

0х02003АВ0

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

0х02003АС0

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

0x02003AD0

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

.А i. .Y@

¦ -Y@

У

7 Y@. .Y@

.n.>

Листинг 11. Фрагмент таблицы индексных дескрипторов

Индексный дескриптор определяет порядок доступа к конкретному файлу, поэтому, модифицируя эту запись, можно манипулировать файлом как угодно. Не обязательно редактировать inode прямо в таблице индексных дескрипторов -нужную запись нелегко идентифицировать с номером inode, и для этого удобнее использовать одну из команд отладчика debugfs.