Родерик Смит (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).