On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru


тут кальяны





 

Журналируемые файловые системы под Linux

Довольно часто приходится слышать слова 'журналируемая файловая система'. Что это такое и какие ее реализации есть под Linux, мы рассмотрим в этой статье.

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

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

Возможны следующие варианты:

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

-- Система "упала" перед тем, как вы сохранили файл. В этом случае все не сохраненные изменения утеряны, однако старая версия файла по-прежнему на месте.

-- Система "упала" именно в момент сохранения файла. Это худшее из того, что могло произойти: новая версия файла записывается поверх старой. В итоге у вас будет файл, частично состоящий из новой версии и частично - из старой. Если файл был сохранен в бинарной форме, то вы не сможете заново открыть его, потому формат данных из файла не будет соответствовать стандартам, которые понимает приложение.

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

Стандартная для Linux файловая система ext2fs старается предотвратить разрушение метаданных и пытается их восстанавливать за счет тщательного анализа файловой системы (fsck) во время загрузки системы. В связи с тем, что ext2fs содержит избыточные копии критически важных метаданных, вероятность полной потери данных чрезвычайно мала. Система определяет местонахождение поврежденных метаданных и потом либо восстанавливает данные, копируя их из резервных копий, либо просто удаляет файл или файлы, чьи метаданные пострадали.

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

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

Журналируемые файловые системы, доступные под Linux, являются решением данной проблемы.

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

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

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

В любом случае у вас останутся неповрежденные данные и можно будет обойтись без засорения и/или разрушения дисковых разделов.

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

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

Первая - это ext3. Система разработана Stephen Tweedie, одним из ведущих разработчиков ядра, она добавляет функцию журналирования в ext2. Доступна на ftp.linux.org.uk/pub/linux/sct/fs/jfs/. Файловая система ext3 является прямым потомком ext2. Одной из самых ценных особенностей ext3 является 100%-ная обратная совместимость с ext2, так как ext3 - это не что иное, как ext2 с поддержкой журналирования. Очевидным недостатком ext3 является то, что в ней не реализована вся та функциональность современных файловых систем, которая повышает скорость манипулирования данными и качество их распределения на дисках.

Вторая - XFS. Была создана компанией SGI. Версия 1.0 вышла первого мая 2001. Доступна на oss.sgi.com/projects/xfs/. Эта файловая система - зрелый продукт, который доказал свою работоспособность, функционируя в качестве основной файловой системы на машинах, работающих под IRIX, которые поставлялись всем клиентам SGI. XFS выпущена под GPL.

Третья - ReiserFS. Разработчик: Namesys. Ее можно найти на www.namesys.com. Довольно оригинальная файловая система с новыми, я бы даже сказал революционными принципами функционирования. О том, к чему стремятся ее разработчики, на ferroscope.ru была опубликована статья. Точнее перевод с английского. Не знаю, осталась она там или нет, но почитать ее для развития было бы полезно.

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

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

файловая

система

создание

чтение

удаление

Кб/сек

%CPU

Кб/сек

%CPU

Кб/сек

%CPU

ext2

93

98

280

98

490

97

ext3

90

97

275

100

450

95

Xfs

92

98

250

95

440

98

ReiserFS

1310

100

8960

100

1920

99

Чем выше скорость, тем лучше файловая система. Также преимуществом является меньшая загрузка процессора. Как видно из таблицы, ReiserFS является чемпионом в управлении файлами, превосходя своих конкурентов больше чем в 10 раз.

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

Выводы, какую файловую систему использовать, делать вам. Сам я использую ReiserFS и буду рекомендовать ее всем, кто меня спросит. Хотя и говорят, что при работе с ней возникают некоторые трудности, лично у меня их не было. Для сравнения: раньше, когда у меня стояла файловая ext2, мне приходилось восстанавливать Linux именно из-за того, что ext2 вылетала при малейших глюках со стороны системы (я люблю экспериментировать:). Теперь же, когда Linux стоит на ReiserFS, проблем нет. Я даже не помню, когда мне последний раз приходилось заниматься восстановлением.

X-Stranger



Литература по Linux