Ext4 что это
Перейти к содержимому

Ext4 что это

  • автор:

ext4 (ext4fs) — журналируемая файловая система

ext4 (Fourth Extended File System четвёртая версия расширенной файловой системы), сокр. ext4, или ext4fs. Обеспечивается прямая совместимость с системой ext3 и ограниченная обратная совместимость при недоступной способности к непрерывным областям дискового пространства.

непрерывные области дискового пространства
задержка выделения пространства
онлайн дефрагментация

в Ext4 добавлена 48-битная адресация блоков, поэтому максимальный размер этой файловой системы равен одному экзабайту, и файлы могут быть размером до 16 терабайт. 1 EB (экзабайт) = 1,048,576 TB (терабайт), 1 EB = 1024 PB (петабайт), 1 PB = 1024 TB, 1 TB = 1024 GB .

Fsck — это очень медленная операция, особенно это касается её первой стадии, проверки всех inodes в файловой системе. В Ext4 после inode- таблицы каждой группы хранится список неиспользованных inodes (снабжённый для надёжности контрольной суммой), поэтому fsck такие inodes не будет проверять. Результатом является уменьшение времени проверки от 2 до 20 раз, что зависит от количества используемых inodes. Cписок неиспользуемых inodes составляется fsck, а не Ext4.

ext4

ext4 ­— файловая система, основанная на ext3 и совместимая с ней (только обратно). Отличается от ext3 поддержкой extent’ов, групп смежных физических блоков, управляемых как единое целое; повышенной скоростью проверки целостности и рядом других усовершенствований.

В октябре 2008 была переименована из ext4dev в ext4 [1] , что символизирует то, что с точки зрения разработчиков она достаточно стабильна. В ядре 2.6.28 (вышедшем 25.12.2008) файловая система уже называется ext4 и считается стабильной. Файловая система ext4 рассматривается [2] как промежуточный шаг на пути к файловой системе следующего поколения Btrfs, которая претендует на звание основной файловой системы Linux в будущем. Однако это будущее наступит чуть позже.

[править] Новые возможности ext4

Новые возможности ext4 (в сравнении с ext3):

  1. Использование экстентов. В файловой системе ext3 адресация данных выполнялась традиционным образом, поблочно. Такой способ адресации становится менее эффективным с ростом размера файлов. Экстенты позволяют адресовать большое количество (до 128 MB) последовательно идущих блоков одним дескриптором. До 4х указателей на экстенты может размещаться непосредственно в inode, что достаточно для файлов маленького и среднего размера.
  2. 48-битные номера блоков. При размере блока 4K это позволяет адресовать до одного экзабайта (2^48*4KB = 2^50*1KB = 2^60 B = 1 EB).
  3. Выделение блоков группами (multiblock allocation). Файловая система хранит не только информацию о местоположении свободных блоков, но и количество свободных блоков, идущих друг за другом. При выделении места файловая система находит такой фрагмент, в который данные могут быть записаны без фрагментации. Это снижает уровень фрагментации файловой системы в целом.
  4. Отложенное выделение блоков (delayed allocation). Выделение блоков для хранения данных файла происходят непосредственно перед физической записью на диск (например, при вызове sync), а не при вызове write. В результате, операции выделения блоков можно делать не по одной, а группами, что в свою очередь минимизирует фрагментацию и ускоряет процесс выделения блоков [3] . С другой стороны, увеличивает риск потери данных в случае внезапного пропадания питания [4] .
  5. Превышен лимит в 32000 каталогов. В ext3, если не использовать специальные патчи [5] , в одном каталоге можно было создать не более 32000 подкаталогов (или, если быть совсем точным, до 65535 каталогов, но только изменяя константы ядра [6] ).
  6. Резервирование inode’ов при создании каталога (directory inodes reservation). При создании каталога резервируется несколько inode’ов. Впоследствии, при создании файлов в этом каталоге сначала используются зарезервированные inode’ы, и если таких не осталось, выполняется обычная процедура [7] .
  7. Размер inode. Размер inode (по умолчанию) увеличен с 128 до 256 байтов. Это дало возможность реализовать те преимущества, которые перечислены ниже.
  8. Временные метки с наносекундной точностью (nanosecond timestamps). Более высокая точность времён, хранящихся в inode. Диапазон хранящихся времён тоже расширен: если раньше верхней границей хранимого времени было 18 января 2038 года, то теперь это 25 апреля 2514 года.
  9. Версия inode. В inode появился номер, который увеличивается при каждом изменении inode файла. Это будет использоваться, например, в NFSv4, для того чтобы узнавать, изменился ли файл.
  10. Хранение расширенных атрибутов в inode (EA in inode). Хранение расширенных атрибутов, таких как ACL, атрибутов SELinux и прочих, позволяет повысить производительность. Атрибуты, для которых недостаточно места в inode, хранятся в отдельном блоке размером 4KB. Предполагается снять это ограничение в будущем.
  11. Контрольное суммирование в журнале (Journal checksumming). Контрольные суммы журнальных транзакций. Позволяют лучше найти и (иногда) исправить ошибки при проверке целостности системы после сбоя.
  12. Предварительное выделение (persistent preallocation). Сейчас для того, чтобы приложению гарантированно занять место в файловой системе, оно заполняет его нулями. В ext4 появилась возможность зарезервировать множество блоков для записи и не тратить на инициализацию лишнее время. Если приложение попробует прочитать данные, оно получит сообщение о том, что они не проинициализированы. Таким образом, несанкционированно прочитать удалённые данные не получится.
  13. Дефрагментация без размонтирования (online Defragmentation). Реализовано в самой последней версии e2fsprogs. (~/misc/e4defrag)
  14. Неинициализированные блоки (uninitialised groups). Пока не реализовано. Позволяет ускорить проверку файловой системы с помощью fsck. Блоки, отмеченные как неиспользуемые, проверяются группами, и детальная проверка производится только если проверка группы показала, что внутри есть повреждения. Предполагается, что эта возможность может очень сильно ускорить процесс проверки целостности файловой системы; в зависимости от способа размещения данных время проверки будет составлять от 1/2 до 1/10 от нынешнего.
  15. Обратная совместимость с ext2/ext3. Файловые системы ext2/ext3 можно монтировать как файловую систему ext4. Наоборот — монтировать файловую ext4 как ext3 — можно только в том случае, если на ext4 не используются экстенты (учитывая, что это главная фича ext4, этого практически никогда не бывает).

[править] Дефрагментация

Отсутствие острой необходимости в дефрагментации файловых систем UNIX на фоне регулярной дефрагментации других популярных файловых систем укрепило системных администраторов UNIX во мнении, что фрагментации данных в их файловых системах не бывает в принципе. В действительности, она существует, хотя её влияние и не настолько существенно, как в файловых системах некоторых других архитектур. С ростом объёма файловых систем необходимость борьбы с фрагментацией становится более ощутимой.

Результаты экспериментов показали, что производительность файловых систем UNIX из-за фрагментации может снижаться достаточно сильно.

Например, в [4] был проведён следующий эксперимент: на чистую файловую систему было записано 32 файла размером 1GB каждый; сначала по очереди, потом (после пересоздания файловой систем) одновременно. За счёт параллельности процессов записи во втором случае файловая система получилась сильно фрагментированной. Различие в скорости чтения данных в первом и втором случае составило 14.8% для ext3 и 16.5% для XFS.

  • фрагментация отдельных файлов — большой файл занимает блоки, разбросанные по файловой системе;
  • фрагментация связанных файлов — файлы, читающиеся вместе, разбросаны по файловой системе;
  • фрагментация свободного места — свободные блоки разбросаны по файловой системе.

Фрагментация может быть снижена при помощи отложенного выделения блоков, резервирования блоков и многоблочного выделения.

Однако стоит понимать, что при использовании SSD вместо HDD фрагментация никак не влияет на производительность операций чтения/записи (для операций записи это корректно при достаточном количестве свободного пространства на разделе и поддержке накопителем опции TRIM).

  • Фрагментация файловой системы
  • Фрагментация ОЗУ (фрагментация ФС это ещё ничего, пора задуматься о фрагментации оперативной памяти!)

[править] Существующие ограничения

Файловая система ext4 находится в состоянии развития. Её уже можно использовать для экспериментов, но пока что не рекомендуется хранить на ней ценные данные.

Основные возможности ext4, поддержка которых на сегодняшний день не включена в основной код [8] :

  • отложенное выделение блоков;
  • online-дефрагментация;
  • контрольное суммирование журнала;
  • восстановление удалённых файлов.

Среди ограничения в программах (userlevel tools), необходимых для работы с ext4, существующих на сегодняшний день [9] самая большая это — максимальный размер файловой системы не может превышать 16TB; это связано с тем, что существующая mkfs не умеет пока что работать в 64-битном режиме (но поддержка со стороны ядра есть) [10] .

[править] Использование ext4

Для того чтобы использовать ext4, необходимо:

  • поддержка со стороны ядра
  • поддержка со стороны программ
  • при создании файловой системы с нуля используется mkfs.ext3 с ключом -E test_fs
%# mkfs.ext3 -E test_fs file.img
  • для подготовки существующей файловой системы ext3 к монтированию использовать debugfs
%# debugfs -w file.img debugfs 1.40 (29-Jun-2007) debugfs: set_super_value s_flags 4 debugfs: quit
  • при монтировании использовать тип файловой системы 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)

После того как работа с файловой системой окончена, её нужно размонтировать.

%# 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

[править] Настройка через /proc

Настройки для смонтированных файловых систем Ext4 находятся в каталоге /proc/fs/ext4/DEVICE, где DEVICE — имя смонтированного устройства. Например, для sda5 настройки будут в каталоге /proc/fs/ext4/sda5.

Почти все настройки касаются выделения блоков группам (multiblock allocation). Файлы, которые есть в этом каталоге:

. mb_groups details of multiblock allocator buddy cache of free blocks mb_history multiblock allocation history stats controls whether the multiblock allocator should start collecting statistics, which are shown during the unmount group_prealloc the multiblock allocator will round up allocation requests to a multiple of this tuning parameter if the stripe size is not set in the ext4 superblock max_to_scan The maximum number of extents the multiblock allocator will search to find the best extent min_to_scan The minimum number of extents the multiblock allocator will search to find the best extent order2_req Tuning parameter which controls the minimum size for requests (as a power of 2) where the buddy cache is used stream_req Files which have fewer blocks than this tunable parameter will have their blocks allocated out of a block group specific preallocation pool, so that small files are packed closely together. Each large file will have its blocks allocated out of its own unique preallocation pool. .

[править] Дополнительная информация

Нужно подчистить ссылки

  • Ext4 Wiki (англ.)
  • Ext4: The Next Generation of Ext2/3 Filesystem
  • ext4 на wikipedia.org (англ.)
  • Time for ext4? (англ.) — статья и обсуждение на LWN.net
  • Linux: ext4 Filesystem на KernelTrap (англ.)
  • Features/Ext4 — Fedora Project Wiki (англ.)
  • A better ext4 (англ.) — статья и обсуждение на LWN.net
  • ext4 2.6.25 Merge Plans (англ.) — обсуждение планов включения ext4 в 2.6.25 на KernelTrap
  • ext4 merge plans for 2.6.25 (англ.) — то же на LWN.net
  • Linux Weather Forecast/filesystems (англ.) — обзор множества новых файловых систем в Linux, в том числе ext4 и прогнозы что их ждёт
  • Интервью о состоянии поддержки ext4 в Fedora 9 — новость и обсуждение на ЛОР
  • ext4: the next generation of the ext3 file system (англ.) — очень подробное объяснение каждой новой возможности ext4
  • ext4: Еще тестируется или уже работает? — небольшая заметка о переходе на ext4

Тестирование возможностей ext4:

Что такое Ext2, Ext3 и Ext4? Как создавать и конвертировать файловые системы в Linux?

Файловая система Linux – это иерархическая файловая структура, определяющая порядок хранения и доступа к файлам в операционной системе Linux. Это логическая структура, встроенная в систему, которая управляет файлами, включая систематическое хранение, доступ и изменение файлов в каталогах и подкаталогах.

Файловая система управляет такими атрибутами, как имя файла, размер, inode, права собственности пользователей и групп, дата создания и т.д. Систематизированное хранение данных позволяет упростить и ускорить доступ к файлам, что обеспечивает бесперебойную работу.

Прежде чем мы продемонстрируем, как создавать и преобразовывать файловые системы, давайте рассмотрим основные файловые системы, используемые в Linux-системах сегодня.

Ext2

Известная также как вторая расширенная файловая система, файловая система ext2 появилась в ранних версиях Linux в 1993 году. Она пришла на смену Extended File System (Ext FS), первой файловой системе, разработанной для ядра Linux. Из-за проблем с производительностью и других недостатков файловая система EXt была заменена на Ext2, которая была более надежной и обладала более высокой производительностью.

Файловая система Ext2 является переносимой и не имеет функции журналирования, которая связана с перерасходом ресурсов из-за дополнительной обработки данных, потребления памяти и доступа к диску. Поэтому файловая система Ext2 идеально подходит для устройств хранения данных на базе флэш-памяти, таких как ручные накопители, карты памяти и SD-карты.

Ext3

Файловая система Ext3, также известная как Third Extended File System, была выпущена в ноябре 2001 года для ядра Linux версии 2.4.15. Файловая система Ext3 является значительным улучшением Ext2 и до сих пор используется в некоторых дистрибутивах Linux.

Как и Ext2, файловая система Ext3 поддерживает максимальный размер файла 2 ТБ и ограничивает длину имени файла 255 байтами. В отличие от своей предшественницы, файловая система Ext3 поддерживает журналирование, что является самым значительным усовершенствованием.

Журналирование дает такие значительные улучшения, как:

  • Снижение вероятности потери или повреждения данных при сбое питания или отказе системы.
  • Отслеживание внесенных изменений и их регистрация в файлах.
  • Восстановление файловой системы после сбоя системы.

Ext4

Файловая система ext4 – это еще одна журналируемая файловая система, которая является преемницей файловой системы ext3, выпущенной в декабре 2008 года и в настоящее время остающейся широко используемой файловой системой, особенно в системах Debian / Ubuntu.

Она поддерживает файлы и файловые системы размером до 16 ТБ и ограничивает максимальную длину имени файла 255 байтами.

Основные особенности Ext4 включают:

  • Улучшения в распределении – Файловая система Ext4 повышает производительность чтения и записи за счет эффективного распределения блоков памяти перед их записью на диск.
  • Улучшения в метках времени – Файловая система Ext4 увеличивает дату до 10 мая 2446 года, добавляя к метке времени еще 408 лет.
  • Ускоренные проверки файловой системы – В файловой системе Ext4 inode и нераспределенные группы блоков предварительно размечены. Таким образом, время выполнения команд e2fsck и fsck значительно сокращается, что приводит к ускорению проверки файловой системы.
  • Онлайновая дефрагментация – Одним из недостатков файловых систем Ext2 и Ext3 является дефрагментация диска, которая неизбежно сказывается на его производительности. Файловая система ext4 предоставляет инструмент e4defrag, который представляет собой средство командной строки, используемое для дефрагментации файловых систем Ext4 и, таким образом, оптимизирующее производительность.
  • Контрольные суммы журналов – Мы уже рассмотрели преимущества журналирования, которые заключаются в возможности восстановления в случае аппаратного сбоя, приводящего к повреждению файлов. Опция контрольных сумм журнала повышает производительность, поскольку сокращает время журналирования.

Как определить тип файловой системы?

Чтобы определить тип файловой системы Linux, выполните следующую команду в терминале от имени пользователя root.

df -hT | awk '' | grep "^/dev" /dev/sda1 ext4 / /dev/sda2 vfat /boot/efi /dev/sdb3 ext4 /media/tecmint/Personal_Sites /dev/sdb1 ext4 /media/tecmint/Personal_Data /dev/sdb2 ext4 /media/tecmint/Linux_Data

Предупреждение: Перед выполнением следующих команд создайте резервную копию важных данных.

Создание файловых систем Ext2, Ext3 или Ext4

После создания файловой системы с помощью команды fdisk или parted используйте команду mke2fs для создания любой из файловых систем и убедитесь, что вы заменили sdXX на имя вашего устройства.

Создание файловой системы Ext2

Чтобы преобразовать файловую систему в файловую систему Ext2, выполните следующую команду от имени root.

mke2fs /dev/sdX

Создание файловой системы Ext3

Для создания файловой системы EXt3 выполните команду:

mkfs -t ext3 /dev/sdX

Создание файловой системы Ext4

Для создания файловой системы Ext4 отформатируйте раздел файловой системы, как показано на рисунке.

# mkfs -t ext4 /dev/sdX

В приведенной выше команде опция -t используется для указания типа файловой системы.

Преобразование файловых систем Ext2, Ext3 или Ext4

Преобразование из одной файловой системы в другую – довольно простая задача. Предположим, у вас есть раздел Ext2 с меткой /dev/sdb1 , смонтированный на точке монтирования /mnt .

Вы можете найти его в записях файла /etc/fstab, обозначенных, как показано ниже:

/dev/sdb1 /mnt ext2 defaults 0 0

Чтобы продолжить, сначала размонтируйте раздел.

umount /dev/sdb1

Преобразование Ext2 в Ext3

Для преобразования в Ext3 воспользуйтесь командой tune2fs и передайте опцию -j для включения журналирования.

tune2fs /dev/sdb1

Следующим шагом отредактируйте файл /etc/fstab и измените тип файловой системы на ext3. Таким образом, запись должна выглядеть следующим образом.

/dev/sdb1 /data extd3 defaults 0 0

Затем смонтируйте раздел с помощью команды mount.

mount /dev/sdb1 /mnt

И наконец, перезагрузите систему

reboot

Преобразование Ext2 в Ext4

Как и прежде, размонтируйте блочный том.

umount /dev/sdb1

Далее используйте команду tune2fs с опцией -O extents,uninit_bg,dir_index для включения журналирования.

tune2fs -O extents,uninit_bg,dir_index /dev/sdb1

Как и прежде, смонтируйте файловую систему и перезагрузите систему.

mount /dev/sdb1 /mnt

Наконец, перезагрузите систему.

reboot
Конвертация Ext3 в Ext4

Процедура конвертации из Ext3 в Ext4 аналогична конвертации Ext2 в Ext4.

Так, сначала размонтируйте блочный том.

umount /dev/sdb1

Следующая команда tune2fs вместе с опцией -O extents,uninit_bg,dir_index позволяет включить журналирование.

Теперь запустите команду fsck для исправления измененных структур на диске.

fsck -pf /dev/sdb1 e2fsck -f /dev/sdb1

После этого смонтируйте файловую систему и перезагрузите систему.

mount /dev/sdb1 /data reboot

Вывод

Мы надеемся, что это руководство дало вам представление об основных типах файловых систем в Linux и о том, как можно преобразовать один тип файловой системы в другой.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Особенности Ext4

Ext4 — это результат эволюции Ext3, наиболее популярной файловой системы в Linux. Во многих аспектах Ext4 представляет собой больший шаг вперёд по сравнению с Ext3, чем Ext3 была по отношению к Ext2. Наиболее значительным усовершенствованием Ext3 по сравнению с Ext2 было журналирование, в то время как Ext4 предполагает изменения в важных структурах данных, таких как, например, предназначенных для хранения данных файлов.

Это позволило создать файловую систему с более продвинутым дизайном, более производительную и стабильную и с обширным набором функций.

1. Совместимость

Любая имеющаяся файловая система типа Ext3 может быть конвертирована в Ext4 путём простой процедуры, состоящей из запуска пары команд в режиме «только чтение». Это означает, что вы можете повысить производительность и вместимость и улучшить возможности вашей имеющейся файловой системы без переформатирования и без переустановки ОС и программ. Если вы хотите получить преимущества Ext4 в production-системе, вы также можете обновить файловую систему. Эта процедура безопасна и не подвергает риску ваши данные (при этом, само собой, рекомендуется сделать резервную копию важных данных. Впрочем, это нужно делать, даже если вы не собираетесь менять файловую систему).

Ext4 будет использовать новые структуры только для новых данных, а старые при этом останутся неизменными. При необходимости их можно будет читать и изменять. Это безусловно означает, что, единожды сменив файловую систему на Ext4, вернуть Ext3 будет уже невозможно.

Также имеется возможность смонтировать файловую систему Ext3 как Ext4 без использования нового формата данных, что позволит впоследствии смонтировать её опять как Ext3. При этом, само собой, вы не сможете воспользоваться многочисленными преимуществами Ext4.

2. Больший размер файлов и файловой системы

На сегодняшний день максимальный размер файловой системы Ext3 равен 16 терабайтам, а размер файла ограничен 2 терабайтами. В Ext4 добавлена 48-битная адресация блоков, что означает, что максимальный размер этой файловой системы равен одному экзабайту, и файлы могут быть размером до 16 терабайт. 1 EB (экзабайт) = 1,048,576 TB (терабайт), 1 EB = 1024 PB (петабайт), 1 PB = 1024 TB, 1 TB = 1024 GB. Почему 48-битная, а не 64-битная? Имелся ряд ограничений, которые необходимо было бы снять, чтобы сделать Ext4 полностью 64-битной, и такой задачи перед Ext4 не ставилось. Структуры данных в Ext4 проектировались с учётом требуемых изменений, поэтому однажды в будущем поддержка 64 бит в Ext4 появится. Пока же придётся довольствоваться одним экзабайтом.

Примечание: код для создания файловых систем размером более 16 терабайт на момент написания этой статьи не содержится ни в одном из стабильных релизов e2fsprogs. В будущем он будет добавлен.

3. Масштабируемость подкаталогов

В настоящий момент один каталог Ext3 не может содержать более, чем 32000 подкаталогов. Ext4 снимает это ограничение и позволяет создавать неограниченное количество подкаталогов.

4. Экстенты

Традиционные файловые системы, произошедшие от Unix, такие как Ext3, используют схему непрямого отображения блоков для отслеживания каждого блока, отвечающего за хранение данных файла. Такой подход неэффективен для больших файлов, особенно при операциях удаления и усечения таких файлов, поскольку карта соответствия содержит по одной записи на каждый отдельный блок. В больших файлах блоков много, их карты соответствия большие, и обрабатываются они медленно.

В современных файловых системах применяется иной подход, основанный на так называемых экстентах. Экстент — это в общем-то набор последовательных физических блоков. Он как бы говорит нам: «Эти данные находятся в следующих n блоках». Например, файл размером в 100 мегабайт может храниться в единственном экстенте такого же размера, вместо того, чтобы быть разбитым на 25600 4-килобайтных блоков, адресуемых путём непрямого отображения. Огромные файлы можно разделить на несколько экстентов.

Благодаря применению экстентов улучшается производительность, а также уменьшается фрагментированность, поскольку экстенты способствуют непрерывному размещению данных.

5. Многоблочное распределение

Если в Ext3 нужно записать на диск новые данные, специальный механизм распределения блоков определяет, какие блоки из числа свободных будут для этого использованы. Проблема в том, что в Ext3 этот механизм распределяет в один присест только один блок (4 килобайта). Это означает, что, если нужно записать, скажем, ранее упомянутые 100 мегабайт данных, нужно будет обратиться к механизму распределения 25600 раз (речь идёт о каких-то 100 мегабайтах!). Мало того, что это неэффективно, это к тому же не позволяет оптимизировать политику распределения, поскольку соответствующий механизм не имеет понятия о реальном объёме данных, подлежащем записи, а знает только об одном-единственном блоке.

Ext4 использует механизм многоблочного распределения (multiblock allocator, mballoc) который позволяет распределить любое количество блоков с помощью единственного вызова и избежать огромных накладных расходов. Благодаря этому производительность существенно вырастает, что особенно заметно при отложенном распределении (см. ниже) с использованием экстентов. Эта возможность никак не влияет на формат данных.

Также можно отметить, что в механизм распределения блоков и inode в Ext4 получил и другие улучшения, подробно описанные в этом документе.

6. Отложенное распределение

Отложенное распределение представляет собой способ повышения производительности, не влияющий на формат данных и представленный в современных файловых системах, таких как XFS, ZFS, btrfs и Reiser 4.

Суть этого метода состоит в отсрочке выделения блоков насколько это возможно — по контрасту с подходом, применямым в традиционных файловых системах (таких как Ext3, reiser3 и т. д.): распределять блоки сразу, при первой возможности. Например, если процесс осуществляет запись вызовом write(), файловая система распределит блоки под запись немедленно — даже если данные пока не будут записываться на диск, а будут находиться какое-то время в кэше. Недостатки такого подхода, например, в том, что, если процесс непрерывно осуществляет запись в растущий файл, последовательные вызовы write() постоянно распределяют блоки данных, и при этом неизвестно, будет ли файл расти далее.

При использовании отложенного распределения блоки сразу не выделяются при обращении к write(). Вместо этого распределение откладывается до момента, когда файл будет записан из кэша на диск. Благодаря этому механизм получает возможность оптимизировать процесс распределения. Наибольший выигрыш получается при использовании двух ранее упомянутых возможностей — экстентов и многоблочного распределения, поскольку часто встречается ситуация, когда окончательный файл пишется на диск в виде экстентов, распределённых с помощью mballoc. Это даёт существенный прирост производительности, и иногда сильно снижает фрагментированность данных.

7. Быстрый fsck

Fsck — это очень медленная операция, особенно это касается её первой стадии, проверки всех inodes в файловой системе.

В Ext4 после inode-таблицы каждой группы хранится список неиспользованных inodes (снабжённый для надёжности контрольной суммой), поэтому fsck такие inodes не будет проверять. Результатом является уменьшение времени проверки от 2 до 20 раз, что зависит от количества используемых inodes (см. http://kerneltrap.org/Linux/Improving_fsck_Speeds_in_Ext4).

То, что список неиспользуемых inodes составляется fsck, а не Ext4, будет хорошо заметно, если вы запустите fsck, чтобы он построил список неиспользуемых inodes, и когда только следующий запуск fsck пройдёт быстрее (запуск fsck всё равно необходим при конвертировании Ext3 в Ext4).

Кроме того, на ускорение fsck влияет и другая особенность — «гибкие группы блоков», также они ускоряют и другие файловые операции.

8. Контрольные суммы журнала

Журнал является наиболее часто используемой частью диска, вследствие чего блоки, из которых он состоит, становятся особенно чувствительными к отказам оборудования. Более того, попытка восстановления при повреждённом журнале может привести к ещё более массовым повреждениям в данных. Ext4 подсчитывает контрольные суммы журнальных данных, что позволяет определить факт их повреждения. У этого есть и ещё одно преимущество: благодаря контрольным суммам можно превратить систему двухфазной фиксации журнала Ext3 в однофазную, что ускоряет файловые операции в отдельных случаях до 20 %, таким образом, улучшаются одновременно и надёжность, и производительность.

Примечание: часть, отвечающая за производительность — асинхронное протоколирование, — сейчас по умолчанию отключена, и будет включена в одном из последующих релизов, когда удастся добиться надёжной его работы.

9. Режим без журналирования

Журналирование обеспечивает целостность файловой системы путём протоколирования всех происходящих на диске изменений. Но оно также вводит дополнительные накладные расходы на дисковые операции. В некоторых особых ситуациях журналирование и предоставляемые им преимущества могут оказаться излишними. Ext4 позволяет отключить журналирование, что приводит к небольшому приросту производительности.

10. Онлайн-дефрагментация

Эта функция пока в разработке и будет включена в один из будущих релизов.

Хотя отложенное и многоблочное распределение и экстенты помогают уменьшить фрагментированность файловой системы, со временем она всё-таки может вырасти.

Например: вы создаёте три файла в одном каталоге и они расположены на диске друг за другом. Потом, однажды вы решаете обновить второй файл, и при этом файл становится несколько больше — так, что места для него становится недостаточно. При этом нет никаких других решений, кроме как отделить не вмещающийся фрагмент файла и положить его на другое место диска или выделить файлу последовательную область диска большего размера в другом месте, вдалеке от первых двух файлов, что приведёт к перемещениям головки диска, если приложению потребуется считать все файлы в каталоге (скажем, менеджер файлов будет создавать эскизы для файлов изображений).

Помимо этого, файловая система может заботиться только об определённых типах фрагментации и она не может знать, например, что она должна хранить все файлы, требуемые при загрузке, рядом друг с другом, поскольку она просто не знает, какие из них требуются при загрузке. Чтобы решить эту проблему, Ext4 будет поддерживать онлайн-дефрагментацию.

Также имеется утилита e4defrag, которая позволяет дефрагментировать как отдельные файлы, так и всю файловую систему.

11. Улучшения, связанные с inode

Бóльшие inodes, наносекундные временные метки, быстрые расширенные атрибуты, резервирование inodes…

  • Бóльшие inodes: Ext3 поддерживает inodes настраиваемого размера (путём указания mkfs параметра -I), однако размер inode по умолчанию — 128 байт. В Ext4 он будет 256 байт. Это потребовалось, чтобы вместить несколько дополнительных полей (таких как наносекундные временные метки и версии inode), а оставшееся в inode место будет использовано для хранения тех расширенных атрибутов, которые достаточно малы, чтобы там поместиться. Это позволит сделать доступ к таким атрибутам намного быстрее и улучшит производительность приложений, использующих их, в 3­—7 раз.
  • Суть резервирования inode состоит в выделении нескольких inodes при создании каталога в ожидании того, что они будут использованы в будущем. Это улучшает производительность, потому что вновь создаваемые в этом каталоге файлы смогут использовать зарезервированные inodes. Поэтому создание и удаление файлов производится более эффективно.
  • Наносекундные временные метки (nanosecond timestamps) означают, что такие поля inode как, например, время модификации получают наносекундную точность (в Ext3 она была равна секунде).

12. Устойчивое прераспределение

Эта возможность, доступная уже в Ext3 в последних версиях ядра и эмулируемая glibc в файловых системах, которые её не поддерживают, позволяет приложениям заранее распределять дисковое пространство, сообщая о своих потребностях файловой системе. Та, в свою очередь, выделяет необходимое количество блоков и структур данных, но они пусты до тех пор, пока приложение в реальности не осуществит в них запись.

Это именно то, что делают, например, P2P-приложения, выделяя место для данных, которые появятся там только спустя часы или дни. Однако реализовано это намного более эффективно — на уровне файловой системы и с универсальным API.

Применений этому несколько: во-первых, чтобы предотвратить выполнение того же самого приложениями (такими как P2P), неэффективно заполняющими файлы нулями — нужные блоки будут выделены разом.

Во-вторых, чтобы снизить фрагментацию — опять же потому, что блоки выделяются однократно, настолько непрерывно, насколько это возможно.

В-третьих, чтобы гарантировать, что приложение будет иметь столько места, сколько ему требуется, что особенно важно для приложений, работающих в реальном времени, поскольку файловая система может вдруг переполниться в процессе выполнения важной операции.

Эта возможность доступна через интерфейс libc posix_fallocate().

13. Механизм «шлагбаумов» по умолчанию включен

Это опция, обеспечивающая целостность файловой системы ценой некоторой потери производительности (её можно отключить с помощью «mount -o barrier=0», рекомендуется сделать это при замерах производительности).

Выдержка из статьи LWN: «Код файловой системы обязан перед созданием записи фиксации [журнала] быть абсолютно уверенным, что вся информация о транзакции помещена в журнал. Просто делать запись в правильном порядке недостаточно; современные диски имеют кэш большого объёма и меняют порядок записи для оптимизации производительности. Поэтому файловая система обязана явно сообщить диску о необходимости записать все журнальные данные на носитель перед созданием записи фиксации; если сначала будет создана запись фиксации, журнал может быть повреждён. Блокирующая система ввода-вывода ядра предоставляет такую возможность благодаря использованию механизма «шлагбаумов» (barriers); проще говоря, «шлагбаум» запрещает запись любых блоков, посланных после него, до того момента, как всё, что было прислано перед «шлагбаумом», будет перенесено на носитель. При использовании «шлагбаумов» файловая система может гарантировать, что всё, что находится на диске, целостно в любой момент времени».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *