Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Kernels
 Boot 
 Memory 
 File system
 0.01
 1.0 
 2.0 
 2.4 
 2.6 
 3.x 
 4.x 
 5.x 
 6.x 
 Интервью 
 Kernel
 HOW-TO 1
 Ptrace
 Kernel-Rebuild-HOWTO
 Runlevel
 Linux daemons
 FAQ
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Secure Programming for Li...6525 
 Linux Kernel 2.6...5297 
 Trees...1144 
 Максвелл 3...1074 
 William Gropp...1022 
 Go Web ...999 
 Ethreal 3...952 
 Ethreal 4...939 
 Gary V.Vaughan-> Libtool...929 
 Ext4 FS...927 
 Ethreal 1...926 
 Clickhouse...925 
 Rodriguez 6...919 
 Steve Pate 1...911 
 C++ Patterns 3...889 
 Assembler...881 
 Ulrich Drepper...857 
 DevFS...803 
 MySQL & PosgreSQL...792 
 Стивенс 9...777 
 
  01.01.2024 : 3621733 посещений 

iakovlev.org

EXT4

Родерик Смит (Roderick Smith), автор и консультант, IBM

20.11.2008

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

Функции ext4

ОС Linux поддерживает несколько различных файловых систем. Некоторые из них являются специализированными сетевыми файловыми системами или файловыми системами, разработанными для других ОС, но лишь ограниченное количество из них может быть использовано в качестве основной файловой системы Linux – той системы, в которой хранится корневой каталог Linux (/) и системные каталоги. В настоящий момент такими системами являются ext3, ReiserFS, XFS и JFS (Journaled File System). Однако разработка и развитие файловых систем происходят постоянно, и на горизонте появляются новые файловые системы.

Возможно, наиболее значительной из файловых систем, разрабатываемых в настоящее время для Linux, является ext4 – четвертое воплощение оригинальной расширенной файловой системы (extended file system, ext или extfs), разработанной специально для Linux. Благодаря своему наследию ext4 скорее всего станет одной из стандартных файловых систем (а возможно и основной файловой системой) для Linux уже в обозримом будущем.

Сравнение ext4 и ext3

Четвертая версия расширенной файловой системы (ext4 или ext4fs) появилась на свет в связи с тем, что разработчики требовали добавления новых и расширения старых функций ext3. С этим шагом был связан ряд проблем:

  • Некоторые из новых функций нарушали обратную совместимость.
  • Код ext3 мог стать слишком сложным и трудным для поддержки.
  • Эти изменения могли сделать весьма надежную систему ext3 нестабильной.

Исходя из этих соображений, в июне 2006 года разработчики приняли решение выделить работу над ext4 в отдельную ветку. С этого времени началась разработка ext4, которая оставалась незаметной для большинства обычных пользователей и администраторов Linux. С выходом ядра 2.6.19 в ноябре 2006 года ext4 впервые появилась в стабильном ядре, хотя она и была помечена как экспериментальная (и остается таковой до сих пор), поэтому большинство пользователей проигнорировали ее.

Поскольку ext4 оставалась в разработке, по состоянию на момент выхода ядра 2.6.24.4 список ее функций постоянно меняется. Существующие и новые функции, включающие преимущества по сравнению с ext3, перечислены в таблице 1.


Таблица 1. Существующие и новые функции ext4, обеспечивающие преимущества перед ext3
ФункцияПреимущество
Больший размер файловой системы
В ext3 максимальный размер тома ограничивался 32 тебибайтами (TiB), а одного файла - 2 TiB, но практически ограничения на размер были намного выше, в зависимости от вашей архитектуры и системных настроек – до 2 TiB для тома и 16 гибибайт (GiB) для файла. В ext4 поддерживаются тома размером до 1024 пебибайтов (PiB) или 1 эксбибайта (EiB) и файлы размером до 16 TiB. Это может быть некритичным (пока!) для обычных рабочих станций или серверов, но может оказаться весьма важным для пользователей, работающих с большими дисковыми массивами.
ЭкстентыПрименение экстентов способствует увеличению эффективности файловых дескрипторов, сокращает время удаления больших файлов и улучшает многие другие аспекты.
Постоянное выделение пространстваВ случае если приложению необходимо зарезервировать дисковое пространство до того, как оно будет использовано, большинство файловых систем выполняют это, заполняя еще не использованное место на диске нулями. Ext4 выполняет резервирование без этого, что позволяет увеличить производительность некоторых баз данных и мультимедийных приложений.
Отложенное выделение пространстваExt4 может отложить выделение дискового пространства до последнего момента, тем самым увеличивая производительность.
Большее количество каталоговЕсли вас смущал тот факт, что в ext3 может храниться только 32000 каталогов, вам будет приятно узнать, что это ограничение устранено в ext4.
Контрольные суммы журналовExt4 добавляет в данные журналов контрольные суммы, тем самым повышая надежность и производительность.
Дефрагментация «на лету»Хотя ext3 не склонна к излишней фрагментации, файлы, хранящиеся в этой файловой системе, как правило, оказываются по крайней мере немного фрагментированными. В ext4 добавлена поддержка дефрагментации «на лету», увеличивающая общую производительность.
ВосстановлениеХотя эта функция пока не реализована, ext4 может поддерживать восстановление, которое, разумеется, удобно при случайном удалении файлов.
Быстрая проверка файловой системыВ ext4 добавлены структуры данных, которые позволяют fsck пропускать при проверке неиспользуемые части диска, что ускоряет проверку файловой системы.
Наносекундные временные меткиБольшинство файловых систем, в том числе ext3, используют временные метки с точностью до секунды. В ext4 точность этих данных увеличена до наносекунды. Также в некоторых источниках указано, что ext4 поддерживает временные метки до 25 апреля 2514 года, в отличие от ext3 (18 января 2038 г.).

Поскольку работа над ext4 продолжается, данный список функций может меняться. Некоторые из них при использовании создают обратную несовместимость с ext3 — поэтому, возможно, вы не сможете работать с файловой системой ext4, используя код ext3. Ext4 поддерживает прямую совместимость — файловую систему ext3 можно будет смонтировать как ext4.

Кому будет полезна ext4

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

Поскольку ext4 в настоящий момент является экспериментальной системой, для ее использования вам почти наверняка придется пересобрать ядро. Если для вас это сложная задача, вероятно, вы столкнетесь с трудностями при использовании ext4. В действительности экспериментальный характер ext4 означает, что вам следует использовать ее либо если вы хотите внести вклад в ее разработку, либо если вы остро нуждаетесь в каких-либо ее функциях. Если вам необходима проверенная поддержка больших дисков, вместо нее вы можете использовать файловые системы XFS или JFS, не дожидаясь выхода стабильного релиза ext4.

Естественно, ext4 не всегда будет экспериментальной. Со временем ext4 станет стабильной файловой системой. Когда это произойдет, ext4 будет практически для всех столь же хороша, как и ext3, с небольшими оговорками. Во-первых, по всей видимости, будут существовать ошибки, присущие только ext4, поэтому будьте внимательны первое время после выхода стабильного релиза. Во-вторых, использование ext4 может сделать невозможным использование старых утилит для доступа к вашему диску. Это может затронуть средства аварийного восстановления, поэтому возможно, перед обновлением стоит дождаться появления новых версий необходимых программ, поддерживающих ext4. Положительная сторона состоит в том, что миграция с ext3 на ext4 должна быть неразрушающей, что позволит выполнить переход легко и с сохранением имеющейся информации.

Если вы дочитали до этого места, вероятно, вы готовы поэкспериментировать с ext4. Для этого вам необходимо пересобрать ядро, чтобы добавить нужную функциональность. Рекомендую начать с последней версии ядра (на момент написания статьи это было ядро версии 2.6.24.4). После распаковки исходных кодов ядра либо настройте все параметры вручную, либо скопируйте файл .config старого ядра, выполните команду make oldconfig , чтобы скопировать ваши прежние настройки, и просмотрите параметры ядра с помощью привычной вам команды настройки, например make xconfig. Параметры ext4 расположены в основном разделе File Systems под названием Ext4dev/ext4 extended fs support development (EXPERIMENTAL). В будущем, по всей вероятности, это название изменится, когда ext4 станет стабильной. Обратите внимание: чтобы получить доступ к параметрам ext4, вам необходимо включить параметр Prompt for development and/or incomplete code/drivers.

Выбрав поддержку ext4, сохраните изменения ядра, скомпилировав его при помощи команды makeи установив модули при помощи команды make modules_install от имени суперпользователя root Затем необходимо скопировать скомпилированное ядро (из каталога arch/i386/boot или какого-либо другого) в соответствующее место (например, /boot), отредактировать параметры загрузчика GRand Unified Bootloader (GRUB) или Linux Loader (LILO) и перезагрузить компьютер. Если вы используете загрузочный RAM-диск, вам также необходимо подготовить его при помощи утилиты mkinitrd.

Кроме модулей ядра, вероятно, вы захотите познакомиться с версией программы e2fsprogs, поддерживающей системные функции ext4. Вы можете загрузить либо архив в формате tar (соответствующая ссылка есть в разделе Ресурсы), либо использовать git, как показано в листинге 1.


Листинг 1. Команда для получения последней версии e2fsprogs при помощи git
                
 $ git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
 $ cd e2fsprogs
 $ git checkout -b pu
 Switched to a new branch "pu"
 $ git branch 
 master
 * pu
 $ git pull git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git pu
 

Обратите внимание, что вам может понадобиться установить git при помощи вашего менеджера пакетов. Данный продукт пока не был достаточно протестирован, поэтому не рекомендуется использовать его в корпоративных системах. Кроме того, в настоящий момент в нем не так уж много функций, действительно необходимых для поддержки ext4. Исходя из этого, возможно, лучше будет использовать пакет e2fsprogs, поставляемый с вашим дистрибутивом.

Процесс компиляции e2fsprogs совершенно стандартен: распакуйте пакет, перейдите в необходимый каталог при помощи команды cd, введите команду ./configure, введите команду make, введите команду (от имени суперпользователя root) make install. Данный процесс установки перезаписывает стандартный пакет e2fsprogs , поэтому запускайте его, только если вы уверены в том, что хотите использовать новейшую (и, возможно, нестабильную) версию этой программы.

С момента загрузки ядра с поддержкой ext4 вы можете начать использовать новую файловую систему. Чтобы сделать это, вам необходимо подготовить раздел, RAID-массив или другое хранилище. Затем вы можете начать использовать его в качестве тома ext4 и настраивать параметры файловой системы.

Подготовка устройства

Если вы хотите начать с нуля, вы можете отформатировать раздел или другое устройство при помощи утилит mkfs.ext3 или mkfs.ext4, входящих в состав старого и нового пакета e2fsprogs соответственно. Например, команда mkfs.ext4 -j /dev/sda6 подготавливает для использования раздел /dev/sda6. Использование mkfs.ext4 позволяет активировать большее количество специфических функций ext4.

В настоящий момент изменения программ e2fsprogs не полностью соответствуют изменениям ядра файловой системы. К счастью, большинство функций драйвера ядра не требуют специальной подготовки при помощи mkfs.ext4 или других утилит. Функции ext4 активируются при монтировании соответствующего тома. Если вы хотите использовать ext4 с томами большого размера, вы будете одним из отважных первопроходцев, так что обязательно документируйте все проблемы, с которыми столкнетесь, и сообщайте о них!

Вы также использовать существующие тома ext2 или ext3 как ext4. Просто смонтируйте устройство, как описано ниже. Однако если вы используете новые функции, такие как экстенты, вы не сможете откатить изменения обратно к ext2 или ext3.

Использование ext4

Чтобы использовать устройство в качестве тома ext4, его необходимо смонтировать с кодом типа файловой системы ext4dev. Когда ext4 станет стабильной, код типа файловой системы изменится на ext4. Например, команда mount -t ext4dev /dev/sda6 /mnt/point монтирует раздел /dev/sda6 в качестве тома ext4 в каталог /mnt/point. Вот и все, что нужно для использования ext4. Обратите внимание, что по умолчанию при монтировании включаются экстенты, что изменяет файловую систему, делая невозможным откат к ext3. Если вы хотите испробовать ext4, но сохранить возможность возврата к ext3, отключите экстенты, указав параметр -o noextents.

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

Настройка параметров производительности ext4

Для настройки файловой системы ext4 можно использовать программу tune2fs, как и для ext2 и ext3. В настоящий момент tune2fs не поддерживает параметры, специфичные для ext4, хотя вы можете настраивать конкретные опции ext4, такие как экстенты, используя стандартный параметр -O.

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

Хотя монтирование тома ext3 в качестве тома ext4 активирует специфические функции ext4, само по себе монтирование не влечет за собой конвертацию старой структуры данных в новый формат. Например, для существующих файлов сохраняется поблочное выделение пространства вместо использования экстентов. Таким образом, старые файлы не пользуются новыми преимуществами. Разработчики ext4 учли этот факт и предложили решение: вы можете использовать (на свой страх и риск) программу e4defrag (описана ниже) для конвертирования выделений в экстенты. Другая новая утилита (пока не выпущена) будет изменять размеры inode под новый формат.

Для обслуживания ext4 вы можете использовать стандартные утилиты из набора e2fsprogs, например, tune2fs для настройки параметров после создания раздела, fsck.ext4 для исправления ошибок файловой системы и так далее. Эти программы мало отличаются от соответствующих версий для ext3. Хотя, как было отмечено ранее, ext4 содержит некоторые расширения, способствующие увеличению производительности fsck.

Кроме этих утилит, заслуживает отдельного упоминания еще одна программа - e4defrag. Она дефрагментирует подключенные тома ext4. Это может увеличить производительность, особенно если раздел заполнен почти полностью. Также эта программа способна конвертировать выделения, использовавшиеся в ext2/3, в выделения ext4 на основе экстентов, таким образом увеличивая производительность томов, ранее использовавших файловую систему ext3. К сожалению, e4defrag пока не входит в состав пакета e2fsprogs, поэтому вам придется искать ее отдельно

EXT4 benchmarks

All tests were run on a modern Intel E6600 based desktop equipped with an ATA disk. I made a small partition exclusively for this testing. File system under testing was recreated and freshly mounted for each and every test below, so that caching doesn't get in out way (I could've also used drop_caches kernel mechanism to get rid of caches, but this is safer). This also means that all tests were done in pristine environment, not accounting for fragmentation and other effects happening in real environments. ext4 was mounted with mount /dev/hda2 /mnt -t ext4dev -o extents so that extents are enabled. The kernel used was 2.6.19-rc2-mm1. The I/O scheduler was the kernel default CFQ.

Sequential reading/writing

I used an aging bonnie application to make some quick measurements of file system performance when doing sequential I/O operation.

Not much surprises here. While there are some differences among the file systems, I don't think they're that much interesting. All file systems are able to read sequentially from big files with speeds close to the platter speed (57MB/s in this case).

Sequential writing, on the other hand, shows that there are some real improvements built into ext4. Probably extents together with delayed block allocation allow ext4 to come first in this benchmark, leaving the other two file systems good 20 percent behind.

Creating/deleting small files

The other typical operation file systems do in some workloads is managing many small files. To measure performance in such environment I decided to prepare a simple application (make-many-files) whose only task is to make many small files (405,000 in this case), but also distribute them in a tree like structure, so that we don't measure directory operations only (it's a known fact that the performance of file system drops rapidly when you go over some number of files in the same directory). You can find the source of the applicaton attached to this article, if you would like to run it yourself.

While it can be seen that ext4 shows a slight regression over ext3, the real winner here is reiser4. It seems that ext4 could use some improvements in this area (rapid file creation).

Deleting almost half a million files created in the previous step is a completely different picture. Here ext3/4 completely dominate reiser4. Once again ext4 is slightly slower, but not much.

I also need to mention that for the above two tests reiser4 took much more CPU cycles. I'm not putting the graph here because it would not be easy to interpret, but it seems that the other testers were on the right track saying that reiser4 is quite heavy on CPU under some loads.

Postmark

For the final test, I decided to go with a macro benchmark. I ran postmark, a benchmark that's based around small file operations similar to those used on large mail servers and news servers. I used the following configuration for testing:

set read 4096
set write 4096
set transactions 10000
set size 500 500000
set number 5000

What we get out, after a few minutes of crunching with postmark, is the number of transactions per seconds. Where the bigger number indicates more performant file system. Ext4 has improved over ext3, but once again reiser4 is leading the bunch.

Conclusion

The ext4 file system promises improved data integrity and performance, together with less limitations, and is definitely the step in the right way. Even if there are some regressions in our measurements, when compared to ext3, they're quite small and no doubt will be fixed before the development is finished. On the other hand, under some workloads ext4 is already showing much better results.

Another surprise of this test is reiser4, which has the best performance in some tests.

It should be also noted that all the file systems were completely stable during these testing, no crashes, no unexpected behaviour. So feel free to do your own tests, but still be very careful before entrusting your important data to them (except ext3, of course).

Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье