UFS (Unix File System)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:02, 17 декабря 2016.
UFS
Полное название UNIX file system
Содержимое каталога table
Limits
Макс. размер тома 273 байт (8 Збайт)
Макс. размер файла 273 байт (8 Збайт)
Макс. длина имени файла 255 байт
Другие
Операционная система A/UX, DragonFlyBSD, FreeBSD, FreeNAS, NAS4Free, HP-UX, NetBSD, Linux, OpenBSD, Solaris, SunOS, Tru64 UNIX, UNIX System V, and others

UFC (Unix File System), так же называемая Berkeley Fast File System или BSD Fast File System (BSD FFS) - файловая система, созданная исследовательской группой в Калифорнийском университете в Беркли CSRG для ранних операционных систем семейства BSD и получившая развитие в их потомках: FreeBSD, OpenBSD и т.д. Файл в UFS представляет собой структуру блоков данных на диске, имеющую уникальный индексный дескриптор (i-node) и набор атрибутов (метаинформацию).

Хотя вообще говоря, UFS расшифровывается просто как файловая система Unix (Unix File System). И под этим именем известны и файловые системы других ОС этого семейства, отнюдь не идентичные UFS из FreeBSD. Так что некоторая неопределенность терминологии имеет место быть

Поддержка данной файловой системы имеется также в ядре Linux и операционной системе Solaris.

Файловая система UFS содержит четыре основных компонента с управляющей информацией: загрузочный блок, суперблок, таблицу индексных дескрипторов (i-node table) и каталоги. Кроме этого, в Solaris (начиная с версии 2.52, с 1995 года) в файловой системе хранятся списки управления доступом (ACL). Хранение списков ACL обеспечивают так называемые теневые индексные дескрипторы (shadow inodes).

Рис.1 Структура UFC

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

Классическая UFS Отводит на файл 16 байт - 14-буквенное имя файла и двухбайтный номер inode; современые UFS позволяют создавать длинные имена (до 255 символов), а имена файлов хранят не подряд, а более разумно - в двоичном дереве или hash-таблице, а номер inode может быть любым - четырехбайтным или восьмибайтным.

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

Устройство UFC

Рис. 2 Иерархия каталогов UFS

Файловая система состоит из:

  • Загрузочной области
  • Суперблока - участок, содержащий описание файловой системы и данные о ее настройках
  • Описания групп "цилиндров". Цилиндр - отдельная от остальных область на жестком диске, содержащая некоторое количество вложенных файлов. Группа цилиндров представляет собой несколько последовательных дисковых цилиндров. Каждая группа цилиндров содержит в себе управляющую информацию:
    • Резервную копию суперблока
    • Массив inode
    • Данные о свободных блоках и итоговую информацию об использовании дисковых блоков в группе
    • Некоторое количество блоков данных

Файловая система UFS обладает следующими особенностями:

Флаги состояния. Показывают состояние файловой системы как чистое, стабильное, активное или неизвестное. Наличие флагов состояния исключает проведение дополнительных (излишних) проверок файловой системы. Если файловая система чистая или стабильная, то утилита проверки файловой системы под названием fsck (file system check) не запускается при загрузке системы.

EFT (Extended Fundamental Types - расширенные фундаментальные типы). В их число входят 32-разрядные идентификатор пользователя UID, идентификатор группы GID и номера устройств.

Большие файловые системы. Файловая система UFS может иметь размер до I Тбайт и содержать стандартные файлы размером до 2 Гбайт. По умолчанию системное программное обеспечение Solaris не поддерживает расслоение дисков, которое требуется для формирования логических частей диска, достаточно больших для файловой системы размером в 1 Тбайт. Эту возможность предоставляют необязательные пакеты программного обеспечения, такие как Solstice DiskSuite.

Необходимость в создании (или в пересоздании) файловой системы UFS возникает только в тех случаях, когда вы выполняете одну из следующих операций:

  • Добавляете или заменяете диски
  • Заменяете части существующего диска
  • Выполняете полное восстановление файловой системы
  • Изменяете параметры файловой системы, такие как размер блока или размер свободного пространства При создании файловой системы UFS дисковая часть делится на группы цилиндров. Затем упомянутая часть делится на блоки для контроля и организации структуры файлов внутри данной группы цилиндров. В файловой системе каждый блок выполняет специфическую функцию. Файловая система UFS имеет следующие четыре типа блоков:

Загрузочный блок (boot block). Хранит информацию, которая используется при выполнении загрузки системы. Загрузочный блок хранит процедуры, используемые при выполнении загрузки системы. Без загрузочного блока система не загружается. Если файловая система не используется при загрузке системы, загрузочный блок остается пустым. Загрузочный блок появляется только в первой группе цилиндров (группа 0) и занимает первые 8 Кбайт части диска.

Суперблок (superblock). Хранит важную информацию о файловой системе.

Индексный дескриптор (inode). Хранит всю информацию о файле за исключением его имени.

Блок хранения, или блок данных. Хранит данные каждого файла.

UFC использует следующие подходы для увеличения производительности системы:

  • Создание дубликатов суперблока для восстановления диска в случае повреждения
  • Использование больших блоков данных для увеличения пропускной способности
  • Запись данных о размеров блоков данных в суперблок
  • Хранение связанных блоков данных в одной группе цилиндров
  • Возможность фрагментации блоков на 2, 4 или 8 фрагментов для эффективного хранения большого количества малых фалов
  • Размещение файла в блоках хранения данных, принадлежащих одной группе цилиндров, где расположены его метаданные. Поскольку многие операции файловой системы включают работу, связанную как с метаданными, так и с данными файла, это правило уменьшает время совершения таких операций.
  • Размещение каждого нового каталога в группу цилиндров, отличную от группы родительского каталога. Таким образом достигается равномерное распределение данных по диску.
  • Размещение последовательных блоков исходя из оптимизации физического доступа. Дело в том, что существует определенный промежуток времени между моментом завершения чтения блока и началом чтения следующего. За это время диск успеет совершить оборот на некоторый угол. Таким образом, следующий блок должен по возможности располагаться с пропуском нескольких секторов. В этом случае при чтении последовательных блоков не потребуется совершать "холостые" обороты диска.

Содержание inode UFS

  • Количество ссылок на файл - каждое имя, ссылающееся на файл, а также открытие файла увеличивают этот счетчик на единицу; файл стирается с высвобождением занятого места как только счетчик становится равным нулю (т.е. можно "стереть" открытый файл, и система удалит его, когда его закроют);
  • Размер файла;
  • Дату и время создания, последнего изменения и последнего чтения файла;
  • тип файла:
    • Обычный файл;
    • Директория;
    • Файл блочного устройства;
    • Файл символьного (последовательного) устройства;
    • Поименованный пайп (название происходит от символа "|", называемого "pipe");
    • Символьная ссылка;

Во многих UFS если после создания файла в кластер ничего не писалось (например, после открытия файла переместили указатель далеко-далеко и что-то туда записали), то под этот кластер не отводится место, а ссылке, которая должна на него указывать, присваивается 0 (это особенно актуально в свете использования hash-таблиц, которые обычно имеют внутри себя пустое пространство). То же самое делается если кластер оказывается заполнен нулями (незаполненное место считается залитым нулями).

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

История создания и развития UFS

Ранние версии Unix использовали файловую систему, называвшуюся «FS», включающую в себя только загрузочные блоки, суперблок, множество индексных дескрипторов и блоки данных. При увеличении количества и размеров файлов появилась необходимость в оптимизации принципов хранении информации в системе. Таким образом, группой в Калифорнийском университете в Беркли, была создана новая продвинутая версия FS - FFS (Fast File System), в последствии названная UFS. Цель FFS заключается в том, чтобы попытаться локализовать связь блоков данных и метаданных в одной и той же группе цилиндров, а в идеале, всё содержимое каталога (как данных, так и метаданных для всех файлов), в той же группе, таким образом, уменьшив фрагментацию вызванных рассеянием содержимого каталогов диска. Так же она отличалась от файловых систем того времени возможностью использования длинных имен файлов и создания символьных ссылок. Так же она была одной из первых файловых использующей древовидную структуру и единый корневой каталог root.

После 4.4BSD и BSD Unix системы разделились, появились такие системы, как FreeBSD, NetBSD, OpenBSD и DragonFlyBSD. Таким образом были созданы UFS1 и UFS2, которые представляют собой два слоя — верхний слой, который обеспечивает структуру каталогов и поддерживает метаданные в индексном дескрипторе структуры, и нижних слоев, которые позволяет представлять контейнерные данные как индексные дескрипторы. Это было сделано для поддержки как традиционной FFS, так и LFS.

Со временем в связи с постоянно увеличивающимися объёмами дисковых накопителей и переводу адресации дискового пространства на Advanced Format во FreeBSD размер блока файловой системы, принятый по умолчанию, увеличен с 16 КБ до 32 КБ, а размер фрагмента — с 2 КБ до 4 КБ. Эта оптимизация повысила производительность дисковых операций ввода-вывода на дисковых накопителях с ёмкостью порядка 1 ТБ с размером сектора 4 КБ. Максимально возможный размер блока на файловой системе UFS2/FFS составляет 64 КБ.

Linux поддерживает UFS на уровне чтения, но не имеет полной поддержки для записи UFS. Родной Linux ext2 создан по подобию UFS (в некоторых 4.4BSD системах UFS слой может использовать ext2 слой как контейнер, так же, как он может использовать FFS и LFS).


Развитие UFS в ранних операционных системах

Год Операционная система Нововведения
1984 SunOS 1.0 Начало использования FFS из 4.5 BSD
1985 SunOS 2.0 UFS перепроектирована для поддержки vnodes/vfs
1988 SunOS 4.0 UFS интегрирована с новым виртуальным кешом
1991 SunOS 4.1 Для оптимизации производительности добавлена I/O кластеризация
1992 SunOS 4.1 Файловая система расширена до 1ТБ
1992 Solaris 2.0 Поддержка 1ТБ-файловой системы добавлена в базовый пакет Solaris
1994 Solaris 2.4 Улучшены методы регистрации метаданных
1995 Solaris 2.5 Добавлены списки регулирования доступа
1995 Solaris 2.6 Введена поддержка работы с файлами размером 1ТБ, добавлена возможность некешированного доступа к Direct I/O
1998 Solaris 7 Регистрация метаданных интегрирована в базовый пакет Solaris UFS
2002 Solaris 9 Добавлена возможность создания снимков и расширенных атрибутов
2003 Solaris 9 Update 4 Добавлена поддержка мульти-терабайтной UFS
2004 Solaris 9 Update 7 Становится стандартной файловой системой

См. также

Ссылки

  1. alv.me [Электронный ресурс]: FreeBSD: физика файловой системы UFS / Дата обращения: 21.11.2016. — Режим доступа: http://alv.me/freebsd-fizika-fajlovoj-sistemy-ufs/
  2. Wikipedia [Электронный ресурс]: Unix File System / Дата обращения: 21.11.2016. — Режим доступа: https://ru.wikipedia.org/wiki/Unix_File_System
  3. Citforum [Электронный ресурс]: Файловая система / Дата обращения: 21.11.2016. — Режим доступа: http://citforum.ru/operating_systems/unix/glava_13.shtml
  4. Национальный Открытый Университет [Электронный ресурс]: Элементы файловой системы / Дата обращения: 21.11.2016. — Режим доступа: http://www.intuit.ru/studies/courses/1008/265/lecture/6750?page=2
  5. OS Solaris.ru [Электронный ресурс]: Составные части файловой системы UFS / Дата обращения: 21.11.2016. — Режим доступа :http://ossolaris.ru/vvedenie-v-fajlovye-sistemy/sostavnye-chasti-fajlovoj-sistemy-ufs.html
  6. yura.puslapiai.lt [Электронный ресурс]: ОБЩЕЕ ОПИСАНИЕ ФАЙЛОВЫХ СИСТЕМ / Дата обращения: 21.11.2016. — Режим доступа: http://yura.puslapiai.lt/archiv/per/fsinf.html