Unix File System

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
UFS
Разработчик

CSRG

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

UNIX file system

Дата представления

(4.2BSD)

Структура
Содержимое папок

таблица

Ограничения
Максимальный размер файла

2^73 байт
(8 Збайт)

Максимальная длина имени файла

255 байт

Максимальный размер тома

2^73 байт
(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, добавили проприетарные дополнения, которые позволяли не распознать UFS пользователям других версий UNIX. Удивительно, но многие из них продолжают использовать оригинальный размер блока данных и ширину блока, как и в оригинальной 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, которые представляют собой два слоя — верхний слой, который обеспечивает структуру каталогов и поддерживает метаданные (разрешения, права доступа и т. д.) в индексном дескрипторе структуры, и нижних слоев, которые позволяет представлять контейнерные данные как индексные дескрипторы. Это было сделано для поддержки как традиционной 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), которая в значительной степени снижает потребность в фоновых проверках файловой системы, и использует по умолчанию 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.[3]

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

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]