2006 г.
Руководство по продвинутым файловым системам.
Презентация ext3
Дэниел Роббинс (Daniel Robbins), перевод Владимира Холманова, под редакцией Алексея Федорчука
Первоисточник : http://www-106.ibm.com/developerworks/library/l-fs7.html
Ноябрь 2001
Зачем оно нужно? 
В прошлых статьях имелся обзор нетрадиционных файловых систем типа tmpfs. 
Теперь пришло время вернуться к файловым системам на блочных устройствах (disk-based), и это делается на 
примере ext3. Файловая система Ext3, разработанная доктором Стефеном Твиди (Dr. Stephen Tweedie), сформирована 
на структурах существующей файловой системы ext2; фактически, ext3 очень похожа 
на ext2 за исключением маленького (но важного) отличия - она поддерживает 
journaling. После такого "маленького" добавления в ext3 появились некоторые 
удивительные и интригующие возможности. В этой статье дается сравнение ext3 с 
другими journaling filesystems, доступными для использования уже сегодня. 
Планируется выход еще одной статьи об использовании ext3.
Пояснения к Ext3
Что собой представляет ext3 в сравнении с ReiserFS? В предыдущих 
статьях отмечалось, насколько хорошо ReiserFS подходит для работы с маленькими 
файлами (до 4КБ), и в отдельных случаях работа с такими файлами в ReiserFS 
в десять - пятнадцать раз эффективней, чем в ext2 (и ext3). Однако, кроме 
достоинств, ReiserFS имеет и свои слабости. В текущем релизе ReiserFS 
(версия 3.6) некоторые виды доступа к файлу фактически приводят к заметному 
снижению производительности в сравнении с ext2 и ext3 (особенно при чтении 
больших почтовых каталогов). Кроме того, ReiserFS не имеет хорошей 
совместимости с NFS и имеет проблемы с производительностью при дефиците 
свободного дискового пространства. Напротив, ext3 с этими задачами справляется 
великолепно. Она во многом подобна ext2; не ставит рекордов при обработке 
маленьких файлов, но хорошо прогнозируемая и не боится работы при ограниченных 
дисковых ресурсах.
 Еще одно достоинство ext3 происходит из того, что она основана на коде ext2. 
Дисковый формат ext2 и ext3 идентичен; из этого следует, что при необходимости файловую систему
ext3 можно монтировать как ext2 без каких либо проблем. И это 
еще не все. Благодаря факту, что ext2 и ext3 используют идентичные метаданные, 
имеется возможность оперативного обновления ext2 в ext3. Именно так. 
Имеется ряд системных утилит, работающих с современными ядрами (например, 
tune2fs) позволяющих конвертировать имеющуюся ext2 в 
журналируемую ext3. Удивительно, но сделать это можно даже на смонтированной файловой системе
ext2. Переход безопасен, обратим и сравнительно легок (в отличие 
от конвертирования в XFS, JFS или ReiserFS - какого либо копирования данных 
на другой раздел не требуется). Теперь представьте на мгновение тысячи 
промышленных серверов с ext2 (уже работающих), для которых обновление до ext3 
минутное дело; можно получить хорошее представление о перспективности ext3
в Linux семействе.
Если от меня потребуют дать характеристику ext3 в одном слове, я бы сказал - 
удобная. Это действительно удобно как следствие насколько только возможной 
совместимости ext3 с существующей ext2. После обновления вам не придется 
сталкиваться с любыми неожиданностями. Есть еще одна характеристика, 
положительно отличающая ext3 от остальных журналируемых файловых систем под Linux - 
высокая надежность, но об этом ниже.
Надежность Ext3
В дополнение к ext2-compatible, ext3 наследует другие преимущества общего 
формата метаданных. Пользователи ext3 имеют в своем распоряжении годами 
проверенный инструментарий fsck. Конечно, основная причина перехода на журналируемую файловую систему - отказ от необходимости периодических и долгих проверок 
непротиворечивости метаданных на диске. Однако "журналирование" не способно 
защитить от сбоев ядра или повреждения поверхности диска (или кое-чего 
подобного). В аварийной ситуации вы оцените факт преемственности ext3 от ext2 
с ее fsck. Напротив, ReiserFS fsck еще находится в младенчестве и устранение 
нарушений в метаданных может стать трудным и опасным процессом.
Журналирование только метаданных
Интересно то, что ext3 выполняет журналирование совсем иначе, чем ReiserFS и 
другие журналируемые файловые системы. В ReiserFS, XFS и JFS журналируются 
метаданные их и не предусмотрено какое либо журналирование самих 
данных. При при журналировании  метаданных (metadata-only journaling) метаданные хранятся 
так надежно, что, скорее всего вам не придется пользоваться fsck. Однако, 
неожиданные перезагрузки и сбои в электропитании могут приводить к утере 
данных, которые в момент сбоя записывались на диск. Ext3 использует 
несколько творческих решений для избежания таких проблем.
 Сначала поясним ситуацию с журналированием только метаданных. Например, 
вы редактировали файл /tmp/myfile.txt в момент, когда машина неожиданно 
блокировалась. В случае с журналируемыми системами, журналирующими только метаданные (например, 
ReiserFS, XFS или JFS), метаданные вашей файловой системы утрачены не будут и запуска 
fsck не потребуется. 
Однако, в случае такого сбоя имеется высокая вероятность, что в файле 
/tmp/myfile.txt останется один мусор, а то и просто он станет 
нечитабельным.  
 Причина в следующем. "Обычные" журналируемые файловые системы, подобные ReiserFS, 
XFS и JFS опекают метаданные, но для повышения производительности заботу о 
данных не проявляют. В нашем примере происходила модификация некоторых блоков и соответствующих им метаданных, но синхронизация была 
неожиданно прервана. "Непротиворечивость" файловых блоков будет восстановлена, 
чего нельзя сказать об их "наполнении".
Журнализация в ext3
Теперь, когда имеется общее понимание проблемы, посмотрим, как ext3 
осуществляет журналирование. В коде журнализации для ext3 используется специальный 
API, называемый Уровень журналирования блочного устройства (Journaling Block Device layer или JBD). JBD был разработан 
для журнализации на любых блочных устройств. Ext3 привязана к JBD API. При этом код файловой системы ext3 сообщает JBD о необходимости проведения модификации и 
запрашивает у JBD разрешение на ее проведение. Журналом управляет JBD от имени 
драйвера файловой системы ext3. Такое соглашение очень удобно, так как JBD развивается 
как отдельный, универсальный объект и может использоваться в будущем для 
журналирования в других файловых систем.  
 Имеется два важных момента в управлении журналом ext3 через JBD, вытекающих из 
хранения журнала в inode файле (в базовом варианте). Первое, в зависимости от 
ключей монтирования файловой системы ext3, этот файл можно "видеть" или "не видеть" 
(расположен в /.journal). Второе, такое хранение журнала делает возможным 
переход к ext3 через простое добавление единственного файла (и замену драйвера) 
без использования несовместимых расширений к метаданным ext2. Это ключ к 
пониманию "обратной совместимости" файловой системы ext3 с ext2 метаданными и 
"прямой совместимости" ext2 с ext3 драйвером.
Различные подходы к journaling
Нетрудно догадаться, что имеется несколько способов ведения журнала. Например, 
разработчик файловой системы может спроектировать журнал, который хранит промежуточные 
байты, подлежащие модификации в файловой системе. Преимущество такого подхода в 
том, что журнал хранил бы большое число крошечных модификаций очень эффективным 
способом, так как требуется запись только отдельных байтов и ничего больше. 
JBD использует иной подход. Вместо регистрации промежуточных байтов 
сохраняются полностью измененные блоки файловой системы. Драйвер Ext3, 
аналогично, хранит полные точные копии модифицируемых блоков (1КБ, 2КБ или 4КБ) 
в памяти до завершения операции ввода/вывода. Это может показаться расточительным. 
Полные блоки содержат не только изменившиеся данные, но и 
не модифицированные.
Подход, используемый JBD, называется "физическим журналированием", 
что отражает использование JBD "физических блоков" как основную единицу ведения 
журнала. Подход, когда хранятся только изменяемые байты, а не целые блоки, 
называется "логическим журналированием" (используется XFS). Поскольку 
ext3 использует "физическое журналирование", журнал в ext3 имеет размер больший, 
чем в XFS. За счет использования в ext3 полных блоков, как драйвером, так и 
подсистемой журналирования нет сложностей, которые возникают при "логическом 
журналировании". Кроме того, использование полных блоков позволяет исполнение 
некоторой дополнительной оптимизации, например объединение нескольких ожидающих 
обработки операции ввода/вывода в пределах моноблока в одной структуре оперативной памяти. 
Это позволяет ext3 записывать на диск несколько смежных модификаций одной 
операцией. Как дополнение, при операциях записи существенно сокращается нагрузка 
на CPU.
Защита данных в Ext3
Теперь можно поговорить о том, как файловая система ext3 обеспечивает журналирование и данных, и метаданных. Фактически в ext3 имеются два метода достижения гарантии непротиворечивости.
 Первоначально ext3 разрабатывалась для журналирования и всех данных, и метаданных. В этом режиме (называется "data=journal" mode), 
JBD журналирует все изменения в файловой системе, связанные как с данными, так и 
с метаданными. При этом JBD может использовать журнал для отката и 
восстановления метаданных и данных. Недостаток "полного" журналирования в 
достаточно низкой производительности и расходе большого объема дискового 
пространства под журнал.
Недавно для ext3 был добавлен новый режим журналирования, который сочетает 
высокую производительность и гарантию непротиворечивости структуры файловой 
системы после сбоя (как у "обычных" журналируемых файловых систем). Новый режим 
работы обслуживает только метаданные. Однако драйвер файловой системы ext3 по-прежнему отслеживает обработку целых блоков данных (если они связаны с 
модификацией метаданных), и группирует их в отдельный объект, называемый тразакцией (transaction). Транзакция будет завершена только после записи на диск всех 
данных. "Побочный" эффект такой "грубой" методики (называемой 
"data=ordered" mode) - ext3 обеспечивает более высокую вероятность 
сохранности данных (по сравнению с "продвинутыми" журналируемыми файловыми 
системами) при гарантии непротиворечивости метаданных. При этом происходит 
журналирование изменений только структуры файловой системы. Ext3 использует 
этот режим по умолчанию.
Заключение
В настоящее время многие пытаются определиться, какая из поддержанных в Linux 
журналируемых файловых систем является "лучшей". По большому счету, все определяется 
тем, для каких целей и каких приложений файловую систему планируется 
использовать; каждая имеет свои достоинства и недостатки. Безусловное 
преимущество пользователей Linux - возможность выбора между файловыми системами 
нового поколения. Вместо приклеивания ярлыка "лучшей" файловой системы, 
следует понять силу и слабость каждой и принять обоснованное решение.
Ext3 имеет множество преимуществ. Она разработана для максимальной простоты 
развертывания. Она основана на годами проверенном коде ext2 и получила 
"по наследству" замечательный инструментарий fsck. Ext3 в первую очередь предназначена 
для приложений, не имеющих встроенных возможностей по гарантированию сохранности 
данных. В целом, ext3 - замечательная файловая система и достойное продолжение 
ext2. В моей следующей статье будет описана установка и работа с ext3.