Каталог ExtX практически ничем не отличается от обычного файла, если не считать установки специального значения типа в индексном узле. В блоках, выделенных каталогам, содержится список структур данных, называемых записями каталогов. Запись каталога представляет собой простую структуру данных с именем файла и адресом индексного узла, в котором хранятся метаданные файла. Размер каталога соответствует количеству выделенных блоков и не связан с количеством реально существующих файлов.

Каждый каталог начинается с записей «.» и «..», обозначающих текущий и родительский каталог соответственно. За ними следуют записи всех файлов и подкаталогов в данном каталоге. Корневой каталог всегда размещается в индексном узле 2.

Запись каталога имеет динамическую длину, потому что файл может обладать именем произвольной длины, от 1 до 255 символов. По этой причине в структуре данных присутствует поле, определяющее длину имени и местонахождение следующей записи каталога. Длина записей округляется до числа, кратного 4. На рис. 14.6 изображен каталог с тремя файлами. Первые две записи предназначены для каталогов «.» и «..», а последняя запись ссылается на конец выделенного блока. Пространство за файлом c.txt не используется.

При удалении файла или каталога его имя требуется модифицировать, чтобы ОС не пыталась выводить информацию об этом файле. ОС скрывает запись каталога, увеличивая длину предыдущей записи, чтобы она ссылалась на запись после скрываемой. Так, на рис. 14.6(B) файл b.txt был удален, а указатель в a.txt был увеличен и переведен на c.txt. При выводе содержимого каталога запись b.txt пропускается, но данные в ней еще существуют.

При создании новой записи ОС анализирует каждую существующую запись и сравнивает ее длину с длиной имени. Кроме имени, каждая запись каталога содержит 8 байт в статических полях, поэтому минимальная длина записи определяется увеличением длины имени на 8 и округлением результата до величины, кратной 4. Если зарезервированная длина записи превышает необходимую на величину, превышающую размер добавляемой записи, запись размещается в неиспользуемом пространстве. Для примера рассмотрим новый каталог с 4096-байтовым блоком, содержащим записи «.» и «..». Параметры этих записей перечислены в табл. 14.1.

Рис. 14.6. В записи каталога хранится имя файла и индексный узел. Кроме того, в записи присутствует ссылка на следующую запись. Чтобы пропустить неиспользуемую запись, достаточно увеличить указатель в предыдущей записи

Таблица 14.1. Параметры записей только что созданного каталога

Имя

Длина имени

Длина записи

1

12

2

4084

Последняя запись «..» обладает длиной 4084 байта, потому что она должна указывать на конец блока, хотя реально требуется всего 12 байт. Следовательно, новая запись каталога будет добавлена со смещением 12 байт от начала записи «..», а ее длина выбирается так, чтобы она ссылалась на конец блока. Параметры записей каталога после создания нового файла приведены в табл. 14.2.

Таблица 14.2. Параметры записей после создания нового файла

Имя

Длина имени

Длина записи

1

12

2

12

Filel.dat

8

4072

В действительности существует две версии структур записей каталогов. В старой версии хранится только имя, адрес индексного узла и длина. В обновленной версии один из байтов поля длины имени файла используется для хранения типа файла (файл, каталог, символьное устройство). Позднее мы увидим, как это обстоятельство может использоваться для выявления факта повторного выделения индексного узла после удаления файла. Описания структур данных обоих типов записей каталогов приведены в следующей главе.

Далее приводится результат выполнения fis для одного из каталогов тестового образа. В выходных данных присутствует один удаленный файл (он помечен префиксом *). В первом столбце отображается тип файла - сначала по данным из записи каталога, затем по данным из индексного узла. Обратите внимание на совпадение этих типов у удаленного файла; возможно, индексный узел еще не был выделен повторно:

# fis -f linux-ext3 -a ext3.dd 69457 d/d 69457: d/d 53248:

г/г 69458: acbdefg.txt

г/г * 69459: file two.dat

d/d 69460: subdirl

r/r 69461: RSTUVWXY

Выделение индексных узлов | Криминалистический анализ файловых систем | Ссылки и точки монтирования


Криминалистический анализ файловых систем



Новости за месяц

  • Март
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс