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

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

UFS (Unix File System) — семейство файловых систем, разработанных для операционных систем семейства Unix. Первоначально создана в начале 1980-х годов в Калифорнийском университете в Беркли на основе более ранней файловой системы FS (File System) из UNIX версии 7. UFS стала стандартной файловой системой для Berkeley Software Distribution (BSD) и её производных, включая FreeBSD, NetBSD и OpenBSD, а также оказала значительное влияние на разработку файловых систем в других операционных системах, таких как Solaris и Linux.

История

Разработка UFS началась в 1982 году в рамках проекта 4.2BSD под руководством Маршалла Кирка Макьюсика. Основной целью было преодоление ограничений старой файловой системы FS, включая низкую производительность при работе с большими дисками и ограничение на максимальный размер файла в 1 гигабайт. Новая система, представленная в 4.2BSD, получила название «быстрая файловая система» (Fast File System, FFS) и была оптимизирована для работы с дисками, используя цилиндрические группы для уменьшения фрагментации и повышения скорости доступа.

В 1994 году в составе 4.4BSD появилась вторая версия — UFS2, которая добавила поддержку 64-битных указателей на блоки, что позволило создавать файлы размером до 8 терабайт и тома до 16 терабайт. UFS2 стала стандартной файловой системой в FreeBSD начиная с версии 5.0. Развитие системы продолжалось в рамках проектов BSD, а также в коммерческих Unix-системах: Sun Microsystems использовала UFS в Solaris, добавив поддержку журналирования (UFS Logging) в версии Solaris 7.

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

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

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

  • Суперблок — хранит метаданные всей файловой системы: размер, число блоков и инод, флаги.
  • Иноды (inode) — структуры данных, описывающие файлы: владелец, права доступа, размер, временные метки, список блоков с данными. Каждый файл и каталог имеет уникальный номер иноды.
  • Блоки данных — непосредственно содержат содержимое файлов. Размер блока обычно кратен 512 байтам и может составлять 4, 8 или 16 килобайт.
  • Цилиндрические группы — подразделы диска, каждый со своей копией суперблока, таблицей инод и картой свободных блоков.

Для хранения адресов блоков файла используется схема с прямой, одиночной, двойной и тройной косвенной адресацией. Первые 12 блоков файла адресуются напрямую через иноду, что обеспечивает быстрый доступ к небольшим файлам. Для файлов большего размера используются блоки косвенной адресации, что позволяет поддерживать очень большие файлы.

Версии и разновидности

UFS1 и UFS2

UFS1 поддерживает 32-битные адреса блоков, максимальный размер файла — 2 гигабайта (при размере блока 4 КБ) или 4 гигабайта (при блоке 8 КБ). UFS2, представленная в 4.4BSD, использует 64-битные адреса и позволяет работать с файлами до 8 терабайт. Также UFS2 добавила расширенные атрибуты и улучшенную поддержку больших дисков.

UFS/FFS в различных системах

  • FreeBSD — использует UFS2 по умолчанию, поддерживает мягкие обновления (soft updates) и журналирование.
  • Solaris — использует UFS с журналированием (UFS Logging) и поддержкой расширенных атрибутов.
  • Linux — имеет встроенную поддержку чтения и записи UFS, но она считается экспериментальной и не рекомендуется для боевого использования.
  • macOS — ранние версии использовали UFS, но начиная с Mac OS X 10.5 система перешла на HFS+.

Журналирование и восстановление

Изначально UFS не была журналируемой файловой системой: при сбое питания или системном сбое требовалась длительная проверка целостности программой fsck. Для решения этой проблемы в FreeBSD были разработаны механизмы мягких обновлений (soft updates), которые упорядочивают запись метаданных таким образом, чтобы избежать повреждения структуры файловой системы без полного журналирования.

Позднее, в FreeBSD 7.0, появилась полноценная поддержка журналирования (gjournal), а в Solaris — UFS Logging. Журналирование записывает изменения метаданных в отдельный журнал, что позволяет быстро восстановить систему после сбоя без полного сканирования диска.

Применение

UFS использовалась в большинстве операционных систем семейства BSD, включая FreeBSD, NetBSD, OpenBSD и DragonFly BSD. Она также была основной файловой системой в Solaris до перехода на ZFS. В настоящее время UFS продолжает использоваться во FreeBSD, особенно для загрузочных разделов и небольших дисков, хотя для большинства задач рекомендуется более современная ZFS.

В Linux поддержка UFS ограничена и используется преимущественно для чтения данных с дисков, созданных в системах BSD или Solaris. В macOS поддержка UFS была удалена в версии 10.6 Snow Leopard.

Ограничения

Несмотря на надёжность и простоту, UFS имеет ряд ограничений по сравнению с современными файловыми системами:

  • Отсутствие встроенной поддержки контрольных сумм для данных (появляется только в UFS2 с расширениями).
  • Нет поддержки снапшотов (снимков состояния) в базовой версии — эта функция реализована только в некоторых реализациях, например, в FreeBSD через механизм snapshot.
  • Фрагментация файлов со временем увеличивается, несмотря на использование цилиндрических групп.
  • Максимальный размер тома ограничен 16 терабайтами в UFS2, что недостаточно для современных дисковых массивов.

Влияние

Архитектура UFS, особенно концепция цилиндрических групп и косвенной адресации, оказала значительное влияние на проектирование последующих файловых систем. Многие элементы UFS были заимствованы в ext2/ext3/ext4 (Linux), которые имеют схожую структуру суперблока и инод. Разработка UFS также стимулировала исследования в области надёжности и производительности файловых систем, что привело к созданию журналируемых систем (ext3, NTFS) и copy-on-write систем (ZFS, Btrfs).

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru