ext4 (Fourth Extended File system)
Последнее изменение этой страницы: 18:52, 6 декабря 2016.
Полное название | Fourth extended file system |
---|---|
Содержимое каталога | Linked list, hashed B-tree |
Распределение файлов | Extents/Bitmap |
Сбойные блоки | Table |
Limits | |
Макс. размер тома |
1 EiB |
Макс. размер файла | 16 TiB (for 4k block filesystem) |
Макс. количество файлов | 4 billion (specified at filesystem creation time) |
Макс. длина имени файла | 255 bytes |
Разрешенные символы в именах файлов | All bytes except NUL ('\0') and '/' and the special file names "." and ".." |
Features | |
Даты зарегистрирован | modification (mtime), attribute modification (ctime), access (atime), delete (dtime), create (crtime) |
Диапазон дат | 14 December 1901 - 25 April 2514 |
Дата резолюции | Nanosecond |
Вилка | No |
Признаки | acl, bh, bsddf, commit=nrsec, data=journal, data=ordered, data=writeback, delalloc, extents, journal_dev, mballoc, minixdf, noacl, nobh, nodelalloc,noextents, nomballoc, nouser_xattr, oldalloc, orlov, user_xattr |
Разрешения файловой системы | [POSIX (Portable Operating System Interface for Unix) |
Прозрачное сжатие | No |
Транспорантное шифрование | Yes |
Дедупликация данных | No |
Другие | |
Операционная система |
Linux FreeBSD (read-only in kernel since version 10.1) Mac OS X (read-only with ext4fuse, full with ExtFS) Windows (Read/Write without journaling with ext2fsd) |
ext4 (англ. Fourth Extended File system - четвёртая расширенная файловая система, сокр. ext4, или ext4fs) — журналируемая файловая система (ФС), используемая в операционных системах с ядром Linux. Основана на ФС ext3, ранее использовавшейся по умолчанию во многих дистрибутивах GNU/Linux. Отличается от ext3 поддержкой extent'ов, групп смежных физических блоков, управляемых как единое целое; повышенной скоростью проверки целостности и рядом других усовершенствований.
Содержание
История создания
Ext4 — это результат эволюции Ext3, наиболее популярной файловой системы в Linux. Во многих аспектах Ext4 представляет собой больший шаг вперёд по сравнению с Ext3, чем Ext3 была по отношению к Ext2. Наиболее значительным усовершенствованием Ext3 по сравнению с Ext2 было журналирование, в то время как Ext4 предполагает изменения в важных структурах данных, таких как, например, предназначенных для хранения данных файлов. Это позволило создать файловую систему с более продвинутым дизайном, более производительную и стабильную и с обширным набором функций[1].
Первая экспериментальная реализация ext4 была написана Эндрю Мортоном и выпущена 10 октября 2006 года в виде патча к ядрам Linux версий 2.6.19-rc1-mm1 и 2.6.19-rc1-git8 .
В октябре 2008 была переименована из ext4dev в ext4, что символизирует то, что с точки зрения разработчиков она достаточно стабильна. В ядре 2.6.28 (вышедшем 25.12.2008) файловая система уже называется ext4 и считается стабильной. Файловая система ext4 рассматривается как промежуточный шаг на пути к файловой системе следующего поколения Btrfs, которая претендует на звание основной файловой системы Linux в будущем.
Характеристика
Основные изменения по сравнению с ext3:
- увеличение максимального объёма одного раздела диска до 1 эксбибайта (260 байт) при размере блока 4 кибибайт;
- увеличение размера одного файла до 16 тебибайт (244 байт);
- введение механизма пространственной (extent) записи файлов, уменьшающего фрагментацию и повышающего производительность. Суть механизма заключается в том, что новая информация добавляется в конец области диска, выделенной заранее по соседству с областью, занятой содержимым файла.
Возможности ext4
- Использование экстентов (англ. extent). В файловой системе ext3 адресация данных выполнялась традиционным образом, поблочно. Такой способ адресации становится менее эффективным с ростом размера файлов. Экстенты позволяют адресовать большое количество (до 128 MB) последовательно идущих блоков одним дескриптором. До 4х указателей на экстенты может размещаться непосредственно в inode, что достаточно для файлов маленького и среднего размера.
- 48-и битные номера блоков. На сегодняшний день максимальный размер файловой системы Ext3 равен 16 терабайтам, а размер файла ограничен 2 терабайтами. В Ext4 добавлена 48-битная адресация блоков, что означает, что максимальный размер этой файловой системы равен одному экзабайту, и файлы могут быть размером до 16 терабайт. 1 EB (экзабайт) = 1,048,576 TB (терабайт), 1 EB = 1024 PB (петабайт), 1 PB = 1024 TB, 1 TB = 1024 GB.
- Выделение блоков группами (англ. multiblock allocation). Файловая система хранит не только информацию о местоположении свободных блоков, но и количество свободных блоков, идущих друг за другом. При выделении места файловая система находит такой фрагмент, в который данные могут быть записаны без фрагментации. Это снижает уровень фрагментации ФС в целом.
- Отложенное выделение блоков (англ. delayed allocation). Выделение блоков для хранения данных файла происходят непосредственно перед физической записью на диск (например, при вызове sync), а не при вызове write. В результате, операции выделения блоков можно делать не по одной, а группами, что в свою очередь минимизирует фрагментацию и ускоряет процесс выделения блоков. С другой стороны, увеличивает риск потери данных в случае внезапного пропадания питания.
- Масштабируемость подкаталогов. В настоящий момент один каталог Ext3 не может содержать более, чем 32000 подкаталогов. Ext4 снимает это ограничение и позволяет создавать неограниченное количество подкаталогов.
- Резервирование inode'ов при создании каталога (англ. directory inodes reservation). При создании каталога резервируется несколько inode'ов. Впоследствии, при создании файлов в этом каталоге сначала используются зарезервированные inode'ы, и если таких не осталось, выполняется обычная процедура.
- Размер inode. Размер inode (по умолчанию) увеличен с 128 до 256 байтов. Это дало возможность реализовать те преимущества, которые перечислены ниже.
- Временные метки с наносекундной точностью (англ. nanosecond timestamps). Точность временных меток, хранящихся в inode, повышена до наносекунд. Диапазон значений тоже расширен: у ext3 верхней границей хранимого времени было 18 января 2038 года, а у ext4 — 25 апреля 2514 года.
- Версия inode. В inode появился номер, который увеличивается при каждом изменении inode файла. Это будет использоваться, например, в NFSv4, для того чтобы узнавать, изменился ли файл.
- Хранение расширенных атрибутов в inode (англ. extended attributes (EA) in inode). Хранение расширенных атрибутов, таких как ACL, атрибутов SELinux и прочих, позволяет повысить производительность. Атрибуты, для которых недостаточно места в inode, хранятся в отдельном блоке размером 4KB. Предполагается снять это ограничение в будущем.
- Контрольное суммирование в журнале (Journal checksumming). Контрольные суммы журнальных транзакций. Позволяют лучше найти и (иногда) исправить ошибки при проверке целостности системы после сбоя.
- Режим без журналирования. Журналирование обеспечивает целостность файловой системы путём протоколирования всех происходящих на диске изменений. Но оно также вводит дополнительные накладные расходы на дисковые операции. В некоторых особых ситуациях журналирование и предоставляемые им преимущества могут оказаться излишними. Ext4 позволяет отключить журналирование, что приводит к небольшому приросту производительности.
- Предварительное выделение (англ. persistent preallocation). Сейчас для того, чтобы приложению гарантированно занять место в файловой системе, оно заполняет его нулями. В ext4 появилась возможность зарезервировать множество блоков для записи и не тратить на инициализацию лишнее время. Если приложение попробует прочитать данные, оно получит сообщение о том, что они не проинициализированы. Таким образом, несанкционированно прочитать удалённые данные не получится.
- Дефрагментация без размонтирования (англ. online defragmentation). Дефрагментация выполняется утилитой e4defrag, поставляемой в составе пакета e2fsprogs с 2011 года.
- Неинициализированные блоки (англ. uninitialised groups). Возможность пока не реализована и предназначена для ускорения проверки целостности ФС утилитой fsck. Блоки, отмеченные как неиспользуемые, будут проверяться группами, и детальная проверка будет производится только если проверка группы показала наличие повреждений. Предполагается, что время проверки будет составлять от 1/2 до 1/10 от нынешнего в зависимости от способа размещения данных.
- Прямая и обратная совместимость с ext2/ext3. Файловые системы ext2/ext3 можно монтировать как файловую систему ext4. Наоборот — монтировать файловую ext4 как ext3 — можно только в том случае, если на ext4 не используются экстенты[2].
Дефрагментация
Файловые системы в Linux изначально спроектированы так, чтобы фрагментация файлов была как можно меньше. Тем не менее, фрагментированность файлов имеет место быть, и в некоторых случаях может привести к заметному падению производительности дисковой подсистемы. Для Ext4 есть несколько дефрагментаторов:
- e2fsprogs. Онлайн дефрагментатор из стандартного набора утилит.
- Defrag. Дефрагментатор от Кона Коливаса. Случаются перерывы в разработке, но проект живой, в 2010 появился PPA-репозиторий: ppa:e2defrag/ppa.
- Shake. Онлайн-дефрагментатор, PPA-репозиторий: ppa:un-brice/ppa.
e2fsprogs
- Проверка необходимости дефрагментации:
$ sudo e4defrag -c /dev/<xxx>
- запуск дефрагментации:
$ sudo e4defrag /dev/<xxx>
- проверка результата (в последней строке вывода должно быть ⩽0.3% non-contiguous):
$ sudo fsck -n /dev/<xxx>
Оптимизация дискового пространства
На свежесозданном разделе с Ext4 обычно выделяется заметно меньше свободного дискового пространства чем размер раздела. Это происходит потому, что используется порядка 1,8% на служебные нужды: заголовки групп блоков, бинарные поля для учета свободного места, индексные дискрипторы (i-node), основной и множество резервных копий суперблока. Также по умолчанию, дополнительно резервируется 5% от объема раздела для нужд учетной записи суперпользователя (root) и системных служб (daemons). Обычно это полезно для системного корневого раздела, но на пользовательских разделах необходимости в этом резерве нет, особенно на разделах большого размера, где 5% превращаются в очень приличные объемы (недоступные пользователю).
Изменение процента зарезервированных блоков для нужд суперпользователя
По умолчанию резервируется 5% от объема раздела или диска. Значение 0 отключает резервирование блоков, значение 5 - устанавливает резервирование на 5%.$ sudo tune2fs -m 0 /dev/<xxx>
Изменение числа зарезервированных под служебные нужды блоков
Значение 0 отключает резервирование блоков, значение 5 - устанавливает резервирование 5-и блоков.$ sudo tune2fs -r 0 /dev/<xxx>
Использование ext4
Для того чтобы использовать ext4, необходимо:
- поддержка со стороны ядра
- поддержка со стороны программ
- при создании файловой системы с нуля используется mkfs.ext3 с ключом -E test_fs
# mkfs.ext3 -E test_fs file.img<console>
- для подготовки существующей файловой системы ext3 к монтированию использовать debugfs
# debugfs -w file.img
- при монтировании использовать тип файловой системы ext4dev
# mount -t ext4dev -o loop file.img /mnt
Ниже во всех деталях описывается процесс создания файловой системы ext4.
Для примера в качестве носителя файловой системы используется обычный файл. Создание файловой системы не в файле, а на дисковом разделе происходит аналогично, с той разницей, что не нужно использовать модуль loop.
Для того чтобы использовать файловую систему ext4, необходимо чтобы в ядре
Linux была соответствующая поддержка в ядре.# uname -a Linux dhcp 2.6.25-2-xen-686 #1 SMP Tue May 27 17:30:39 UTC 2008 i686 GNU/Linux # modinfo ext4dev filename: /lib/modules/2.6.25-2-xen-686/kernel/fs/ext4/ext4dev.ko license: GPL description: Fourth Extended Filesystem with extents author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others depends: mbcache,jbd2,crc16 vermagic: 2.6.25-2-xen-686 SMP mod_unload 686
Модуль ядра, который отвечает за поддержку ext4, называется ext4dev.
Создаём пустой файл размером 100MB,
который чуть позже будет форматироваться под ext4.# dd if=/dev/zero of=file.img count=100 bs=1024k
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.43877 seconds, 239 MB/s
Создаём обычную файловую систему ext3:# mkfs.ext3 file.img mke2fs 1.40 (29-Jun-2007) file.img is not a block special device. Proceed anyway? (y,n) y ...
После того как файловая система создана, можно попробовать её подмонтировать. Поскольку мы создавали файловую систему в файле, а не на блочном устройстве, для того чтобы смонтировать её, файл нужно связать с loopback-устройством.
Это можно сделать или при помощи команды losetup или просто, использовав опцию loop при монтировании.
# mount -t ext4dev -o loop file.img /mnt
Если при выполнении команды возникает ошибка, в которое сообщается о проблемах с устройством /dev/loop, возможно, у вас просто не загружен модуль loop или не установлен udev:
# mount -t ext4dev -o loop file.img /mnt mount: could not find any device /dev/loop# # modprobe loop [ 11.636764] loop: module loaded # mount -t ext4dev -o loop file.img /mnt mount: could not find any device /dev/loop# # apt-get install udev
Может возникнуть и другая ошибка, которая имеет непосредственное отношение
к файловой системе ext4.# mount -t ext4dev -o loop file.img /mnt [ 14.531109] EXT4-fs: loop0: not marked OK to use with test code.
Модуль файловой системы ext4 ядра Linux сообщает о том, что файловая система не помечена как ext4. Проверка добавлена скорее из психологических чем технических побуждений — чтобы файловые системы ext3 не смонтировали случайно как ext4.
Добавить пометку, извещающую систему о том, что файловую систему можно смело монтировать как ext4
можно так:# debugfs -w file.img debugfs 1.40 (29-Jun-2007) debugfs: debugfs: set_super_value s_flags 4 debugfs: quit
Вообще, можно было попросить ставить пометку ещё при создании файловой системы.
Для этого нужно было использовать ключ -E test_fs:# mkfs.ext3 -E test_fs file.imgТип файловой системы, указываемый при монтировании: ext4dev.
# mount -t ext4dev -o loop file.img /mnt [ 16.769093] kjournald2 starting. Commit interval 5 seconds [ 16.769093] EXT4 FS on loop0, internal journal [ 16.769093] EXT4-fs: mounted filesystem with ordered data mode. [ 16.769093] EXT4-fs: file extents enabled [ 16.769093] EXT4-fs: mballoc enabledФайловая система успешно смонтирована:
# mount /dev/xvda1 on / type ext3 (rw,errors=remount-ro) tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) udev on /dev type tmpfs (rw,mode=0755) nfsd on /proc/fs/nfsd type nfsd (rw) rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /root/file.img on /mnt type ext4dev (rw,loop=/dev/loop0)
После того как работа с файловой системой окончена,
её нужно размонтировать[2].# umount /mnt [ 16.974054] EXT4-fs: mballoc: 0 blocks 0 reqs (0 success) [ 16.974070] EXT4-fs: mballoc: 0 extents scanned, 0 goal hits, 0 2^N hits, 0 breaks, 0 lost [ 16.974075] EXT4-fs: mballoc: 0 generated and it took 0 [ 16.974085] EXT4-fs: mballoc: 0 preallocated, 0 discarded
Поддержка в операционных системах
- coLinux — технология, позволяющая запустить ядро Linux под управлением ОС Windows. Возможен доступ к томам с ФС ext2/ext3/ext4.
- Ext2read — программа, предоставляющая доступ к ФС ext2/ext3/ext4 и LVM2, но в режиме только для чтения, с интерфейсом, напоминающим проводник Windows.
- Ext2Fsd — экспериментальный драйвер, добавляющий поддержку ФС ext2/ext3/ext4 для ОС Windows. Драйвер поддерживает не все возможности ФС.
- Paragon ExtFS for Windows — бесплатное для личного пользования проприетарное ПО, предоставляющее доступ к ФС ext2/ext3/ext4 для чтения и записи.
Поддержка ext4 в дистрибутивах Linux
- Ubuntu:
- 9.04: ext4 доступна для выбора по желанию пользователя;
- 9.10+: ext4 стала ФС по умолчанию.
- Debian:
- 6.0: ext4 доступна для выбора по желанию пользователя;
- 7.0+: ext4 предлагается, как ФС по умолчанию.
- Fedora:
- >=9: ext4 доступна для выбора по желанию пользователя;
- 11+: ext4 — ФС по умолчанию.
- Sabayon Linux:
- 3.5 Loop 3+: ext4 доступна.
- ArchLinux.
- Slackware.
- OpenSUSE:
- 11.2+: ext4 — ФС по умолчанию.
- Mandriva Linux:
- 2010+: ext4 — ФС по умолчанию.
- Red Hat Enterprise Linux:
- 6+: ext4 — ФС по умолчанию.
- PCLinuxOS:
- 2010+: ext4 — ФС по умолчанию.
- Android:
- 2.3+: ext4 доступна.
- AgiliaLinux:
- ext4 — ФС по умолчанию[3].
Примечания
- ↑ Хабрахабр [Электронный ресурс]: Особенности Ext4 / Дата обращения: 05.12.2016. — Режим доступа: https://habrahabr.ru/post/58183/.
- ↑ 2,0 2,1 Xgu [Электронный ресурс]: ext4 / Дата обращения: 05.12.2016. — Режим доступа: http://xgu.ru/wiki/ext4.
- ↑ Википедия [Электронный ресурс] : ext4 — Материал из Википедии — свободной энциклопедии: — Режим доступа: https://ru.wikipedia.org/wiki/Ext4#.D0.9F.D0.BE.D0.B4.D0.B4.D0.B5.D1.80.D0.B6.D0.BA.D0.B0_ext4_.D0.B2_.D0.B4.D0.B8.D1.81.D1.82.D1.80.D0.B8.D0.B1.D1.83.D1.82.D0.B8.D0.B2.D0.B0.D1.85_Linux.
Ссылки
- IBM [Электронный ресурс]: Переход на ext4 / Дата обращения: 05.12.2016. — Режим доступа: http://www.ibm.com/developerworks/ru/library/l-ext4/.
- Losst [Электронный ресурс]: Обзор EXT4 vs Btrfs vs XFS / Дата обращения: 05.10.2016. — Режим доступа: https://losst.ru/obzor-ext4-vs-btrfs-vs-xfs.
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.