Что такое файловая система и зачем она нужна
Файловая система - компонент операционной системы, который организует данные на носителе: даёт им имена, хранит метаданные, выстраивает дерево каталогов и распределяет пространство тома или раздела. Диск без неё хранит неразмеченный поток байт, где адрес каждого документа приходится помнить вручную.
Практическая польза сводится к четырём вещам: данные получают адрес по имени, а не по номеру блока; права доступа не дают одному процессу затереть файлы другого; свободное место учитывается автоматически; после сбоя питания структура остаётся пригодной для чтения. За этой простотой стоит набор служб: именование, учёт метаданных, иерархия каталогов, карта свободных блоков, разграничение прав, журналирование и снапшоты.
Логический уровень - это файлы, папки, пути и права, которые видит человек. Физический уровень - секторы, блоки и кластеры на носителе. Файловая система работает переводчиком между ними и прячет разброс данных по диску за понятными именами.
Нагрузка на этот слой растёт. Число атак программ-вымогателей в европейском регионе за первые четыре месяца 2026 года выросло на 55,1% год к году, а производственный сектор занял 27,9% публично раскрытых инцидентов. Шифрование, снапшоты и контроль целостности на уровне файловой системы в 2026 году входят в базовый набор защиты данных наравне с резервным копированием.
Определение и основные задачи
Файловая система закрывает семь задач, и каждая из них видна в ежедневной работе администратора:
- Именование. Каждый объект получает имя и путь в дереве каталогов, поэтому обращение идёт к /etc/nginx/nginx.conf, а не к блокам 88213-88219.
- Хранение метаданных. Размер, владелец, права, временные метки и расположение блоков лежат рядом с данными и обновляются при каждой операции.
- Иерархия каталогов. Дерево каталогов даёт единое пространство имён: один корень, вложенные папки, жёсткие и символические ссылки.
- Распределение пространства. Файловая система ведёт учёт занятых и свободных блоков и выдаёт их файлам по мере роста.
- Разграничение доступа. Права POSIX, списки ACL, атрибуты и владельцы определяют, кто и что может читать, писать и запускать.
- Целостность. Журналирование, контрольные суммы и копирование при записи защищают структуру от повреждения после сбоя.
- Обслуживание. Снапшоты, квоты, сжатие, дедупликация и шифрование выполняются средствами самой файловой системы.
Проверить это утверждение просто: любая СУБД, которой нужна максимальная скорость, просит raw-устройство или специальные режимы ввода-вывода, потому что слой файловой системы добавляет трансляцию адресов. Для задач общего назначения такая плата окупается удобством и защитой данных.
Логическая и физическая структура: в чём разница
Файл report.pdf на логическом уровне - один объект с именем, размером 2,4 МБ и путём /home/user/report.pdf. На физическом уровне это набор кластеров, которые могут лежать в разных частях диска: 4021, 4022, 8807, 91 004. Связь между ними хранит служебная структура, а пользователь её не видит.
Отсюда следуют практические выводы. Перемещение файла в пределах одного тома меняет только запись в каталоге, данные остаются на месте и операция занимает миллисекунды. Копирование на другой том всегда означает физическую перезапись всех кластеров. Фрагментация появляется, когда свободные кластеры разбросаны и файл собирается из кусочков в разных зонах диска.
Второе следствие касается производительности. Логическая последовательность файла не совпадает с физической раскладкой, поэтому последовательное чтение большого файла может превратиться в набор разрозненных обращений к диску. Дефрагментация, выравнивание разделов и продуманный размер кластера сокращают эту разницу.
Структура файловой системы: суперблок, таблица размещения файлов и метаданные
Служебные структуры делятся на два класса: одни описывают саму файловую систему, другие - каждый файл по отдельности. Первые отвечают на вопрос, где искать данные, вторые хранят свойства конкретного объекта.
Суперблок: главный управляющий элемент
Суперблок - структура с общими сведениями о файловой системе: тип и версия, размер блока, общее число блоков и индексных дескрипторов, счётчики свободного места, состояние (чистая или требует проверки), UUID, метка тома, время последнего монтирования.
Повреждение суперблока делает том недоступным целиком, даже если данные физически целы. Поэтому в ext4 суперблок дублируется в каждой группе блоков: первый экземпляр лежит со смещением 1024 байта, резервные копии создаются с шагом 32768 блоков и далее по прогрессии. Восстановление идёт командой fsck с указанием резервной копии. Посмотреть параметры можно через tune2fs -l и dumpe2fs, в XFS аналог называется xfs_info, а состояние пула ZFS показывает zpool status.
Практический пример: если после сбоя контроллера том не монтируется, сначала проверяют целостность резервных копий суперблока, и только потом запускают полную проверку, которая на массиве в 20 ТБ может идти часами.
Таблица размещения файлов (FAT) и её роль
Таблица размещения файлов хранит по одной записи на каждый кластер. Запись содержит номер следующего кластера в цепочке файла либо маркер: свободен, конец цепочки, сбойный кластер. Так файловая система связывает разрозненные кластеры в один логический объект.
Схема используется в FAT12, FAT16, FAT32 и exFAT, её до сих пор выбирают для флешек и карт памяти, потому что формат понимают камеры, телевизоры и автомагнитолы. Ограничения известны: отсутствие журналирования, склонность к фрагментации, нет владельцев и прав доступа, нет контрольных сумм. FAT32 не принимает файл больше 4 ГБ, exFAT снимает этот лимит и работает с файлами до 16 ЭБ.
Современные файловые системы ушли дальше. ext4 хранит данные в extent-ах (непрерывных диапазонах блоков) и ведёт дерево экстентов, XFS использует B-деревья для свободного пространства и каталогов, NTFS опирается на главную файловую таблицу, ZFS строит дерево блоков с указателями и контрольными суммами. Общий принцип один: вместо длинных цепочек по одному кластеру применяют описания диапазонов.
Метаданные файла: что это и где хранится
Метаданные описывают файл и не содержат его содержимого. В Unix-подобных системах они лежат в индексном дескрипторе inode, в NTFS - в записи главной файловой таблицы MFT, в ZFS - в структуре dnode.
| Метаданные | Что описывают | Где видны в работе |
|---|---|---|
| Имя и путь | Логический адрес в дереве каталогов | Обход каталогов, поиск по маске |
| Размер | Число байтов и занятых блоков | Отчёты о занятом месте, квоты |
| Временные метки | Создание, изменение, последний доступ | Ротация логов, поиск свежих изменений |
| Права и владелец | Режим rwx, uid, gid, списки ACL | Проверка доступа, аудит |
| Ссылки | Число жёстких ссылок | Освобождение блоков только после последней ссылки |
| Расположение | Список блоков или extent-ов | Диагностика фрагментации и медленного чтения |
| Атрибуты | Расширенные атрибуты, метки SELinux | Политики доступа и контейнеры |
Число inode в ext4 задаётся при создании файловой системы. На разделе с миллионами мелких файлов легко получить ошибку нехватки места при формально свободных гигабайтах: заканчиваются индексы, а не блоки. Для каталогов с почтой, кэшем или миллионами сессий число inode планируют заранее.
Метаданные важны и за пределами локального диска. В PostgreSQL список тегов или атрибутов файла можно сериализовать в массив и держать в одной колонке типа text[], но поиск по элементам ускоряет только GIN-индекс. Условие вида tags @> ARRAY['value'] читает индекс, а запись 'value' = ANY(tags) заставляет просматривать таблицу целиком. В MongoDB multikey-индекс по массиву создаётся автоматически, в MySQL данные лежат в JSON, а multi-valued индекс доступен с версии 8.0.17. На таблице в миллион строк с двумя тегами перебор без индекса укладывается в 200 мс на прогретом кэше, но при холодном кэше и параллельных запросах время вырастает до секунд.
Том, раздел, кластер: разбираем ключевые термины
Иерархия хранения выстраивается сверху вниз: физический диск, раздел, том, файловая система, кластеры, файлы. Путаница между этими уровнями мешает читать документацию по LVM, TrueNAS и ZFS, поэтому разберём каждый термин отдельно.
Раздел и том: не одно и то же
Раздел - область на физическом диске, границы которой заданы таблицей разделов при разметке. Том - логическая единица хранения, которую операционная система видит как самостоятельное устройство. Простой том лежит внутри одного раздела, составной может объединять несколько разделов и даже несколько дисков.
В Windows том C: часто занимает ровно один раздел, поэтому разницу не замечают. В Linux картина нагляднее: LVM собирает физические тома PV в группу VG, а из неё нарезает логические тома LV, которые можно расширять на ходу без перезагрузки. Программный RAID и пулы ZFS работают на том же принципе: один том собирается из нескольких накопителей, а отказоустойчивость обеспечивает избыточность, а не отдельный диск.
Разметку под конкретную нагрузку удобно планировать заранее: архитектура программного хранилища разбирает уровни от дисков и RAID до пула, кэша и репликации, что помогает выбрать схему до первой записи данных. Разницу между файловым, блочным и объектным доступом к такому тому помогает увидеть сравнение объектного, блочного и файлового хранилищ.
Кластер и сектор: минимальные единицы хранения
Сектор - минимальная физическая единица на носителе, чаще всего 512 байт или 4 КБ. Кластер - группа секторов, которой оперирует файловая система при выделении места. Размер кластера задают при форматировании: 4 КБ для ext4, 4 КБ по умолчанию для NTFS на томах до 16 ТБ, 64 КБ для некоторых томов с большими файлами.
Размер кластера определяет потери. Файл на 1 КБ при кластере 4 КБ занимает 4 КБ, три четверти места пропадают впустую. Миллион мелких файлов превращает эту разницу в гигабайты. Слишком крупный кластер ускоряет работу с большими файлами, но увеличивает потери на мелочи, поэтому размер подбирают под профиль данных.
| Термин | Уровень | Кто управляет | Пример |
|---|---|---|---|
| Сектор | Физический | Накопитель и контроллер | 512 байт, 4 КБ |
| Кластер | Физический | Файловая система | 4 КБ в ext4 и NTFS |
| Раздел | Логический | Разметка диска | /dev/sda2 |
| Том | Логический | LVM, RAID, пул ZFS | LV размером 2 ТБ |
ZFS обходит понятие фиксированного кластера: данные пишутся блоками переменного размера, а свойство recordsize задаёт верхнюю границу, 128 КБ по умолчанию. Маленький файл занимает маленький блок, поэтому потерь на выравнивание нет. В TrueNAS пул ZFS выступает томом, а наборы данных внутри пула ведут себя как отдельные файловые системы.
Как операционная система, драйвер и файловая система взаимодействуют при чтении и записи
Приложение никогда не обращается к диску напрямую. Между ним и носителем стоят системные вызовы, виртуальная файловая система, конкретный драйвер файловой системы, драйвер накопителя и контроллер.
Путь данных при чтении файла
- Приложение вызывает open() и read(), передавая путь и смещение.
- Ядро через VFS (Virtual File System) определяет, какая файловая система смонтирована в этой точке дерева.
- Файловая система проверяет права доступа по метаданным: uid, gid, режим, списки ACL.
- По логическому смещению находятся номера блоков: через inode и extent-ы в ext4, через дерево блоков в ZFS, через записи MFT в NTFS.
- Page cache проверяется на попадание: если страница уже в памяти, обращение к диску не нужно.
- Запрос уходит драйверу накопителя (NVMe, SATA, SCSI), тот формирует команды для контроллера.
- Контроллер читает секторы и возвращает данные в буфер приложения, попутно обновляя кэш.
Каждый шаг может стать узким местом. Промахи page cache повышают нагрузку на накопитель, проверка прав на сетевом хранилище добавляет задержку, а блокировки метаданных ограничивают параллельную работу тысяч процессов с одним каталогом.
Путь данных при записи и роль журналирования
Запись проходит похожий маршрут с добавлением буферизации и защиты от сбоев:
- Приложение вызывает write(), данные попадают в page cache, страница помечается как грязная.
- Файловая система формирует блоки и готовит изменения метаданных: размер, время изменения, карта свободного места.
- Журнал (jbd2 в ext4, лог XFS, $LogFile в NTFS) фиксирует намерение изменить структуру до того, как правки уйдут на диск.
- Фоновый сброс (writeback) выгружает грязные страницы, обычно в пределах 30 секунд; вызов fsync() заставляет сбросить данные немедленно.
- После сбоя журнал переигрывает завершённые транзакции и отбрасывает незавершённые, поэтому проверка тома занимает секунды, а не часы.
Журналирование защищает структуру файловой системы, но не содержимое файлов: если приложение записало половину блока и питание пропало, данные внутри файла останутся неполными. От этого спасают только fsync() в нужных местах и резервные копии. ZFS решает задачу иначе: блоки не перезаписываются на месте, новое содержимое пишется рядом, а указатель в дереве обновляется атомарно. Промежуточное состояние невозможно увидеть, потому что старый блок остаётся целым до момента переключения указателя.
Понимание маршрута данных ускоряет диагностику. Утилиты iostat, iotop и blktrace показывают, на каком уровне теряется скорость: в очереди накопителя, в промахах кэша или в ожидании блокировки метаданных. Для тестовых стендов удобно арендовать облачный сервер: Timeweb Cloud даёт VDS и VPS с локальными и сетёвыми дисками, базами данных и Kubernetes, а ресурсы можно менять под нагрузку.
Файловая система и ZFS: как базовые принципы работают в современных хранилищах
ZFS объединяет менеджер томов и файловую систему в одном слое, поэтому привычные понятия получают новые имена и дополнительную логику.
Пул, датасет и снапшот: терминология ZFS
Пул (zpool) занимает место тома: он собирается из виртуальных устройств vdev и распределяет данные по дискам. Датасет ведёт себя как файловая система внутри пула: у него свои квоты, сжатие, recordsize, шифрование и снапшоты. Наследование свойств идёт сверху вниз, поэтому общие параметры задают на пуле, а переопределяют на конкретном датасете.
Пример из практики TrueNAS: датасет под виртуальные машины получает recordsize 16 КБ, потому что гипервизор пишет блоками такого размера; датасет под документы и архивы получает 128 КБ; датасет под базу данных тестируют отдельно, потому что размер блока влияет на задержку сильнее, чем тип диска. Снапшот фиксирует состояние датасета на момент времени и занимает место только под изменения.
Copy-on-Write и контрольные суммы: почему ZFS надёжнее традиционных ФС
При копировании при записи новые данные ложатся в свободные блоки, а после подтверждения записи обновляются указатели. Сбой питания в любой момент оставляет либо старую, либо новую версию, промежуточной нет. Из этого же принципа вытекают дешёвые снапшоты, клоны и репликация через zfs send и zfs receive.
Каждый блок снабжается контрольной суммой, которая проверяется при чтении. Если сумма не сходится, ZFS берёт копию с другого диска, где данные уцелели, и возвращает верные байты приложению. Так закрывается проблема тихого повреждения данных, которое обычные файловые системы замечают только по симптомам в приложении. Регулярный scrub проверяет весь пул целиком, а fsck после сбоя не нужен вовсе.
Сравнить поведение разных файловых систем на схожих нагрузках помогает материал ZFS, XFS и Btrfs для СХД в 2026 году: там разобраны целостность, снапшоты, требования к памяти и рекомендации для домашнего NAS и корпоративного хранилища.
Актуальность в 2026 году: что меняется в работе с файловыми системами
Базовые принципы остались теми же, а вот требования к надёжности, скорости и безопасности выросли.
Тренды: NVMe, ZFS и рост требований к целостности
NVMe вытесняет SATA в серверном сегменте: накопители на PCIe 4.0 и 5.0 отдают сотни тысяч операций в секунду, и именно файловая система становится ограничителем. Очереди, блокировки метаданных и размер блока влияют на результат сильнее, чем пропускная способность шины. Копирование при записи и контрольные суммы перешли из премиального сегмента в обычный: их ждут и от корпоративного хранилища, и от домашнего NAS.
Давление со стороны уязвимостей растёт. Прогноз на 2026 год содержит 59 427 новых CVE, это примерно одна уязвимость каждые девять минут. Более 23% известных эксплуатируемых уязвимостей применяют в день публикации бюллетеня безопасности или раньше, поэтому обновление ядра и драйверов хранилища перестало быть неспешной плановой задачей. Ещё 64 организации пострадали через компрометацию третьих сторон, что заставляет проверять не только свои серверы, но и цепочку поставок.
Мониторинг в 2026 году закрывает три задачи сразу: доступность сервисов, обнаружение атак и доказательную базу для аудита. Сравнение с фиксированным порогом уступает поиску аномалий, а события выгружаются в SIEM и систему тикетов, иначе расследование упирается в отсутствие данных. Понимание пути чтения и записи помогает настраивать такие проверки: рост времени доступа к метаданным, всплеск ошибок контрольных сумм и неожиданные изменения в каталогах видны раньше, чем откажет сервис.
Для анализа больших объёмов логов и метаданных всё чаще привлекают языковые модели, а доступ к GPT, Gemini и Claude удобно получать через единый шлюз, например AiTunnel, с оплатой в рублях и управлением бюджетами по ключам.
Безопасность файловых систем: шифрование и контроль доступа
Шифрование на уровне файловой системы стало обычной практикой: ZFS encryption с AES-256-GCM, LUKS2 с AES-XTS в Linux, BitLocker в Windows. Ключи хранят отдельно от носителя, а для датасетов TrueNAS задают отдельные ключи и политику их отзыва.
Разграничение доступа вышло за пределы режима rwx: списки ACL, мандатные метки, изоляция контейнеров и права на уровне каталогов определяют, что увидит процесс. Аудит фиксирует обращения к чувствительным файлам, история пула и записи о снапшотах дают доказательную базу при разборе инцидента. Материал сжатие, дедупликация и шифрование на ZFS, LVM и RAID показывает, как эти механизмы влияют на IOPS и задержку и какие настройки подходят базам данных и файловым хранилищам.
Глоссарий терминов
| Термин | Определение |
|---|---|
| Файловая система | Компонент ОС, который организует данные на носителе, даёт им имена, хранит метаданные, ведёт дерево каталогов и распределяет пространство. |
| Логическая структура | Файлы, каталоги, пути и права, которые видит пользователь и приложение. |
| Физическая структура | Секторы, блоки, кластеры и extent-ы на носителе. |
| Сектор | Минимальная физическая единица накопителя, обычно 512 байт или 4 КБ. |
| Кластер | Группа секторов, которой файловая система выделяет место файлу. |
| Суперблок | Структура с общими сведениями о файловой системе: тип, размер, число индексных дескрипторов, карта свободного места, состояние. |
| Таблица размещения файлов | Таблица цепочек кластеров, где для каждого кластера указан следующий или маркер конца, свободы, сбоя. |
| Метаданные | Данные о файле: имя, размер, временные метки, владелец, права, расположение блоков, атрибуты. |
| Индексный дескриптор | Запись inode в Unix-подобных системах, где хранятся метаданные и указатели на блоки. |
| Дерево каталогов | Иерархия папок и файлов с единым корнем и путями. |
| Раздел | Область на диске с заданными границами, созданная при разметке. |
| Том | Логическая единица хранения, которая может занимать раздел, несколько разделов или несколько дисков. |
| Драйвер | Компонент ОС, который переводит запросы файловой системы в команды накопителя. |
| VFS | Прослойка ядра, которая направляет системные вызовы нужной файловой системе. |
| Журналирование | Запись намерений изменить структуру до самих изменений, что ускоряет восстановление после сбоя. |
| Copy-on-Write | Подход, при котором новые данные пишутся в свободные блоки, а указатели обновляются после успешной записи. |
| ZFS | Файловая система и менеджер томов с контрольными суммами, снапшотами, клонами и копированием при записи. |
| Пул | Объединение дисков в ZFS, которое распределяет данные и обеспечивает избыточность. |
| Датасет | Набор данных внутри пула ZFS со своими квотами, свойствами и снапшотами. |
| Снапшот | Зафиксированное состояние файловой системы или датасета на момент времени. |
| Recordsize | Свойство ZFS, задающее верхнюю границу размера блока данных, 128 КБ по умолчанию. |
| TrueNAS | Платформа хранения, где пулы и датасеты ZFS настраиваются через веб-интерфейс. |
Дальше логично перейти к практике: разметке дисков, созданию пулов в TrueNAS, настройке снапшотов и выбору файловой системы под конкретную нагрузку. Термины из этого материала понадобятся в каждом таком руководстве.