Недостатки файловой системы s5fs
Файловая система s5fs привлекательна благодаря своей простоте. Однако обратной стороной медали является низкая надежность и производительность.
С точки зрения надежности слабым местом этой файловой системы является суперблок. Суперблок несет основную информацию о файловой системе в целом, и при его повреждении файловая система не может использоваться. Поскольку суперблок хранится в единственном варианте, вероятность возникновения ошибок достаточна велика.
Относительно низкая производительность связана с размещением компонентов файловой системы на диске. Метаданные файлов располагаются в файловой системе, а далее следуют блоки хранения данных. При работе с файлом, происходит обращение как к его метаданным, так и к дисковым блокам, содержащим его данные. Поскольку эти блоки могут быть значительно разнесены в дисковом пространстве, необходимость постоянного перемещения головки диска увеличивает время доступа и, как следствие, уменьшает производительность файловой системы. К этому же эффекту приводит фрагментация файловой системы, поскольку отдельные блоки файла оказываются разбросанными по всему разделу диска.
Массив индексных дескрипторов имеет фиксированный размер, задаваемый при создании файловой системы. Этот размер накладывает ограничение на максимальное число файлов. Расположение границ между метаданными файлов и их данными может оказаться неоптимальным, приводящим либо к нехватке индексных дескрипторов, если хранятся файлы небольшого размера, либо к нехватке дисковых блоков для хранения файлов большого размера. Поскольку динамически изменить эту границу невозможно, всегда остается неиспользованное дисковое пространство либо в массиве метаданных, либо в блоках хранения данных.
Наконец, ограничения, накладываемые на длину имени файла (14 символов) и общее число индексных дескрипторов (65535), также являются слишком жесткими.
Эти недостатки привели к разработке новой архитектуры файловой системы, которая появилась в версии 4.2 BSD UNIX под названием Fast File System или FFS.
Файловая система BSD UNIX
Файловая система FFS, обладая полной функциональностью системы s5fs, использует также структуры данных ядра. Основные изменения затронули расположение файловой системы на диске, дисковые структуры данных и алгоритмы размещения свободных блоков. Как и в случае s5fs, суперблок содержит общее описание файловой системы и располагаются в начале раздела. Но в суперблоке не хранятся данные о свободном пространстве файловой системы, такие как число свободных блоков и свободных метаданных. Поэтому данные суперблока остаются неизменными на протяжении всего времени существования файловой системы. Суперблок дублируется для повышения надежности работы файловой системы.
Файловая система логически делит дисковый раздел на одну или несколько групп цилиндров группа цилиндров представляет собой несколько последовательных дисковых цилиндров. Каждая группа цилиндров содержит управляющую информацию, включающую резервную копию суперблока, массив индексных дескрипторов, данные о свободных блоках и информацию об использовании дисковых блоков в группе.
Для каждой группы цилиндров выделяется место под определенное количество индексных дескрипторов. Обычно на каждые 2 Кбайта блоков хранения данных создается один массив индексных дескрипторов. Поскольку размеры группы цилиндров и массива индексных дескрипторов фиксированы но в файловой системе присутствуют ограничения, аналогичные s5fs.
Идея такой файловой структуры заключается в создании кластеров индексных дескрипторов, распределенных по всему разделу, вместо того, чтобы группировать все индексные дескрипторы в начале раздела.
Тем самым уменьшается время доступа к данным конкретного файла, поскольку блоки данных располагаются ближе к адресующим их дескрипторов. Такой подход также повышает надежность файловой системы, уменьшая вероятность потери всех индексных дескрипторов в результате сбоя.
Управляющая информация располагается с различным смещением от начала группы цилиндров. В противном случае, например, при размещении в начале группы цилиндров, информация всех групп оказалась бы физически расположенной на одной пластине диска и могла бы быть уничтожена при выходе из строя этой пластины. Это смещение выбирается равным одному сектору относительно предыдущей группы, таким образом, для соседних групп управляющая информация начинается на различных пластинах диска. В этом случае потеря одного сектора, цилиндра или пластины не приведет к потере всех копий суперблоков.
Производительность файловой системы существенным образом зависит от размера блока хранения данных. Чем больше размер блока, тем больше количество данных может быть прочитано без поиска и перемещения дисковой головки. Файловая система FFS поддерживает размер блока до 64 Кбайт. Проблема заключается в том, что типичная файловая система UNIX состоит из значительного числа файлов небольшого размера. Это приводит к тому, что частично занятые блоки используются неэффективно, что может принести к потере до 60% полезной емкости диска.
Этот недостаток был преодолен с помощью возможности фрагментации блока. Каждый блок может быть разбит на два, четыре или восемь фрагментов.
В то время как блок является единицей передачи данных в операциях ввода/вывода, фрагмент определяет адресную единицу хранения данных на диске.
Размер фрагмента задается при создании файловой системы, его максимальное значение определяется размером блока (0,5 размера блока), а минимальный – сектором.
Информация о свободном пространстве в группе хранится не в виде списка свободных блоков, а в виде битовой карты блоков. Карта блоков, связанная с определенной группой цилиндров, описывает свободное пространство в фрагментах, для определения того, свободен данный блок или нет, ядро анализирует биты фрагментов, составляющих блок.