Linux & Administration

Файловые системы

Способ организации данных на диске: как файлы раскладываются по блокам, где хранятся их имена, права и метаданные.

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

Файловая система (ФС) — правила, по которым операционная система размещает данные на диске и находит их обратно. Физически накопитель — это просто пронумерованные блоки по 4 КБ. Файловая система превращает их в дерево папок и файлов: ведёт учёт, какие блоки заняты, какие свободны, кому принадлежит файл и кто имеет право его читать.

Аналогия: диск — склад с пронумерованными ячейками, файловая система — журнал учёта. Отформатировать диск означает завести новый пустой журнал; старые коробки на складе физически ещё лежат, но найти их штатными средствами уже нельзя. Отсюда и то, что удалённые файлы часто удаётся восстановить.

Что такое inode

inode (index node, индексный дескриптор) — запись с метаданными одного файла. В ней лежит всё, кроме двух вещей:

Есть в inode Нет в inode
тип файла и права доступа имя файла
владелец (UID) и группа (GID) само содержимое
размер
временные метки (mtime, ctime, atime)
счётчик жёстких ссылок
указатели на блоки с данными

Имя файла хранится не в inode, а в каталоге — каталог это просто таблица «имя → номер inode». Из этого следует всё остальное: жёсткие ссылки — несколько имён на один inode; переименование файла не трогает данные; а rm уменьшает счётчик ссылок и освобождает блоки, только когда он дошёл до нуля и файл никем не открыт.

Практическое следствие, которое однажды всех кусает:

df -h     # Use% 45% — места вагон
df -i     # IUse% 100% — а inode кончились

No space left on device при свободном месте означает, что исчерпаны inode. В ext4 их количество фиксируется при форматировании, и миллион мелких файлов сессий или кеша съедает их раньше, чем гигабайты. Лечится чисткой мелочи или переносом на XFS, где inode выделяются динамически.

Какие бывают файловые системы

ФС Где по умолчанию Стоит знать
ext4 Debian, Ubuntu рабочая лошадка, журналируемая, предсказуемая
XFS RHEL, AlmaLinux, Rocky хороша на больших файлах и параллельной записи, inode динамические
Btrfs openSUSE, Fedora снапшоты, сжатие, контрольные суммы прямо в ФС
ZFS FreeBSD, ставится в Linux снапшоты, RAID и проверка целостности в одном, любит RAM
NTFS Windows основная ФС Windows, в Linux читается и пишется
exFAT флешки, карты памяти понимают все ОС, но без прав доступа и журнала
FAT32 старые флешки, UEFI-разделы файл больше 4 ГБ записать невозможно

Журналирование (есть в ext4, XFS, NTFS) — запись намерений перед самой операцией. При отключении питания система по журналу понимает, что осталось незавершённым, и не остаётся с рассыпавшимся деревом каталогов.

Для сервера выбор обычно тривиален: берите то, что дистрибутив предлагает по умолчанию — ext4 или XFS. Btrfs и ZFS осмысленны, когда нужны их снапшоты и контрольные суммы.

Работа с ФС на сервере

lsblk -f                          # диски, разделы, их ФС и UUID
df -h && df -i                    # место и inode
du -sh /var/log/* | sort -rh | head   # кто съел место
mkfs.ext4 /dev/sdb1               # создать ФС (данные на разделе умрут)
mount /dev/sdb1 /mnt/data         # примонтировать
tune2fs -m 1 /dev/sdb1            # снизить резерв под root с 5% до 1%

Чтобы диск подключался после перезагрузки, его прописывают в /etc/fstab — обязательно по UUID из lsblk -f, а не по /dev/sdb1: буквы устройств могут поменяться местами при следующей загрузке, и сервер уйдёт в аварийный режим.

В облаке и контейнерах

Диск облачного сервера — обычно сетевой том, а не физический SSD в шасси. Файловая система на нём та же, но производительность ограничена не диском, а квотой по IOPS. Файловая система живёт и в persistent volume контейнеров — а вот объектное хранилище файловой системой не является: там нет ни папок, ни inode, только плоский набор объектов по ключу.

Связанные термины

  • SSD и HDD — носители, поверх которых лежит ФС
  • RAID — объединение дисков под файловой системой
  • Linux — где встречаются ext4 и XFS
  • Утилиты Linux — chmod, du, df и работа с правами
  • object storage — хранение без файловой системы
  • Резервное копирование — то, чем снапшоты ФС не заменяются

Готовы запустить GPU-задачу?

Запустить GPU-сервер