Русская Википедия: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].
Комментарии
- ↑
mount -t ext4 /dev/sda2 /mnt/ -o rw,iversion
Примечания
Ссылки
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web
- Ext4: The Next Generation of Ext2/3
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web