Unix File System
Unix File System (UFS) — файловая система, созданная для операционных систем семейства BSD и используемая в переработанном и дополненном виде на данный момент как основная в операционных системах-потомках (FreeBSD, OpenBSD, NetBSD).
UFS | |
---|---|
Разработчик | CSRG |
Файловая система | UNIX file system |
Дата представления | (4.2BSD) |
Структура | |
Содержимое папок | таблица |
Ограничения | |
Максимальный размер файла |
273 байт (8 Збайт) |
Максимальная длина имени файла | 255 байт |
Максимальный размер тома |
273 байт (8 Збайт) |
Возможности | |
Поддерживается ОС | FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, A/UX и другие |
Поддержка данной файловой системы имеется также в ядре 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.
Примечания
- OpenBSD 2.9 Release
- OpenBSD 4.2 Release
- Патчи для поддержки журналирования в UFS добавлены во FreeBSD-CURRENT
- 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 (рус.)
- 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