Unix File System

UFS
Разработчик CSRG
Файловая система UNIX file system
Дата представления (4.2BSD)
Структура
Содержимое папок таблица
Ограничения
Максимальный размер файла 273 байт
(8 Збайт)
Максимальная длина имени файла 255 байт
Максимальный размер тома 273 байт
(8 Збайт)
Возможности
Поддерживается ОС FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, A/UX и другие

Unix File System (UFS)файловая система, созданная для операционных систем семейства BSD и используемая в переработанном и дополненном виде на данный момент как основная в операционных системах-потомках (FreeBSD, OpenBSD, NetBSD).

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

Физически UFS состоит из следующих частей:

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

Индексные дескрипторы нумеруются последовательно. Несколько первых индексных дескрипторов сохранено по историческим причинам, далее следуют индексные дескрипторы корневого каталога.

Каталог файлов содержит только список файлов и индексный дескриптор, связанный с каждым файлом. Все метаданные файла хранятся в индексном дескрипторе.

История и развитие

[править | править код]

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

Цель FFS заключается в том, чтобы попытаться локализовать связь блоков данных и метаданных в одной и той же группе цилиндров, а в идеале, всё содержимое каталога (как данных, так и метаданных для всех файлов), в той же группе, таким образом, уменьшив фрагментацию, вызванную рассеянием содержимого каталогов диска.

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

С увеличением размеров дисков уровень оптимизации стал не столь эффективен (в частности, с дисками, которые используют линейные сектора нумерации и переменных секторов на дорожке). С увеличением дисков и файлов чтение фрагментированых кусков стало сложнее. Чтобы бороться с этим, BSD первоначально увеличил размер блока файловой системы от одного сектора до 1 КБ в 4.0BSD, и, в FFS до 8 КБ. Число блоков, представимых с фиксированной (битной) шириной блока, увеличили (разрешение для больших дисков). С увеличением размера блока диски с большим количеством маленьких файлов будут занимать много места. Для решения проблемы неэффективного использования свободного пространства в слой FFS файловой системы UFS2 был добавлен уровень фрагментов, представляющих собой способ адресации отдельных частей блока данных — фрагментов.

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

Применение

[править | править код]

Пользователи некоторых коммерческих Unix систем, таких как Solaris, HP-UX и Tru64 UNIX, приняли UFS. Большинство из них перевело системы на UFS, добавило проприетарные дополнения, из-за которых пользователи других версий UNIX могли не распознать UFS. Удивительно, но многие из них продолжают использовать оригинальный размер блока данных и ширину блока, как и в оригинальной UFS, так что некоторая степень совместимости на разных платформах остается. Совместимость между реализациями неполная, в лучшем случае, и должна быть исследована перед использованием на нескольких платформах.

В Solaris 7 Sun Microsystems включили UFS Logging, которое принесло журналируемость файловой системы в UFS. Solaris UFS также включало дополнения для файлов и дисков больших размеров. Начиная с Solaris 10 пользователю предоставляется выбрать при установке UFS или ZFS (усовершенствованную файловую систему от Sun). В OpenSolaris UFS полностью заменена на ZFS.

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

Кирк Маккьюзик построил FreeBSD на FFS и UFS, чтобы поддержать новый вариант, называемый UFS2, который добавляет 64-битный блок указателей (позволяя увеличить объем до 8 Зеттабайт) с переменным размером блока (по аналогии с EFS), расширенные поля флага, расширенный атрибут поддержки и POSIX1.e ACLм. UFS2 стал по умолчанию зваться UFS начиная с FreeBSD 5.0. FreeBSD также внес некоторые дополнения (Soft Updates) и возможность создать файловую систему из UFS1 и UFS2. Soft updates были перенесены на NetBSD, но будут удалены из NetBSD 6.0 в пользу менее сложной файловой системы журнального механизма (WAPBL), которая была добавлена для FFS в NetBSD 5.0. OpenBSD поддержала Soft updates в версии 2.9[1] и UFS2 начиная с версии 4.2[2]. Начиная с FreeBSD 7.0 UFS также поддерживает журналируемую файловую систему, используя gjournal GEOM провайдера. В FreeBSD 9.0 добавлена поддержка журналирования поверх softupdates(SU+J)[3], которая в значительной степени снижает потребность в фоновых проверках файловой системы и использует по умолчанию ACL в NFS-стиле.

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

NeXTStep, которая возникла из BSD, также использует версию UFS. В созданной в Apple Mac OS X UFS доступна как альтернатива HFS+. Однако, как и в Mac OS X v10.5, нельзя установить Mac OS X «Leopard» на UFS-форматированный раздел. Кроме того, нельзя обновить старые версии Mac OS X, установленые на UFS, на Leopard; модернизация требует переформатирования раздела.

Игровая консоль PlayStation 3 использует UFS2 на своём HDD. В PlayStation 2 используется UFS.[4]

Для доступа к файловой системе UFS из семейства операционных систем Windows можно использовать программу R.saver.

Примечания

[править | править код]
  1. OpenBSD 2.9 Release. Дата обращения: 15 марта 2009. Архивировано 2 декабря 2008 года.
  2. OpenBSD 4.2 Release. Дата обращения: 15 марта 2009. Архивировано 14 февраля 2009 года.
  3. Патчи для поддержки журналирования в UFS добавлены во FreeBSD-CURRENT. Дата обращения: 1 мая 2016. Архивировано 2 июня 2016 года.
  4. Netkas starts playing with JB PS3s. Дата обращения: 11 января 2012. Архивировано из оригинала 29 октября 2010 года.