Файловая система — организация данных в накопителях¶
Файловая система — это метод и набор структур данных, используемых операционной системой для организации, хранения, именования, доступа и управления данными на носителях информации: жёстких дисках, твердотельных накопителях, флеш-памяти, оптических дисках, сетевых ресурсах и других устройствах. Файловая система определяет, каким образом байты данных распределяются по секторам накопителя, как хранятся метаданные (имя файла, размер, дата создания и изменения, права доступа) и как пользователь или программа обращается к файлам через системные вызовы.
¶Основные понятия
Файловая система оперирует рядом базовых сущностей:
- Файл — именованная последовательность данных, хранящаяся на носителе и рассматриваемая как единое целое.
- Каталог (директория) — структура, содержащая ссылки на файлы и другие каталоги, образующая иерархию.
- Метаданные — сведения о файле, не относящиеся к его содержимому: имя, размер, владелец, права доступа, временные метки.
- Суперблок — служебная область, хранящая глобальную информацию о файловой системе: её размер, тип, состояние.
- Инод (inode) — структура данных, описывающая файл: расположение блоков, размер, права, владельца. Используется в файловых системах семейства Unix.
- Кластер (блок) — наименьшая единица распределения пространства на носителе.
¶Классификация
Файловые системы классифицируют по нескольким признакам.
По типу носителя:
- Дисковые — для локальных накопителей (ext4, NTFS, Btrfs, XFS).
- Сетевые — для удалённых ресурсов (NFS, SMB/CIFS, 9P).
- Виртуальные — существуют в оперативной памяти (procfs, sysfs, tmpfs).
- Журналируемые — ведут журнал изменений для восстановления после сбоя (ext3, ext4, NTFS, ReiserFS).
По внутренней структуре:
- Иерархические — дерево каталогов (большинство современных ФС).
- Плоские — без вложенности (устаревшие FAT12/FAT16 в упрощённом режиме).
- Объектные — хранят данные в виде объектов (ZFS, Btrfs с поддержкой снапшотов).
¶Основные файловые системы
¶FAT
FAT (File Allocation Table) — одна из старейших файловых систем, разработанная Microsoft в конце 1970-х годов для дисководов floppy-формата. FAT12, FAT16 и FAT32 отличаются разрядностью таблицы распределения и максимальным размером тома. FAT32 поддерживает тома до 2 ТБ (практический предел для записи — 4 ГБ на файл) и обеспечивает высокую совместимость, поэтому продолжает использоваться на флеш-накопителях и в системах встраиваемой электроники. Расширение exFAT, представленное Microsoft в 2006 году, устраняет ограничения FAT32 на размер файла и тома.
¶NTFS
NTFS (New Technology File System) появилась в 1993 году как основная файловая система Windows NT. Поддерживает журналирование, шифрование (EFS), сжатие, контрольные точки восстановления, дисковые квоты, разрешения доступа на уровне ACL. Максимальный теоретический размер тома — 8 эксабайт, размер файла — 16 эксабайт минус 1 КБ.
¶ext
ext (extended file system) — семейство файловых систем ядра Linux. ext2 (1993) не имела журналирования, ext3 (2001) добавила журнал, ext4 (2008) поддерживает тома до 1 эксабайта, файлы до 16 ТБ, неограниченное количество файлов, улучшенные аллокацию и журналирование. ext4 долгое время была стандартной файловой системой дистрибутивов Debian, Ubuntu и CentOS.
¶XFS и Btrfs
XFS — 64-битная журналируемая ФС, разработанная Silicon Graphics в 1993 году, оптимизирована для больших файлов и параллельного ввода-вывода, включена по умолчанию в Red Hat Enterprise Linux 7 и новее.
Btrfs — файловая система, разработанная Oracle в 2007 году, поддерживающая снапшоты, сжатие, контрольные суммы, RAID на уровне ФС, дедупликацию. Активно развивается в сообществе Linux.
¶ZFS
ZFS — объединение файловой системы и менеджера томов, созданное Sun Microsystems в 2005 году. Использует копирование при записи (copy-on-write), обеспечивает целостность данных через контрольные суммы, поддерживает снапшоты, пул-хранилища, дедупликацию. Порт ZFS на Linux (OpenZFS) распространяется под CDDL-лицензией.
¶Виртуальные файловые системы
Операционные системы Unix и Linux используют подсистему виртуальных файловых систем (VFS), которая абстрагирует конкретную реализацию ФС за единым интерфейсом системных вызовов. Благодаря VFS программы, работающие с файлами, не зависят от того, хранятся ли данные на ext4, NFS или в оперативной памяти.
Специальные виртуальные ФС предоставляют доступ к служебной информации:
- procfs (монтируется в /proc) — параметры процессов и ядра.
- sysfs (монтируется в /sys) — дерево устройств и драйверов.
- tmpfs — файловое хранилище в оперативной памяти.
¶Журналирование и надёжность
Журналируемые файловые системы записывают информацию о предстоящих изменениях в специальный журнал до их выполнения. После сбоя система восстанавливает целостность, проигрывая или откатывая незавершённые операции. Это сокращает время проверки диска после аварийного отключения. ZFS и Btrfs используют иной подход — копирование при записи с версионированием, что исключает повреждение согласованных данных.
¶Русская локализация и кодировки
В ранних версиях Windows поддержка кириллицы в именах файлов реализовывалась через кодовые страницы (CP866, CP1251), что приводило к проблемам при обмене файлами между системами. С появлением Unicode и переходом NTFS на UTF-16 имена файлов стали корректно отображаться в любой локали. В Linux имена файлов хранятся как байтовые последовательности, и для корректной работы с кириллицей используется UTF-8.
¶История
Первой файловой системой считается система, реализованная в операционной системе Compatible Time-Sharing System (CTSS) в Массачусетском технологическом институте в 1961 году. В 1964 году в проекте Multics появилась иерархическая структура каталогов, ставшая прообразом современных ФС. Файловая система Unix, разработанная в Bell Labs в 1969—1973 годах, заложила концепцию inode и единый подход к файлам, каталогам и устройствам.
Источники:
- «Операционные системы. Теория и практика» — Э. Таненбаум, Х. Бос
- «UNIX и Linux: руководство системного администратора» — Э. Немет, Г. Снайдер, Т.Р. Немет, Б. Уэйли
- Документация проектов ext4, XFS, Btrfs, OpenZFS
- Microsoft Docs: NTFS, exFAT specification
