ext4 () — журналируемая файловая система, используемая преимущественно в операционных системах с ядром Linux, созданная на базе ext3 в 2006 году.
Основные изменения в ext4 по сравнению с ext3: увеличен максимальный объём одного раздела диска до () при размере блока 4 килобайта; увеличен размер одного файла до (); введён механизм протяжённой (extent) записи файлов, уменьшающий фрагментацию и повышающий производительность (новая информация добавляется в конец области диска, выделенной заранее по соседству с областью, занятой файлом); поднято ограничение на число вложенных каталогов с подкаталогов до (при этом в некоторых случаях требуется изменить константы ядра).
История Первая экспериментальная реализация выпущена Эндрю Мортоном 10 октября 2006 года в виде патча к ядрам Linux версий 2.6.19.
Особенности
В сравнении с ext3 в ext4 увеличено адресное пространство и ускорена работа с данными.
Система адресации Система адресации основана на экстентах (). В ext3 адресация данных выполнялась традиционным образом — поблочно, в связи с чем система сталкивалась с существенными ограничениями с ростом размера файлов. Экстенты позволяют адресовать большое количество () последовательно идущих блоков одним дескриптором; до четырёх указателей на экстенты может размещаться непосредственно в inode, этого достаточно для файлов малого и среднего размера.
Применены 48-битные номера блоков, при размере блока это позволяет адресовать до одного эксбибайта (248·() = 248·(22)·(210) Б = = ).
Блоки и фрагментация Выделение блоков группами () позволяет снизить уровень фрагментации файловой системы: система хранит информацию не только о местоположении свободных блоков, но и о количестве свободных блоков, расположенных друг за другом, таким образом, при выделении места система находит такой фрагмент, в который данные можно записать без фрагментации.
Поддерживается дефрагментация без размонтирования () — утилитой e4defrag, поставляемой в составе пакета e2fsprogs с 2011 года.
Групповая запись блоков Отложенное выделение блоков () обеспечивает непосредственную запись на блочное устройство только при необходимости (например, при вызовах sync(), но не при каждом вызове write()), что позволяет записывать блоки не по одному, а группами, что в свою очередь минимизирует фрагментацию и ускоряет процесс выделения блоков. С другой стороны, увеличивается риск потери данных в случае внезапного пропадания питания.
Изменения в inode Резервирование несколько inode при создании каталога () позволяет сначала использовать зарезервированные inode, и только если таковых не осталось, выполняется обычная процедура выделения inode. Размер inode по умолчанию увеличен с 128 (ext3) до 256 байтов, что позволило реализовать временные метки с наносекундной точностью () и расширить их диапазон (в ext3 предельная дата — 18 января 2038 года, а у ext4 — 25 апреля 2514 года), добавить поле версии inode и поддержать расширенные атрибуты inode. Номер версии inode может увеличиваться при каждом её изменении, в частности, если файловая система смонтирована с опцией iversionmount -t ext4 /dev/sda2 /mnt/ -o rw,iversion: это используется демонами сетевой файловой системы NFS версии 4 (NFSv4) для отслеживания изменений файлов.
Хранение расширенных атрибутов в структуре inode (), таких как списки контроля доступа (ACL), атрибуты SELinux и другие, позволяет повысисть производительность за счёт исключения операций поиска атрибутов в другом месте. Атрибуты, для которых недостаточно места в структуре inode, хранятся в отдельном блоке размером .
Журналирование и другие особенности Для записей журнала реализовано вычисление контрольных сумм (), что позволяет быстрее находить и в некоторых случаях исправлять ошибки системы после сбоя.
Предварительное выделение (), в отличие от ext2 и ext3 (где программам приходилось записывать в файл нулевые байты), реализовано как отдельный системный вызов fallocate(), который выделяет для файла блоки и устанавливает для них флаг «заполнены нулевыми байтами». При чтении из файла программа получит нулевые байты (так же, как при чтении разрежённого файла). При записи в файл флаг «заполнены нулевыми байтами» будет снят. В отличие от разрежённых файлов запись в такой файл никогда не прервётся из-за нехватки свободного места.
Поддержка в операционных системах
Ext4 поддерживается в ядре Linux начиная с версии 2.6.20. Существуют программы и драйверы для работы с ext4 в Windows: Ext2read (в режиме только для чтения), Ext2Fsd, Paragon ExtFS for Windows.
Во многих дистрибутивах Linux ext4 используется как файловая система по умолчанию: Ubuntu: с 9.04 доступна для выбора по желанию пользователя, начиная с 9.10 — по умолчанию; Debian: с 6.0: доступна для выбора, начиная с 7.0 — используется по умолчанию; Fedora : начиная с 9 доступна для выбора, с 11 по 32 — по умолчанию. OpenSUSE: начиная с 11.2 используется по умолчанию; Mandriva Linux: от версии 2010 применяется по умолчанию; Red Hat Enterprise Linux: начиная с версии 6 — по умолчанию; PCLinuxOS: начиная с версии 2010 используется по умолчанию.
Файловая система ext4 доступна для Android начиная с версии 2.3.
Комментарии
Примечания
Ссылки
Ext4: The Next Generation of Ext2/3
Категория:Журналируемые файловые системы Категория:Linux Категория:Файловые системы