Fast File System
Fast File System (FFS, Быстрая файловая система) — это файловая система, разработанная в 1980-х годах для операционной системы Unix в Калифорнийском университете в Беркли. Она представляет собой усовершенствованную версию оригинальной файловой системы Unix (UFS) и стала основой для многих современных файловых систем, включая UFS2, ext2, ext3 и ext4. Основное нововведение FFS заключалось в оптимизации размещения данных на диске для повышения производительности при последовательном и случайном доступе, а также в поддержке более крупных дисков и длинных имён файлов.
История
Предпосылки создания
Оригинальная файловая система Unix, разработанная в начале 1970-х годов в Bell Labs, была простой и эффективной для своего времени, но имела серьёзные ограничения. Она поддерживала только диски объёмом до 64 мегабайт, имена файлов длиной до 14 символов и неэффективно использовала дисковое пространство. К началу 1980-х годов, с появлением более крупных и быстрых дисков, эти ограничения стали критическими. Кроме того, производительность оригинальной системы страдала из-за фрагментации данных: файлы часто разбивались на множество мелких фрагментов, разбросанных по диску, что замедляло чтение и запись.
Разработка в Беркли
В 1983 году группа исследователей из Калифорнийского университета в Беркли, работавшая над проектом Berkeley Software Distribution (BSD) Unix, начала разработку новой файловой системы. Руководителем проекта был Маршалл Кирк МакКузик, а ключевыми участниками — Джон Остерхаут и Джойс Вуд. Целью было создание системы, которая могла бы эффективно работать с дисками объёмом до 1 гигабайта, поддерживать длинные имена файлов (до 255 символов) и обеспечивать высокую скорость доступа за счёт оптимизации размещения данных.
Релиз и влияние
Первая версия FFS была включена в состав 4.2BSD, выпущенного в 1983 году. Она быстро стала стандартной файловой системой для всех производных BSD, включая SunOS, Ultrix и NeXTSTEP. В 1990-х годах идеи FFS были адаптированы для Linux (файловая система ext2), а затем и для других операционных систем. В 2001 году в OpenBSD была представлена улучшенная версия FFS — UFS2, которая поддерживала диски объёмом более 1 терабайта и расширенные атрибуты файлов.
Архитектура и устройство
Структура диска
FFS делит диск на логические блоки, называемые фрагментами и блоками. Блок — это минимальная единица выделения пространства для файла, обычно размером 4 или 8 килобайт. Фрагмент — это часть блока (например, 1/8), которая используется для хранения концов файлов, чтобы избежать потерь пространства при записи файлов, размер которых не кратен размеру блока. Диск разбивается на группы цилиндров (cylinder groups), каждая из которых содержит:
- Суперблок (superblock) — копия метаданных файловой системы, включая размер блока, количество групп цилиндров и список свободных блоков.
- Карту битов (bitmap) — таблицу, указывающую, какие блоки и фрагменты заняты, а какие свободны.
- Таблицу инодов (inode table) — массив инодов, каждый из которых описывает файл или каталог.
- Область данных — непосредственно блоки, в которых хранятся содержимое файлов.
Иноды
Каждый файл или каталог в FFS представлен инодом (inode) — структурой данных, содержащей метаинформацию о файле:
- Тип файла (обычный, каталог, символьная ссылка, устройство).
- Права доступа (владелец, группа, режим).
- Временные метки (время создания, последнего доступа, последней модификации).
- Размер файла.
- Количество ссылок (жёстких ссылок).
- Указатели на блоки данных (до 12 прямых указателей, один косвенный, один двойной косвенный и один тройной косвенный).
Размещение данных
Ключевое нововведение FFS — стратегия размещения данных, направленная на минимизацию перемещений головок диска. При создании файла система пытается разместить его инод и все блоки данных в одной группе цилиндров. Если файл большой, он может занимать несколько групп цилиндров, но блоки внутри одной группы располагаются последовательно. Для каталогов система старается размещать их иноды и содержимое в разных группах, чтобы распределить нагрузку.
Классификация
Версии FFS
- FFS (Original) — версия, включённая в 4.2BSD. Поддерживает диски до 1 ГБ, имена файлов до 255 символов, размер блока 4 или 8 КБ.
- UFS (Unix File System) — обобщённое название для FFS и её производных. В разных Unix-системах (Solaris, HP-UX) UFS может иметь свои особенности.
- UFS2 — улучшенная версия, представленная в OpenBSD 2001 года. Поддерживает диски до 2^64 байт, расширенные атрибуты, мягкие обновления (soft updates) для повышения надёжности.
- FFS2 — экспериментальная версия, разработанная в 1990-х годах в Калифорнийском университете в Беркли, включающая поддержку журналирования.
Производные файловые системы
- ext2 — файловая система для Linux, созданная в 1993 году Реми Кардом. Основана на архитектуре FFS, но не включает фрагментацию.
- ext3 — расширение ext2 с журналированием.
- ext4 — дальнейшее развитие ext3 с поддержкой больших дисков и экстентов.
- JFS — файловая система IBM, также использующая идеи FFS.
Применение
Операционные системы
FFS и её производные используются в большинстве Unix-подобных операционных систем:
- BSD-системы (FreeBSD, OpenBSD, NetBSD) — FFS/UFS2 является основной файловой системой.
- Linux — ext2/ext3/ext4, хотя и не являются прямыми копиями FFS, унаследовали её архитектуру.
- macOS — до перехода на APFS в 2017 году использовала HFS+, которая также основана на идеях FFS.
- Solaris — UFS является одной из поддерживаемых файловых систем.
Встраиваемые системы
Благодаря простоте и надёжности, FFS используется в некоторых встраиваемых системах, например, в маршрутизаторах на базе BSD и в устройствах хранения данных.
Критика и ограничения
Производительность
Несмотря на оптимизации, FFS может страдать от фрагментации при интенсивной записи и удалении файлов. Со временем блоки данных разбиваются на мелкие фрагменты, что снижает скорость последовательного чтения. Для борьбы с этим в UFS2 были добавлены мягкие обновления, которые уменьшают фрагментацию, но не устраняют её полностью.
Надёжность
FFS не является журналируемой файловой системой, что делает её уязвимой к сбоям питания. При внезапном отключении питания может возникнуть повреждение метаданных, требующее длительной проверки (fsck). В UFS2 и некоторых версиях FFS добавлено журналирование, но оно не является обязательным.
Поддержка современных дисков
Оригинальная FFS не поддерживает диски объёмом более 1 ТБ без специальных настроек. UFS2 решает эту проблему, но всё же уступает более современным файловым системам, таким как ZFS или Btrfs, в масштабируемости и функциях (например, сжатие, дедупликация, снимки).
Интересные факты
- Название «Fast File System» было выбрано, чтобы подчеркнуть основное преимущество перед оригинальной файловой системой Unix. Однако в документации BSD она часто называется просто «Unix File System».
- Разработчики FFS впервые применили концепцию «групп цилиндров», которая позже стала стандартом для многих файловых систем.
- В 1984 году за создание FFS Маршалл Кирк МакКузик получил премию ACM Software System Award.
- FFS оказала влияние на разработку файловых систем для Windows (NTFS) и macOS (HFS+), хотя они не являются прямыми копиями.
Источники
- Marshall Kirk McKusick, William N. Joy, Samuel J. Leffler, Robert S. Fabry. «A Fast File System for UNIX» (1984). ACM Transactions on Computer Systems.
- Marshall Kirk McKusick, George V. Neville-Neil. «The Design and Implementation of the FreeBSD Operating System» (2004). Addison-Wesley.
- «Unix File System» — документация FreeBSD.
- «UFS2» — документация OpenBSD.
- «Ext2 — файловая система для Linux» — документация ядра Linux.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →