Русская Википедия:Ext4

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Заголовок со строчной буквы Шаблон:Карточка файловой системы

ext4 (Шаблон:Lang-en) — журналируемая файловая система, используемая преимущественно в операционных системах с ядром Linux, созданная на базе ext3 в 2006 году.

Основные изменения в ext4 по сравнению с ext3:

  • увеличен максимальный объём одного раздела диска до 1 эксбибайта (260 байт) при размере блока 4 кибибайт;
  • увеличен размер одного файла до 16 тебибайт (244 байт);
  • введён механизм протяжённой (extent) записи файлов, уменьшающий фрагментацию и повышающий производительность (новая информация добавляется в конец области диска, выделенной заранее по соседству с областью, занятой файлом);
  • поднято ограничение на число вложенных каталогов с 32 000 подкаталогов до 65 535 (при этом в некоторых случаях требуется изменить константы ядра).

История

Первая экспериментальная реализация выпущена Эндрю Мортоном 10 октября 2006 года в виде патча к ядрам Linux версий 2.6.19[1].

Особенности

Шаблон:Нет источников в разделе В сравнении с ext3 в ext4 увеличено адресное пространство и ускорена работа с данными.

Система адресации

Система адресации основана на экстентах (Шаблон:Lang-en). В ext3 адресация данных выполнялась традиционным образом — поблочно, в связи с чем система сталкивалась с существенными ограничениями с ростом размера файлов. Экстенты позволяют адресовать большое количество (до 128 MB) последовательно идущих блоков одним дескриптором; до четырёх указателей на экстенты может размещаться непосредственно в inode, этого достаточно для файлов малого и среднего размера.

Применены 48-битные номера блоков, при размере блока 4 KB это позволяет адресовать до одного эксбибайта (248·(4 KB) = 248·(22)·(210) B = 260 B = 1 EB).

Блоки и фрагментация

Выделение блоков группами (Шаблон:Lang-en2) позволяет снизить уровень фрагментации файловой системы: система хранит информацию не только о местоположении свободных блоков, но и о количестве свободных блоков, расположенных друг за другом, таким образом, при выделении места система находит такой фрагмент, в который данные можно записать без фрагментации.

Поддерживается дефрагментация без размонтирования (Шаблон:Lang-en2) — утилитой e4defrag, поставляемой в составе пакета e2fsprogs с 2011 года[2].

Групповая запись блоков

Отложенное выделение блоков (Шаблон:Lang-en2) обеспечивает непосредственную запись на блочное устройство только при необходимости (например, при вызовах sync(), но не при каждом вызове write()), что позволяет записывать блоки не по одному, а группами, что в свою очередь минимизирует фрагментацию и ускоряет процесс выделения блоков. С другой стороны, увеличивается риск потери данных в случае внезапного пропадания питания.

Изменения в inode

Резервирование несколько inode при создании каталога (Шаблон:Lang-en) позволяет сначала использовать зарезервированные inode, и только если таковых не осталось, выполняется обычная процедура выделения inode. Размер inode по умолчанию увеличен с 128 (ext3) до 256 байтов, что позволило реализовать временные метки с наносекундной точностью (Шаблон:Lang-en) и расширить их диапазон (в ext3 предельная дата — 18 января 2038 года, а у ext4 — 25 апреля 2514 года), добавить поле версии inode и поддержать расширенные атрибуты inode. Номер версии inode может увеличиваться при каждом её изменении, в частности, если файловая система смонтирована с опцией iversion[К. 1]: это используется демонами сетевой файловой системы NFS версии 4 (NFSv4) для отслеживания изменений файлов.

Хранение расширенных атрибутов в структуре inode (Шаблон:Lang-en), таких как списки контроля доступа (ACL), атрибуты SELinux и другие, позволяет повысисть производительность за счёт исключения операций поиска атрибутов в другом месте. Атрибуты, для которых недостаточно места в структуре inode, хранятся в отдельном блоке размером 4 KB.

Журналирование и другие особенности

Для записей журнала реализовано вычисление контрольных сумм (Шаблон:Lang-en), что позволяет быстрее находить и в некоторых случаях исправлять ошибки системы после сбоя.

Предварительное выделение (Шаблон:Lang-en2), в отличие от 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 — по умолчанию[3];
  • PCLinuxOS: начиная с версии 2010 используется по умолчанию.

Файловая система ext4 доступна для Android начиная с версии 2.3[4][5].

Комментарии

  1. mount -t ext4 /dev/sda2 /mnt/ -o rw,iversion

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Файловые системы