Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PRILOZhYeNIYe_2.doc
Скачиваний:
11
Добавлен:
10.07.2019
Размер:
337.92 Кб
Скачать

Формат директорий

В ext3 директория представляет собой фиксированный список сопоставлений индексного дескриптора файла и его имени. Структура записи в директории показана в табл. П.2.11.

Таблица П.2.11

Структура записи в директории в ext3

Размер, байт

Поле

4

Индексный дескриптор

2

Длина записи

2

Длина имени файла

255

Имя файла

В ext4 структура записи в директории претерпела небольшие изменения, что показано в табл. П.2.12.

Таблица П.2.12

Структура записи в директории в ext4

Размер, байт

Поле

4

Индексный дескриптор

2

Длина записи

1

Длина имени файла

1

Тип файла

255

Имя файла

Типы файлов: 0 – неизвестный, 1 – обычный, 2 – каталог, 3 – файл символьного устройства, 4 – файл блочного устройства, 5 – именованный канал, 6 – сокет, 7 – символическая ссылка.

В ext4 для превышения лимита в 32 000 подкаталогов введено индексирование директорий. Если установлен соответствующий флаг файловой системы, записи в директориях хэшируются. Неиндексированная директория занимает минимум 1 блок. Минимальный размер индексированной директории должен составлять 3 блока. 0-й блок при этом становится корнем дерева, остальные становятся «листьями».

Блоки-«листья» представляют собой традиционный список имен файлов и индексных дескрипторов. Поэтому, если корень дерева окажется поврежденным, можно будет отыскать файлы, используя традиционную схему. Корень дерева содержит хэш-функции блоков-«листьев», каждый такой хэш представляет последовательность записей директории. Хэш в ext4 может быть как 32-битным, так и 64-битным. Для обеспечения совместимости с файловыми системами, не использующими индексирование, первые 8 байтов корня дерева содержат указание на следующий блок директории, т. е. ядро, не поддерживающее индексирование, будет игнорировать набор хэш-функций как удаленные из директории файлы.

Хэш-версии (алгоритмы хэширования) определяются в суперблоке файловой системы и могут принимать следующие значения: 0 – LEGACY, 1 – HALF MD4, 2 – TEA, 3 – LEGACY UNSIGNED, 4 – HALF MD4 UNSIGNED, 5 – TEA UNSIGNED.

Для хэширования используется так называемое «зерно» – некоторое инициализирующее значение, которое также определено в соответствующем поле суперблока. Если зерно содержит нули по какой-то причине, используется зерно по умолчанию [15].

Реализация Н-дерева сейчас ограничена 510 – 511 4-килобайтными блоками-«листьями»: именно такое количество может быть проиндексировано 2-уровневым деревом (дерево должно иметь постоянную глубину). Возможно, в будущем количество уровней увеличат до 3. Также в директориях существует ограничение на размер файла в 2 Гб, потому что размер поля i_size в директории ограничен 32 битами [17].

Предполагается целиком помещать индексный дескриптор директории в саму директорию для ускорения чтения-записи при обращении к функции readdir. Также предполагается при динамическом выделении индексных дескрипторов использовать директории как контейнер для таблицы индексных дескрипторов. Для файлов, имеющих жесткие ссылки в других директориях, проблему решает счетчик числа связей в индексном дескрипторе.

Также разработчики предлагают хранить одно или несколько имен файлов в самом индексном дескрипторе в поле расширенных атрибутов файла. Имя должно хранить номер индексного дескриптора директории, к которой файл принадлежит [16].

Удаление файла из директории в англоязычной литературе носит название unlink, то есть удаление ссылки. На самом деле при удалении файла в предыдущей записи директории модифицируется поле «длина записи», которое может указывать на конец директории или на следующую запись. Сам индексный дескриптор и имя файла остаются в директории и могут быть прочитаны, что используется некоторыми программами по восстановлению файлов [17].

При чтении директорий с диска игнорируются ошибки ввода/вывода, чтобы у пользователей была возможность восстановить часть данных, если в директории есть сбойные сектора [18].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]