Computer Science
March 20

Про файловые системы и их особенности

Если остались вопросы: https://chat.deepseek.com/share/dlow1mul5yxcuuezim

1. Что такое файловая система?

Файловая система — это совокупность структур данных и программных механизмов, которые организуют хранение, идентификацию и доступ к данным на носителе (HDD, SSD, флешке, RAID-массиве).

Простыми словами, это «библиотечный каталог» накопителя. Если диск — это склад с книгами, то ФС — это система стеллажей, полок и картотеки, которая позволяет быстро найти нужную книгу (файл), узнать, где она находится, кто ее автор (метаданные) и не занято ли место для новой книги.


2. Принципы работы

Независимо от типа, ФС решает три основные задачи:

  1. Отслеживание свободного и занятого пространства.
  2. Управление именами и каталогами (иерархия).
  3. Хранение метаданных (размер, время создания, права доступа, владелец).

Основные компоненты структуры:

  • Загрузочная запись (Boot Sector): Первый сектор тома. Содержит код загрузчика (для системных дисков) и параметры ФС (размер кластера, количество секторов).
  • Область метаданных:
    • Таблица размещения файлов (FAT): Простая карта, где каждая ячейка указывает на следующий кластер файла или маркер конца.
    • MFT (Master File Table): Используется в NTFS. Это реляционная база данных, где каждый файл (даже служебный) представлен записью.
    • Иноды (Inodes): В Unix-подобных ФС (ext, UFS, ZFS). Каждый файл имеет индексный дескриптор (inode), содержащий метаданные и список блоков данных. Каталоги в таких системах — это просто файлы, сопоставляющие имена файлов с номерами inode.
  • Область данных: Блоки (кластеры), где лежит содержимое файлов.

Ключевой принцип — фрагментация.
При долгом использовании файл может быть разорван на части (фрагментирован). ФС записывает данные в ближайшие свободные блоки. Если свободное пространство разрозненно, файл разбивается. Скорость чтения падает, так как головке HDD приходится прыгать туда-сюда. SSD фрагментация страшна меньше из-за отсутствия движущихся частей и принципа FTL (Flash Translation Layer).


3. Где используются и как выбрать? (Обзор типов)

Файловые системы делятся на три большие лагеря: Windows, Linux/Unix и Кроссплатформенные/Универсальные.

Семейство FAT (File Allocation Table)

Простейшие ФС. Созданы в 1977 году.

  • FAT32:
    • Принцип: Таблица размещения файлов (FAT). Корневой каталог имеет фиксированный размер.
    • Ограничения: Максимальный размер файла — 4 ГБ. Максимальный размер тома — 8 ТБ (но Windows ограничивает форматирование 32 ГБ).
    • Где используется: Флешки, карты памяти SD/SDHC, устаревшие устройства (мультимедиа в авто, старые камеры). Идеальна для совместимости.
  • exFAT (FAT64):
    • Принцип: Эволюция FAT для флешек. Сняты ограничения на размер файла (до 16 ЭБ).
    • Особенность: Не ведет журналирования (не отслеживает изменения перед их совершением).
    • Где используется: Современные флешки, внешние SSD, SDXC (64+ ГБ). Лучший выбор для внешних накопителей, которые переключаются между Windows, macOS и Linux.

Семейство NTFS (New Technology File System)

Стандарт для Windows, начиная с NT 3.1 (1993).

  • Принцип работы:
    • Журналирование (Journaling): Перед тем как изменить файл, система записывает план действий в журнал ($LogFile). Если происходит сбой питания, система просто откатывает незавершенные операции. Это защищает от логических повреждений.
    • MFT (Master File Table): Все файлы и папки представлены в виде записей в MFT. Для маленьких файлов (до ~900 байт) данные хранятся прямо в MFT (т.н. resident files), что ускоряет доступ.
    • Разрешения (ACL): Поддержка списков контроля доступа (разграничение прав для разных пользователей).
    • Альтернативные потоки данных (ADS): Возможность хранить несколько "невидимых" файлов внутри одного (используется для хранения атрибутов "Скачано из интернета").
  • Где используется: Внутренние диски Windows, системный раздел. На macOS читается только для чтения (без сторонних драйверов), в Linux — через ntfs-3g (стабильно, но медленнее родных ФС).

Семейство Linux (ext)

  • ext2 (Second Extended File System): Не журналируемая. Надежная, но после сбоя требует долгой проверки fsck. Используется для флешек, где важна минимальная запись.
  • ext3: ext2 + журналирование. Устарела.
  • ext4:
    • Принцип: По умолчанию во всех дистрибутивах Linux.
    • Особенности: Поддержка томов до 1 ЭБ, файлов до 16 ТБ. Использует extents (непрерывные блоки вместо битовых карт), что снижает фрагментацию. Поддержка отложенного выделения (allocate-on-flush), что повышает производительность, но увеличивает риск потери данных при внезапном отключении.
    • Где используется: Серверы, десктопы Linux, встроенные системы.

Семейство BSD / Специализированные

  • UFS2 (Unix File System 2):
    • Стандартная ФС для FreeBSD, macOS (в прошлом). Хорошо работает с HDD. Поддержка снэпшотов (моментальных снимков).
  • XFS:
    • Разработана SGI (Silicon Graphics) для высокопроизводительных вычислений.
    • Где используется: По умолчанию в RHEL (Red Hat) и CentOS. Считается лучшей для работы с большими файлами (видеомонтаж, базы данных) и масштабируемости. Онлайн-дефрагментация и увеличение размера на лету.
  • ZFS (Zettabyte File System):
    • Принцип: Не просто ФС, а менеджер томов и ФС в одном флаконе. Изначально для Solaris, сейчас расцветает во FreeBSD и Linux (OpenZFS).
    • Ключевые особенности:
      • Copy-on-Write (CoW): Новые данные никогда не перезаписывают старые поверх. Сначала записываются в новое место, и только когда запись успешна, указатель меняется. Это гарантирует целостность.
      • Проверка целостности (Checksums): Каждый блок данных хешируется. При чтении хеш сверяется, что позволяет детектировать "тихое повреждение данных" (bit rot).
      • RAID-Z: Аналог RAID-5/6, но без "дыры записи" (write hole), характерной для аппаратных RAID.
      • Снапшоты и репликация: Мгновенные копии системы.
    • Где используется: Файловые серверы (NAS: TrueNAS, XigmaNAS), системы хранения данных (СХД), где целостность данных важнее скорости на синтетических тестах.
  • HFS / APFS (Apple):
    • HFS+ (Mac OS Extended): Устаревающая, журналируемая ФС для macOS. Не поддерживает некоторые современные фишки (снапшоты, шифрование на лету).
    • APFS (Apple File System):
      • Принцип: Copy-on-Write, как у ZFS, но оптимизирован для флеш-памяти (SSD). Крайне агрессивное управление пространством.
      • Особенности: Снапшоты для Time Machine, быстрый подсчет размера папок, нативное шифрование, клонирование файлов (мгновенное копирование без дублирования данных).
      • Где используется: Все современные Mac, iPhone, iPad. На Windows не читается без платного софта.

4. Критерии выбора: какую ФС выбрать?

Чтобы выбрать, ответьте на три вопроса:

А. Совместимость (ОС)

  • Windows только: NTFS. Она дает безопасность (права), журналирование и снимает ограничения FAT.
  • macOS только (внутренний диск): APFS (для SSD) или HFS+ (для HDD).
  • Linux только: ext4 (баланс стабильности и скорости) или XFS (для больших данных).
  • Универсальная флешка (Windows, macOS, Linux, ТВ, авто): exFAT. (Если устройство старое, поддерживающее только FAT32, придется мириться с лимитом 4 ГБ).

Б. Тип носителя

  • SSD (твердотельный накопитель):
    • Для Windows: NTFS.
    • Для Linux: ext4 или F2FS (Flash Friendly File System, разработанная Samsung специально для NAND-памяти).
    • Важно: На SSD лучше избегать ФС, которые сильно полагаются на дефрагментацию. Современные ФС (NTFS, APFS, ext4) имеют поддержку TRIM — команды, позволяющей SSD очищать ячейки заранее.
  • HDD (механический):
    • NTFS, ext4, XFS.
  • NAS / Сервер:
    • Если важна целостность данных (фотоархив, бэкапы) — ZFS (TrueNAS) или Btrfs (NAS от Synology, QNAP). Если важна производительность и простота — ext4 или XFS.

В. Требования к надежности и функциональности

  • Журналирование: Необходимо для системных дисков (NTFS, ext4, XFS) для защиты от сбоев питания.
  • Copy-on-Write (ZFS, APFS, Btrfs): Позволяет делать мгновенные снимки (snapshots) и гарантирует, что система не "сломается" в момент сбоя записи. Но CoW-системы требуют больше оперативной памяти (особенно ZFS: правило "1 ГБ RAM на 1 ТБ данных" для дедупликации).