ext4

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

ext4
Разработчик Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh и другие
Файловая система Fourth extended file system
Дата представления Стабильная версия:
21 октября 2008
Тестовая версия:
10 октября 2006 (Linux 2.6.28, 2.6.19)
Метка тома 0x83 (MBR)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)
Структура
Содержимое папок Связный список, B-дерево[1]
Размещение файлов Битовая карта/экстенты
Сбойные сектора Table
Ограничения
Максимальный размер файла 16 тебибайт (размер кластера 4 кибибайта)
Максимум файлов 4 миллиарда (задаётся во время создания ФС)
Максимальная длина имени файла 255 байт
Максимальный размер тома 1 эксбибайт (ограничен до 16 тебибайт из-за ограничений e2fsprogs)
Допустимые символы в названиях Все байты кроме NULL и '/'
Возможности
Свойства modification (mtime), attribute modification (ctime), access (atime), delete (dtime), create (crtime)
Диапазон дат 14 декабря 1901 - 25 апреля 2514
Точность хранения даты Наносекунда
Потоки метаданных Нет
Атрибуты extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
Права доступа POSIX
Фоновая компрессия Нет
Фоновое шифрование Нет
Поддерживается ОС Linux, Windows (IFS)

ext4 (англ. fourth extended file system, ext4fs) — журналируемая файловая система, используемая в операционных системах с ядром Linux, созданная на базе ext3.

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

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

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

Особенности[править | править код]

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

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

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

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

В сравнении с ext3 поднято ограничение на число вложенных каталогов с 32 000 подкаталогов до 65 535 (при этом в некоторых случаях требуется изменить константы ядра).

Резервирование несколько inode при создании каталога (англ. directory inodes reservation) позволяет сначала использовать зарезервированные inode, и только если таковых не осталось, выполняется обычная процедура выделения inode. Размер inode по умолчанию увеличен с 128 (ext3) до 256 байтов, что позволило реализовать временные метки с наносекундной точностью (англ. nanosecond timestamps) и расширить их диапазон (в ext3 верхней границей хранимого времени было 18 января 2038 года, а у ext4 — 25 апреля 2514 года), добавить поле версии inode и поддержать расширенные атрибуты inode. Номер версии inode может увеличиваться при каждом её изменении, в частности, если файловая система монтирована с опцией iversion[3]: это используется демонами сетевой файловой системы NFS версии 4 (NFSv4) для отслеживания изменений файлов. Хранение расширенных атрибутов в структуре inode (англ. extended attributes (EA) in inode), таких как списки контроля доступа (ACL), атрибуты SELinux и другие, позволяет повысисть производительность за счёт исключения операций поиска атрибутов в каком-либо другом месте. Атрибуты, для которых недостаточно места в структуре inode, хранятся в отдельном блоке размером 4 KB.

Для записей журнала реализовано вычисление контрольных сумм (англ. journal checksumming), что позволяет быстрее находить и в некоторых случаях исправлять ошибки системы после сбоя.

Предварительное выделение (persistent preallocation), в отличие от ext2 и ext3 (где программам приходилось записывать в файл нулевые байты) реализовано как отдельный системный вызов fallocate(), который выделяет для файла блоки и устанавливает для них флаг «заполнены нулевыми байтами». При чтении из файла программа получит нулевые байты (так же, как при чтении разреженного файла). При записи в файл флаг «заполнены нулевыми байтами» будет снят. В отличие разреженных файлов запись в такой файл никогда не прервётся из-за нехватки свободного места.

Поддерживается дефрагментация без размонтирования (online defragmentation) — утилитой e4defrag, поставляемой в составе пакета e2fsprogs с 2011 года[4].

Поддержка в операционных системах[править | править код]

Поддерживается в большинстве систем на основе ядра Linux, кроме того, есть ряд решений, обеспечивающих поддержку ext4 в Windows — coLinux, Ext2read (в режиме только для чтения), Ext2Fsd, Paragon ExtFS for Windows.

Во многих дистрибутивах Linux используется как файловая система по умолчанию:

  • Ubuntu: с 9.04 доступна для выбора по желанию пользователя, начиная с 9.10 — по умолчанию;
  • Debian: с 6.0: доступна для выбора, начиная с 7.0 — используется по умолчанию;
  • Fedora: начиная с 9 доступна для выбора, с 11 — по умолчанию.
  • OpenSUSE: начиная с 11.2 используется по умолчанию;
  • Mandriva Linux: от версии 2010 применяется по умолчанию;
  • Red Hat Enterprise Linux: наичная с версии 6 — по умолчанию[5].
  • PCLinuxOS: от версии 2010 используется по умолчанию.

Также система доступна для Android, начиная с версии 2.3[6][7].

Примечания[править | править код]

  1. Hashed B-tree
  2. Официальное объявление Эндрю Мортона о включении поддержки ext4 (англ.) (txt(недоступная ссылка). Архивировано 7 августа 2008 года.
  3. mount -t ext4 /dev/sda2 /mnt/ -o rw,iversion</syntaxhighlight>
  4. Include ext4 defragmenting tool
  5. Release Notes for Red Hat Enterprise Linux 6 - File Systems (англ.). Архивировано 3 июня 2012 года.
  6. Ts'o, Theodore. Android will be using ext4 starting with Gingerbread, Thoughts by Ted (12 December 2010). Дата обращения 20 декабря 2010.
  7. Android 2.3 Platform Highlights. Android Developers (6 December 2010). Дата обращения 7 декабря 2010. Архивировано 21 января 2012 года.

Ссылки[править | править код]