Анатомия ext4

Знакомимся с четвертой расширенной файловой системой

Четвертая расширенная файловая система, или ext4, - представитель нового поколения журналируемых файловых систем, поддерживающая обратную совместимость с предшествовавшей ей системой ext3. Хотя ext4 и не является пока стандартом, она будет файловой системой по умолчанию в большинстве новых дистрибутивов Linux®. Познакомьтесь с ext4 и узнайте, почему именно она будет вашей новой любимой файловой системой.

M. Тим Джонс, инженер-консультант, Emulex Corp.

М. Тим ДжонсМ. Тим Джонс - архитектор встроенного ПО и, кроме того, автор книг Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (выдержавшей на данный момент второе издание), AI Application Programming (второе издание) и BSD Sockets Programming from a Multilanguage Perspective. Он имеет обширный опыт разработки ПО в самых разных предметных областях - от ядер специальных ОС для геосинхронных космических аппаратов до архитектур встраиваемых систем и сетевых протоколов. Тим - инженер-консультант Emulex Corp., Лонгмонт, Колорадо.



30.06.2009

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

Краткая история расширенных файловых систем

Переключатель виртуальной файловой системы

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

Первая поддерживаемая Linux файловая система была заимствована из операционной системы Minix. Однако она имела значительные проблемы с производительностью, поэтому специально для Linux была создана расширенная файловая система. Первая расширенная файловая система (ext) была спроектирована Реми Кардом и появилась в Linux в апреле 1992 года. Именно в файловой системе ext был впервые применен переключатель виртуальной файловой системы (VFS), реализованный в ядре 0.96c и поддерживавший файловые системы размером до 2 гигабайт.

Вторая расширенная файловая система (ext2), также разработанная Реми Кардом, появилась в январе 1993 года. Она позаимствовала многие передовые идеи от других файловых систем своего времени (таких как быстрая файловая система Беркли (Berkeley Fast File System или FFS)). В ext2 размер поддерживаемых файловых систем был увеличен до 2 ТБ, а с появлением ядер версии 2.6 и до 32 ТБ.

Читайте другие статьи Тима Джонса на developerWorks

Третья расширенная файловая система (ext3) была серьезным продвижениям вперед для файловых систем Linux, хотя и уступала по производительности некоторым своим конкурентам. В ext3 появилась концепция журналирования, призванная улучшить надежность файловой системы в случае внезапной остановки. И хотя конкурирующие файловые системы (такие как XFS от Silicon Graphics и журналируемая файловая система IBM® - JFS) обладали лучшей производительностью, преимуществом ext3 была возможность обновления "налету" системы, использующей ext2, до ext3. Ext3 была разработана Стефаном Твиди и появилась в ноябре 2001 года.

Вернемся в настоящее. Теперь у нас есть четвертая расширенная файловая система (ext4). В ext4 появилось несколько новых улучшений производительности и надежности. Самым заметным, пожалуй, является то, что ext4 поддерживает файловые системы до одного экзабайта. Ext4 была реализована командой программистов под руководством Теодора Цо (разработчика, сопровождающего ext3). Она впервые появилась в ядре версии 2.6.19 и стала стабильной в ядре 2.6.28, вышедшем в декабре 2008 года.

Ext4 позаимствовала множество полезных идей из ряда конкурирующих файловых систем. Например, управление блоками на основе экстентов было реализовано в JFS. Другая новая возможность ext4, связанная с управлением блоками - отложенное выделение, - была ранее реализована в XFS и ZFS от Sun Microsystems.

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


Функциональность

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

Прямая и обратная совместимость

Так как ext3 - одна из наиболее популярных на сегодняшний день файловых систем Linux, то переход на ext4 должен быть простым и безболезненным. Для этого ext4 была спроектирована так, чтобы иметь прямую и обратную (в некоторой степени) совместимость с ext3 (см. рисунок 1). Прямая совместимость означает, что можно монтировать файловую систему ext3 как систему ex4. Чтобы пользоваться всеми преимуществами ext4 в полной мере, необходимо выполнить процедуру миграции для конвертации системы в формат ext4. Обратная совместимость означает, что можно монтировать файловую систему ext4 как систему ext3, но только если система ext4 не использует экстенты (мы обсудим это в разделе, посвященном производительности).

Рисунок 1. Прямая и обратная совместимость системы ext4
The forward and backward compatibility of ext4

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

Увеличение точности и диапазона временных меток

Как ни удивительно, но раньше в расширенных файловых системах использовались временные метки с точностью до секунды. Для многих целей такая точность была достаточна, но по мере увеличения скоростей процессоров и появления многоядерных процессоров, а также распространения Linux в таких областях, как высокопроизводительные вычисления, секундной точности временных меток стало не хватать. С расчетом на будущее в ext4 точность временных меток была увеличена до одной наносекунды путем добавления еще одного (младшего) значащего байта. Также на два бита был расширен временной интервал, что увеличило возможное время жизни системы на 500 лет.


Масштабируемость

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

Расширение лимитов файловой системы

Одним из самых заметных отличий ext4 от ext3 является поддержка увеличенных размеров томов, файлов и поддиректорий. Ext4 поддерживает файловые системы размером до одного экзабайта (1000 петабайт). Хотя по сегодняшним стандартам это громадная цифра, потребление места на устройствах хранения увеличивается, так что, несомненно, ext4 была разработана с расчетом на будущее. Файлы в ext4 могут достигать размера 16 ТБ (при блоках размером 4 КБ), что в восемь раз больше, чем в ext3.

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

Экстенты

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

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


Производительность

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

Предварительное выделение на файловом уровне

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

Отложенное выделение блоков памяти

Другим приемом оптимизации, основанным на размере файлов, является отложенное выделение. от прием оптимизации производительности откладывает выделение физического блока памяти до момента, когда данные должны быть фактически записаны на диск. Суть этой оптимизации в том, что откладывание выделения физических блоков памяти до того, пока они действительно будут записаны, позволяет выделять больше последовательных блоков. Это похоже на предварительное выделение, за исключением того, что эту задачу система выполняет автоматически. Но если размер файла известен заранее, лучше применять предварительное выделение.

Выделение блоков памяти группами

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

Другим аспектом группового выделения блоков является объем работы, необходимой для выделения блоков. Напомним, что в ext3 выделение осуществляется по одному блоку за раз. Выделение блоков группами требует гораздо меньшего количества вызовов, что ускоряет выделение блоков.


Надежность

При увеличении размеров файловых систем до уровней, поддерживаемых ext4, неизбежно встает проблема повышения надежности. Для ее решения в еxt4 предусмотрено множество механизмов самозащиты и самовосстановления.

Контрольная сумма журнала файловой системы

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

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

В зависимости от нужд пользователя ext4 может работать в разных режимах журналирования. Например, ext4 поддерживает режим обратной записи (в журнал заносятся только метаданные), режим упорядочивания (метаданные заносятся в журнал, но только после записи самих данных), а также самый надежный - журнальный режим (в журнал заносятся как данные, так и метаданные). Заметьте, что хотя журнальный режим - это лучший способ гарантировать целостность файловой системы, в то же время это и самый медленный режим, так как в нем через журнал проходят все данные.

Дефрагментацияы "на лету"

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

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


Что дальше?

Расширенная файловая система в Linux имеет долгую и богатую историю - от первого появления ext в 1992 году до выхода ext4 в 2008. Это была первая файловая система, разработанная специально для Linux, и она зарекомендовала себя как одна из самых эффективных, стабильных и мощных файловых систем. Ext4 развивалась вместе с прогрессом в исследовании файловых систем, заимствуя идеи из других новых файловых систем (таких как XFS, JFS, Reiser, а также IRON-технологии отказоустойчивых файловых систем). Хотя сейчас слишком рано говорить о том, какой будет ext5, ясно, что она будет развиваться с учетом потребностей Linux-систем корпоративного уровня.

Ресурсы

Научиться

Получить продукты и технологии

  • Загрузите последний выпуск ядра с сайта kernel.org. (EN)
  • Разработайте ваш следующий Linux-проект с помощью пробного ПО от IBM, которое можно загрузить непосредственно с сайта developerWorks. (EN)

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=405256
ArticleTitle=Анатомия ext4
publish-date=06302009