Ext4 — это журналируемая файловая система, использующая структуру на основе inode-ов и блоков.
Ключевые концепции:
- Суперблок: Хранит метаданные о файловой системе (размер, количество блоков, inode-ов и т.д.). Находится в начале файловой системы и имеет резервные копии.
- Группы блоков: Файловая система разбита на группы блоков для улучшения локальности данных и уменьшения фрагментации. Каждая группа имеет свой дескриптор.
- Дескриптор группы блоков: Содержит информацию о конкретной группе: адрес таблицы inode-ов, bitmap блоков, bitmap inode-ов.
- Bitmap блоков (Block Bitmap): Карта занятости блоков в группе.
- Bitmap inode-ов (Inode Bitmap): Карта занятости inode-ов в группе.
- Таблица inode-ов: Массив структур inode.
- Инод (Inode): Структура, описывающая файл или директорию. Хранит метаданные: тип файла, права доступа, владелец, группа, размер, временные метки, указатели на блоки данных.
- Блоки данных: Содержат собственно содержимое файлов. Размер блока настраивается при создании ФС (обычно 4KB).
- Директория: Представляет собой файл, содержащий список записей. Каждая запись связывает имя файла или директории с его номером inode.
Указатели на блоки данных в inode:
- Прямые указатели: Указывают непосредственно на блоки с данными. Обычно их несколько (e.g., 12), что позволяет быстро получить доступ к небольшим файлам.
- Косвенные указатели: Указывают на блоки, содержащие указатели на блоки с данными. Бывают одинарными, двойными, тройными. Используются для больших файлов.
- Extentы: Ext4 ввела extend-ы для улучшения производительности и работы с большими файлами. Extend представляет собой диапазон последовательных блоков, что уменьшает количество указателей в inode.
Журналирование: Ext4 имеет журнал, который записывает изменения перед их применением к основной файловой системе. Это позволяет быстро восстановить ФС после сбоя.
Особенности Ext4:
- Поддержка очень больших файлов (до 16 TiB).
- Поддержка очень больших файловых систем (до 1 EB).
- Увеличение производительности за счет extend-ов.
- Отложенное выделение блоков.
- Контрольные суммы для целостности метаданных.
- Быстрое fstrim/discard для SSD.