Gymterview
junior

Что такое файловая система? Какие файловые системы вы знаете? <!-- grade: junior -->

Файловая система — это способ организации, хранения и доступа к данным на накопителе, определяющий, как данные и метаданные (имя, размер, дата, права) размещаются на диске и как к ним осуществляется доступ.

Аналогия: файловая система — это система полок и папок в библиотеке. Без неё книги (данные) лежали бы одной кучей. Файловая система определяет, как книги расставлены, как составлен каталог (индекс) и как найти нужную книгу по названию.

Основные понятия

  • Файл — именованная последовательность байтов.
  • Каталог (директория) — специальный файл, содержащий список файлов и подкаталогов.
  • Путь — адрес файла в иерархии каталогов (/home/user/file.txt или C:\Users\file.txt).
  • Inode (index node) — структура данных в Unix-подобных ФС, хранящая метаданные файла (размер, владелец, права, указатели на блоки данных). Имя файла хранится в каталоге, а не в inode.

Популярные файловые системы

ФС ОС Макс. размер файла Особенности
ext4 Linux 16 ТБ Стандартная ФС для Linux. Журналирование, extents, обратная совместимость с ext3
NTFS Windows 16 ЭБ Стандартная ФС для Windows. ACL, журналирование, шифрование (EFS), сжатие
FAT32 Кроссплатформенная 4 ГБ Простая, совместима со всеми ОС. Ограничение 4 ГБ на файл. Используется для USB-флешек
exFAT Кроссплатформенная 16 ЭБ «FAT32 без ограничений». Для SD-карт и флешек
XFS Linux 8 ЭБ Высокая производительность для больших файлов. Используется в RHEL/CentOS
ZFS Linux/FreeBSD 16 ЭБ Проверка целостности данных (checksums), снапшоты, встроенный RAID
APFS macOS 8 ЭБ Оптимизирована для SSD, снапшоты, шифрование

Журналирование (Journaling)

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

ФС Журналирование
ext4, NTFS, XFS Да
FAT32 Нет
ZFS Транзакционная модель (COW)

Inode в ext4

  • Каждый файл и каталог имеет inode.
  • Inode содержит: размер, владелец (UID/GID), права (rwxrwxrwx), временные метки (ctime, mtime, atime), указатели на блоки данных.
  • Имя файла -> номер inode (эта связь хранится в каталоге).
  • Один файл может иметь несколько имён (hard links), указывающих на один inode.
  • Количество inode фиксировано при создании ФС — можно исчерпать inode, даже если на диске остаётся место (много мелких файлов).

Значение для Java-разработчика

  • java.nio.file.Path, Files, FileSystem — работа с файлами в Java (NIO.2, начиная с Java 7).
  • Files.getFileStore() — информация о файловой системе.
  • Ограничение FAT32 на 4 ГБ важно при записи больших файлов на USB.
  • В Linux java.nio.file.attribute.PosixFilePermissions позволяет работать с правами доступа (rwx).

Вывод

Файловая система организует данные на накопителе в иерархию файлов и каталогов. ext4 (Linux) и NTFS (Windows) — стандартные ФС для серверов. Журналирование защищает от повреждений при сбоях. Для Java-разработчика важно использовать NIO.2 API (Path, Files) и понимать ограничения конкретных ФС.

На собеседовании: junior-вопрос. Назовите 3-4 файловые системы и их применение. Ключевые моменты: ext4 — Linux, NTFS — Windows, FAT32 — кроссплатформенная с ограничением 4 ГБ. Если расскажете про inode и журналирование — это покажет более глубокое понимание.