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.

## Содержание

* 1 Дизайн
* 2 История и развитие
* 3 Применение
* 4 Примечания
* 5 Ссылки

## Дизайн

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

Физически 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 года.

## Ссылки

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

* Jeroen C. van Gelderen. «Little UFS2 FAQ» (англ.). freebsd.org (23 апреля 2003). Дата обращения: 29 ноября 2010. Архивировано 14 февраля 2012 года.
* Мини-FAQ по UFS и UFS2 Архивная копия от 1 июня 2016 на Wayback Machine  (рус.)
* Martin Hinner. «Filesystems-HOWTO» (англ.). The Linux Documentation Project. Дата обращения: 29 ноября 2010. Архивировано 14 февраля 2012 года.
* UFS2 Tools - UFS for Windows (англ.). — ufs2tools содержит утилиты для чтения файловых систем UFS1 и UFS2 из ОС Windows 2000/XP. Дата обращения: 29 ноября 2010. Архивировано 14 февраля 2012 года.
* Large data storage in FreeBSD (англ.). The FreeBSD Project. Дата обращения: 29 ноября 2010. Архивировано 14 февраля 2012 года.
* Инструкция по включению журналирования UFS2 в FreeBSD Архивная копия от 2 июня 2016 на Wayback Machine

Файловые системы (список, сравнение)

Дисковые|

* ADFS
* AdvFS
* APFS
* BeFS
* Btrfs
* EFS
* ext
* ext2
* ext3
* ext3cow
* Next3
* ext4
* FAT
* VFAT
* FAT32
* exFAT
* FATX
* FFS
* Files-11
* GFS
* HFS
* HFS Plus
* XFSX
* HPFS
* ISO 9660
* JFS
* LFS
* MFS (Macintosh)
* MFS (Tivo)
* Minix
* MUFS
* NWFS
* NILFS
* NSS
* NTFS
* PFS
* Qnx4fs
* Qnx6fs
* ReFS
* ReiserFS
* Reiser4
* SFS
* SpadFS
* UFS
* UFS2
* UDF
* VxFS
* WinFS
* WAFL
* XFS
* ZFS
* больше...

| Оптические диски|

* ISO 9660
* UDF

|

Флеш-память/SSD|

* FAT
* exFAT (FAT64)
* CHFS
* TFAT
* FFS2
* F2FS
* HPFS
* JFFS
* JFFS2
* LogFS
* NVFS
* UDF
* YAFFS
* UBIFS

Кластерные|

* Files-11
* GFS
* OCFS
* QFS
* Xsan
* больше...

Распределённые
(сетевые)|

* AFS
* OpenAFS
* AFP
* Ceph
* DFS
* GlusterFS
* GPFS
* Google File System
* Lustre
* NCP
* NFS
* POHMELFS
* Hadoop
* Kosmos
* HAMMER
* SMB (CIFS)
* больше...

Специальные|

* cramfs
* FUSE
* Squashfs
* UMSDOS
* UnionFS
* больше...

| Псевдо- и виртуальные|

* configfs
* devfs
* procfs
* specfs
* sysfs
* tmpfs
* WinFS

|

Шифрованные|

* EncFS
* EFS
* FSFS
* SSHFS
* SolFS
* ZFS