Организация ФС UNIX. Виды файлов.

Файл UNIX - это специальным образом именованный набор данных, размещённый в системе.

Виды файлов:

  • Обычный файл (regular file)
    • Пользовательские файлы
  • Каталог (directory)

  • Специальный файл устройств (special device file)
    • С большинством легально зарегистрированных устройств система работает как с файлами.
    • Вся информация файла устройства размещается в индексном дескрипторе.
  • Именованный канал (FIFO)
    • Тот же регулярный, но без возможности перемещения указателя чтения/записи.
  • Ссылка (link)
    • Файл symlink.
  • Сокет (socket)
    • Специальный бит файла, позволяющий организовывать взаимодействие процессов.

Права доступа

Категории пользователей:

  • Пользователь
  • Группа (к которой относится конкретный пользователь)
  • Все пользователи системы

Права:

  • На чтение
  • На запись
  • На исполнение

Права на доступ к каталогу:

  • Создание и чтение
  • Создание и удаление
  • Поиск (если есть полное имя, все имена, присутствующие до этого имени должны быть открыты на исполнение, поиск).

Логическая структура каталогов

Очень хотелось разобраться в этом, кстати.

  • unix - файл, по названию созвучный с названием системы. Система загружается именно этим файлом.
  • bin - каталог с исполняемыми файлами общедоступных команд unix.
  • etc - каталог с исполняемыми файлами и данными, относящимися к системе. (paswd и т.п.)
  • tmp - гарантированное сохраннение содержимого на период работы системы. (временное размещение данных программ и т.п.)
  • mnt - mount. К этому каталогу монтируются (подключаются) внешние файловые системы.
  • dev - каталог устройств, зарегистрированных в системе.
  • usr - пользовательская информация.
    • lib - библиотеки.
    • include - файлы .h (headers).
      • sys - системные заголовочные файлы.
    • bin - каталог локализованных команд (реализованных на данной установке (конфигурации системы))
    • user - домашние каталоги зарегистрированных пользователей.

Это примерная схема. Она разная от дистрибутива к дистрибутиву.

Интерпретатор команд в ищет команды директориях, указанных в переменной окружения $PATH. Обычно для этого используется hashmap. (также есть приоритетность каталогов для запуска команд). Hashmap формируется при login. Поэтому добавление новой команды “налету” не позволит её запустить интерпретатором.

Модель версии System V

Структура ФС

Суперблок - блок ФС, содержащий настройки ФС и актульное состояние ФС. (размер индексных дескрипторов и размер блоков как раз здесь)

Индексный дескриптор - специальная структура данных ФС, в которой устанавливается взаимооднозначное соответствие с каждым файлом.

Область блоков - блоки файлов находятся в этой области. Системные блоки таже содержатся здесь.

Область индексных дескрипторов - область, в которой содержатся индексные дескрипторы. (размер области индексных дескрипторов/размер индексного дескриптора = предельное количество файлов в ФС).

Структура суперблока

  • Тип файловой системы.
  • Размер файловой системы в логических блоках, включая сам суперблок, массив индексов дескрипторов (i-node) и блоки хранения данных.
  • Размер области индексных десрипторов.
  • Число свободных блоков, доступных для размещения.
  • Число свободных индексных дескрипторов, доступных для размещения.
  • Флаги (флаг модификации, флаг режима монтирования).
  • Размер логического блока (512, 1024, 2048…).
  • Массив номеров индексных дескрипторов.
  • Список номеров свободных блоков.

Работа с массивами номеров свободных блоков


Содержит все свободные блоки системы.

Положение ссылки зависит от реализации.

Работа с массивом свободных индексных дескрипторов

Массив фиксированного размера.
Элемент - номер свободного индексного дескриптора, либо код свободного места в этом массиве.

Когда удаляем файл, смотрим этот массив, ищем в нём пустое место и пешм туда индексный дескриптор, который удалился. Если свободных мест нет, мы забываем о нём.

При создании файла находим в массиве свободный индексный дескриптор.

Структура Индексного дескриптора

  • Тип файла
  • Права доступа к файлу.
  • Количество жёстких ссылок из каталогов. (кличество имён)
  • Идентификатор пользователя и группы-владельца.
  • Размер файла в байтах.
  • Время последнего доступа к файлу.
  • Время последнего изменения файла.
  • Время последнего изменения индексного дескриптора файла.
  • Адресация блоков файлов

Адресация блоков внутри файла

Модельный пример: блок 512b, ссылка на блок 4b.
- суммарный объём занимаемой памяти.

Если нужно прочесть 1-10й блок, накладных расходов нет.
Если нужно прочитать 11й блок, нужно прочесть также служебный блок.
12-й блок имеет косвенность второго порядка.
13-й элемент имеет косвенность третьего порядка.

Это база. Основа последующих файловых систем iOS, Android и т.п.

Файл-каталог


Запись - 16 байтов:

  • 2 для номера индексного дескриптора.
  • 14 для имени.

. - имя текущего каталога.
.. - имя родительского каталога.

На текущий момент 14 байтов для имени никуда не годится. Это недостаток System V.

Установление связей


Существуют симлинки. Это файлы, содержащие полный путь к другому файлу. (в примере по name3 мы получаем путь к name1)

При удалении файла удаляется его индексный дескриптор. (содержимое остаётся на диске до того момента, пока его не перезапишут.)

Вывод

Плюсы:

Недостатки:

  • Концентрация важной информации в супрблоке (риск износить диск в этом месте).
  • Проблема надёжности. (если умер суперблок, это может закончиться потерями)
  • Фрагментация файла по диску (- моторесурс HDD).
  • Ограничения на возможную длину имени файла.

Пропал суперблок. Как можно алгоритмически вернуть систему к жизни? Размер блока дан.

  • Индексный дескриптор фиксированного размера.

Модель версии FFS BSD

Fast File System

Стратегия размещения


В каждом кластере находится:

  • Копия суперблока.
  • Информация о свободных блоках (битовый массив в более поздних версиях) и о свободных индексных дескрипторов.
  • Массив индексных дескрипторов.
  • Блоки файлов.

Размещение каталога:

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

Равномерность использования блоков данных при размещении файла:

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


Ситуация выше не очень хорошая: пока мы завершаем обмен по первому блоку, диск уйдёт в другое положение => придётся ждать полного оборота, что очень дорого.
Решается проблема расположением через блок.

Внутренняя организация блоков


Во избежание фрагментации информации внутри большого блока в FFS добавили фиксированные фрагменты, равные по размеру .

  • Все блоки, за исключением последнего, полностью заняты.
  • По маске определяем, свободность фрагмента.

Выделение пространства для файла

  • Числа в полях фрагментов ссылаются на начало этих самых фрагментов.
  • В таблице показаны изменения при увеличении файла petya.txt.
  • Хвосты нескольих файлов могут храниться в одном фрагменте.

Предопределённые номера индексных дескрипторов

Зарезервированные номера ИД (на примере Ext4 Linux):
0 - несущществующий И. Д.
1 - Список повреждённых блоков.
2 - Корневой каталог.
3 - Квоты пользователей.
4 - Групповые квоты.
…
8 - Журнал.
…
11 - Первый незарезервированный ИД.

Длина имени FFS