Открыть сервис

Универсальная файловая система

Универсальная файловая система (Universal File System, UFS) — это обобщённое название для семейства файловых систем, разработанных в рамках проекта операционной системы Unix в конце 1970-х — начале 1980-х годов. В узком смысле термин относится к оригинальной файловой системе BSD (Berkeley Software Distribution), известной как UFS1, и её последующей версии UFS2. UFS является одной из старейших и наиболее влиятельных файловых систем, заложившей основы для многих современных решений, включая ext2/ext3/ext4 в Linux и ZFS. Она характеризуется использованием индексных дескрипторов (inode), битовых карт для управления свободным пространством и поддержкой жёстких ссылок.

История

Происхождение

Первая версия UFS была создана в 1978 году в Калифорнийском университете в Беркли (США) как часть операционной системы 4.2BSD. Разработчики, среди которых были Маршалл Кирк Маккьюсик и Роберт Свайндл, поставили задачу преодолеть ограничения файловой системы V7 Unix, которая использовала фиксированный размер блоков и не поддерживала длинные имена файлов. UFS ввела поддержку имён длиной до 255 символов, а также механизм кэширования через буферный кэш ядра.

Развитие

В 1984 году вышла версия 4.3BSD, в которой UFS получила поддержку мягких ссылок (symlinks) и увеличенный максимальный размер файла (до 2^32 байт). В 1994 году, с выходом 4.4BSD, была представлена UFS2 (также известная как FFS — Fast File System). Основные нововведения включали:

  • Увеличение размера блока по умолчанию с 4 КБ до 8 КБ.
  • Поддержка 64-битных адресов блоков, что позволило работать с разделами объёмом до 8 зеттабайт.
  • Введение механизма журналирования (soft updates) для обеспечения целостности данных при сбоях.

Распространение

UFS стала стандартной файловой системой для всех версий BSD (FreeBSD, NetBSD, OpenBSD) и их производных (например, macOS до версии 10.6 Snow Leopard использовала UFS в качестве альтернативы HFS+). В 1990-х годах Linux-сообщество разработало собственную реализацию UFS (ext2), которая впоследствии эволюционировала в ext3 и ext4. Однако в современных системах UFS постепенно вытесняется более новыми файловыми системами, такими как ZFS, Btrfs и APFS.

Архитектура и устройство

Основные компоненты

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

Структура раздела

Раздел UFS делится на несколько логических областей:

  • Суперблок (superblock) — содержит глобальную информацию о файловой системе: размер блока, количество inode, размер раздела, флаги состояния. Для повышения надёжности суперблок дублируется в нескольких местах.
  • Группа цилиндров (cylinder group) — UFS разбивает диск на группы цилиндров (в современных реализациях — группы блоков), каждая из которых содержит:
  • Копию суперблока.
  • Битовую карту занятых блоков (block bitmap).
  • Битовую карту занятых inode (inode bitmap).
  • Таблицу inode.
  • Область данных.
  • Блоки данных — минимальная единица хранения данных. Размер блока может быть 4 КБ, 8 КБ или 16 КБ (в UFS2). Для больших файлов используется механизм косвенной адресации: inode содержит до 12 прямых указателей на блоки, а также указатели на блоки косвенной, двойной косвенной и тройной косвенной адресации.

Типы блоков

  • Прямые блоки — первые 12 блоков файла адресуются напрямую из inode.
  • Косвенные блоки — содержат указатели на блоки данных (используются для файлов размером до 2^12 блоков).
  • Двойные косвенные блоки — для файлов размером до 2^24 блоков.
  • Тройные косвенные блоки — для файлов размером до 2^36 блоков (максимальный размер файла в UFS2 — 2^64 байт).

Классификация

UFS1 (FFS)

  • Размер блока: 4 КБ (по умолчанию).
  • Максимальный размер файла: 2^32 байт (4 ГБ).
  • Максимальный размер раздела: 2^32 блоков (16 ТБ при 4 КБ блоке).
  • Поддержка мягких ссылок: да.
  • Журналирование: нет (используется soft updates).

UFS2

  • Размер блока: 8 КБ (по умолчанию).
  • Максимальный размер файла: 2^64 байт (16 ЭБ).
  • Максимальный размер раздела: 2^64 блоков (128 ЗБ при 8 КБ блоке).
  • Поддержка мягких ссылок: да.
  • Журналирование: soft updates (с версии FreeBSD 5.0).

Реализации в других ОС

  • Linux UFS — встроенная поддержка только для чтения (чтение UFS1/UFS2). Для записи требуется патч или сторонний модуль.
  • macOS UFS — поддерживалась до версии 10.6 (Snow Leopard), затем заменена на HFS+.
  • Solaris UFS — использовалась в SunOS до внедрения ZFS.

Применение

Операционные системы

UFS является основной файловой системой для всех современных BSD-систем (FreeBSD, NetBSD, OpenBSD). В FreeBSD, начиная с версии 7.0, UFS2 используется по умолчанию для корневых разделов и разделов данных. В macOS UFS применялась в ранних версиях (до 10.6) как альтернатива HFS+ для серверных конфигураций.

Встраиваемые системы

Благодаря простоте и низким требованиям к ресурсам, UFS часто используется во встраиваемых системах на базе BSD (например, в маршрутизаторах, сетевых хранилищах NAS). В некоторых дистрибутивах Linux (например, OpenWrt) UFS поддерживается через модуль ufs.

Историческое значение

UFS послужила основой для разработки файловой системы ext2 в Linux (1993 год). Структура inode, битовые карты и механизм косвенной адресации были заимствованы практически без изменений. В свою очередь, ext2 стала базой для ext3 (с журналированием) и ext4 (с увеличенным размером файлов и разбивкой на экстенты).

Критика и ограничения

Недостатки

  • Отсутствие журналирования — в UFS1 и UFS2 (без soft updates) при сбое питания или системном сбое требуется длительная проверка целостности (fsck), которая может занимать часы на больших разделах.
  • Фрагментация — при длительной эксплуатации и частых операциях записи/удаления мелких файлов возникает фрагментация, снижающая производительность.
  • Ограниченная поддержка в Linux — встроенная поддержка UFS в Linux является экспериментальной и не поддерживает запись для UFS2.
  • Отсутствие сжатия и шифрования — UFS не поддерживает встроенное сжатие данных или шифрование на уровне файловой системы (в отличие от ZFS или Btrfs).

Достоинства

  • Простота и надёжность — архитектура UFS хорошо изучена и проверена десятилетиями эксплуатации.
  • Эффективность для малых файлов — благодаря фиксированному размеру inode и прямому адресу блоков, UFS хорошо работает с файлами размером до 12 блоков.
  • Совместимость — UFS поддерживается во всех BSD-системах и может быть прочитана в Linux, macOS и Windows (через сторонние драйверы).

Интересные факты

  • Оригинальная UFS (4.2BSD) была одной из первых файловых систем, поддерживающих длинные имена файлов (до 255 символов) — до этого в Unix имена были ограничены 14 символами.
  • В UFS2 максимальный размер файла составляет 16 эксабайт (2^64 байт), что теоретически позволяет хранить на одном разделе более 2 миллиардов фильмов в разрешении 4K.
  • Разработчик UFS Маршалл Кирк Маккьюсик впоследствии участвовал в создании файловой системы ZFS (совместно с Sun Microsystems).
  • В FreeBSD существует возможность использовать UFS с включённым журналированием (gjournal), что обеспечивает более высокую устойчивость к сбоям, чем soft updates.

Источники

  • Marshall Kirk McKusick, William N. Joy, Samuel J. Leffler, Robert S. Fabry. «A Fast File System for UNIX» (1984).
  • FreeBSD Handbook. «Chapter 8: File Systems» (FreeBSD Documentation Project).
  • «The Design and Implementation of the 4.4BSD Operating System» (Addison-Wesley, 1996).
  • Linux Kernel Documentation: «UFS Filesystem» (kernel.org).
  • «UFS2: The Next Generation of the Unix File System» (USENIX Annual Technical Conference, 2002).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →