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

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

Журналируемые файловые системы под 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 была опубликована статья. Точнее перевод с английского. Не знаю, осталась она там или нет, но почитать ее для развития было бы полезно.

Читайте также:  Linux как выглядит интерфейс

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

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

файловая

система

создание чтение удаление
Кб/сек %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, проблем нет. Я даже не помню, когда мне последний раз приходилось заниматься восстановлением.

Компьютерная газета. Статья была опубликована в номере 35 за 2001 год в рубрике soft :: linux

Источник

Введение

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


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

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

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


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

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

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

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

Что такое журналируюшая файловая система

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

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

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

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

Существующие журналирующие файловые системы

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

У Namesys есть журналирующая файловая система, которая называется ReiserFS . Ее можно найти на http://www.namesys.com/ .

Первого мая 2001 компания SGI выпустила версию 1.0 своей файловой системы для Linux XFS . Вы можете найти ее на oss.sgi.com/projects/xfs/ .

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

Установка ext3

Файловая система ext3 является прямым потомком ext2. Одной из самых ценных особенностей ext3 является 100%-ная обратная совместимость с ext2, так как ext3 — это не что иное как ext2 с поддержкой журналирования. Очевидным недостатком ext3 является то, что в ней не реализована все та функциональность современных файловых систем, которая повышает скорость манипулирования данными и качество их распределения на дисках.

ext3 существует как патч к ядру 2.2.19 kernel, так что сначала получите ядро linux-2.2.19 с ftp://ftp.kernel.org/pub/linux/kernel/v2.2/ или с одного из зеркал . Сам патч лежит на ftp://ftp.linux.org.uk/pub/linux/sct/fs/jfs/ или ftp.kernel.org/pub/linux/kernel/people/sct/ext3 , или же на одном из зеркал.
Неважно какой сайт вы выбрали — вам нужно получить следующие файлы:

  • ext3-0.0.7a.tar.bz2 : патч к ядру.
  • e2fsprogs-1.21-WIP-0601.tar.bz2 : набор программ e2fsprogs с поддержкой ext3

Скопируйте файл ядра Linux linux-2.2.19.tar.bz2 и файл ext3-0.0.7a.tar.bz2 в каталог /usr/src и распакуйте их: Первый .diff-файл — это копия патчей для отладчика ядра kdb (от SGI). Второй — это файловая система ext3.

Теперь сконфигурируйте ядро, сказав «YES» в пункте «Enable Second extended fs development code» (Разрешить использование дополнительного программного кода для экперименальных файловых систем) в разделе «Файловая система», а потом постройте ядро.

Когда ядро скомпилируется и установится, установите e2fsprogs: Вот и все. Следующий шаг — это установка ext3 на раздел диска. Перезагрузитесь с новым ядром. Теперь у вас появляется выбор: либо создать новую журналирующую файловую систему, либо журналировать уже существующую.

  • Создание новой файловой системы ext3. Просто используйте mke2fs из установленного пакета e2fsprogs, и не забудьте указать ключ «-j» при запуске mke2fs. где /dev/xxx — это устройство, на котором вы будете создавать файловую системы ext3. Флаг «-j» говорит mke2fs, чтобы была создана файловая система ext3 со скрытым журналом. Можно контролировать размер журнала, используя флаг flag -Jsize= (n — это нужный размер журнала в Мб).
  • Обновление существующей файловый системы ext2 до ext3. Просто запустите tune2fs: Это можно проделывать либо на смонтированной, либо на несмонтированной файловой системе. Если файловая система смонтирована, то в корне файловой системы создается файл .journal; если же нет — то скрытый inode (блок данных с информацией о файле) используется для журнала. Таким образом, все происходит без какого-то риска для жизни существующих на файловых системах данных.

Смонтировать файловую систему ext3 можно командой: Так как ext3 — это по сути журналирующая ext2, то корректно размонтированная файловая система ext3, может затем быть снова смонтирована как ext2 без использования каких-то дополнительных команд.

Установка XFS

XFS — это журналирующая файловая система для Linux, которая была разработана SGI. Это зрелый продукт, который доказал свою работоспособность, функционируя в качестве основной файловой системы на машинах, работающих под IRIX, которые поставлялись всем клиентам SGI. XFS выпущена под GPL.
XFS Linux 1.0 выпущена для ядра Linux 2.4, и я попробовал патч для 2.4.2. Таким образом, первым делом нужно раздобыть ядро linux-2.4.2 с одного из зеркал kernel.org.
Патчи лежат на oss.sgi.com/projects/xfs/download/Release-1.0/patches . Из этого каталога скачайте:

  • linux-2.4-xfs-1.0.patch.gz
  • linux-2.4.2-core-xfs-1.0.patch.gz
  • linux-2.4.2-kdb-04112001.patch.gz

Скопируйте файл ядра Linux linux-2.4.2.tar.bz2 в каталог /usr/src , перенесите существующую директорию linux в linux-old и распакуйте новое ядро: Скопируйте все патчи в корень вашей иерархии исходников Linux (то есть в /usr/src/linux) и применительно к ним сделайте: Затем сконфигурируйте ядро, активизируя опции «XFS filesystem support» [Поддержка файловой системы XFS] (CONFIG_XFS_FS) и «Page Buffer support» [Поддержка страничной буфферизации] (CONFIG_PAGE_BUF) в разделе «Файловая система». Обратите внимание на то, что вам также понадобится обновить следующие системные утилиты до указанных или более поздних версий:

  • modutils-2.4.0
  • autoconf-2.13
  • e2fsprogs-devel-1.18

Установите новое ядро и перезагрузитесь
Теперь скачайте пакет инструментов для работы с xfs . Этот тарбол содержит набор программ для использования файловой системы XFS, например mkfs.xfs. Для сборки сделайте: После установки этого пакета вы можете создать новую файловую систему XFS командой: Одной важной опцией, которая может вам понадобиться, является «-f», которая форсирует создание новой файловой системы, в случае если на манипулируемой партиции уже существует файловая система. Заметьте, что все данные на партиции будут уничтожены: После можно смонтировать новую файловую системы командой:

Установка ReiserFS

ReiserFS присутствует в официальной версии ядра Linux, начиная с версии 2.4.1-pre4. Для работы вам понадобятся специальные утилиты (например, mkreiserfs для создания ReiserFS на пустой партиции, resizer и др.).
Современная версия ReiserFS существует в виде патчей либо для ядер 2.2.x, либо — 2.4.x. Я тестировал патч на ядре 2.2.19

Как обычно первый шаг — это скачать стандартное ядро linux-2.2.19.tar.bz2 с зеркала kernel.org. Потом возьмите для reiserfs 2.2.19 patch . В настоящее время версия последнего патча — 3.5.33.
Пожалуйста, обратите внимание на то, что если вы выбираете патч для ядра 2.4.x, то тогда нужно также скачать тарбол с утилитами reiserfsprogs-3.x.0j.tar.gz .
Теперь распакуйте ядра и патч. Скопируйте тарболы в /usr/src и перенесите каталог linux в linux-old; затем выполните: Скомпилируйте ядро, предварительно установив поддержку reiserfs в разделе «Файловая система».
Скомпилируйте и установите утилиты reiserfs: Установите новое ядро и перезагрузитесь. Теперь можно создать новую файловую системы командой: и смонтировать ее с помощью:

Сравнительный анализ файловых систем

Следующим шагом в анализе было использование программы bonnie++ с http://www.coker.com.au/bonnie++/ . Эта программа проводит тестирование в стиле работы с базами данных применительно к какому-то одному файлу. Тестируется создание, чтение и удаление небольших файлов, что может имитировать работу таких программ, как Squid, INN, или ПО, работающего с форматом Maildir (qmail).
Команда для тестирования была следующей: что запускало тестирование с использованием 10 Мб (-s10) дискового пространства на файловой системе, смонтированной в каталог /work1. Таким образом, перед запуском теста, вы обязаны создать необходимую файловую систему и смонтировать ее в каталог /work1. Остальные опции отвечают за размер оперативной памяти в Мб (-r4) и за имя пользователя (-u0, то есть root). Результаты демонстрируются в следующей таблице.

Sequential Output Sequential Input Random
Seeks
Size:Chunk Size Per Char Block Rewrite Per Char Block
K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU / sec % CPU
ext2 10M 1471 97 14813 67 1309 14 1506 94 4889 15 309.8 10
ext3 10M 1366 98 2361 38 1824 22 1482 94 4935 14 317.8 10
xfs 10M 1206 94 9512 77 1351 33 1299 98 4779 80 229.1 11
reiserfs 10M 1455 99 4253 31 2340 26 1477 93 5593 26 174.3 5

Sequential Create Random Create
Num Files Create Read Delete Create Read Delete
/ sec % CPU / sec % CPU / sec % CPU / sec % CPU / sec % CPU / sec % CPU
ext2 16 94 99 278 99 492 97 95 99 284 100 93 41
ext3 16 89 98 274 100 458 96 93 99 288 99 97 45
xfs 16 92 99 251 96 436 98 91 99 311 99 90 41
reiserfs 16 1307 100 8963 100 1914 99 1245 99 9316 100 1725 100

Два типа данных приводятся для каждого теста: скорость файловой системы (в Кб/сек) и загрузка процессора (в %). Чем выше скорость, тем лучше файловая система. Что касается загрузки процессора — то там все наоборот.
Как видно из таблицы, ReiserFS является чемпионом в управлении файлами (раздел Sequential Create и Random Create ), превосходя своих конкурентов больше чем в 10 раз. Также, ReiserFS практически не уступает другим файловым системам в категориях Sequential Output и Sequential Input .

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

В качестве последнего испытания я использовал программу mongo, обнаруженную на странице тестов reiserFS на http://www.namesys.com/ . Я немного поправил исходники для использования программы с тремя файловыми системами. Я вставил в перловый скрипт mongo.pl команды для монтирования и форматирования файловых систем xfs и ext3. Потом я запустил программу тестирования.
Скрипт форматирует раздел /dev/xxxx, монтирует его и запускает заданное число процессов во время каждого этапа. Этапы были следующими: Create, Copy, Symlinks, Read, Stats, Rename и Delete. Также программа определяет степень фрагментации после этапов Create и Copy. С результатами можно ознакомиться и в каталоге results в файлах: Тестирование происходило таким образом:

где ext3 нужно заменить на reiserfs или xfs для тестирования других файловых систем. Остальные аргументы — это имя монтируемого устройства, где находится тестируемая файловая система, каталог, в который файловая система монтируется, имя файла, куда направляются результаты, и количество запускаемых процессов.

В следующих таблицах представлены результаты моего анализа. Представленные данные — это время (в сек). Чем меньше значение, тем лучше файловая система. В первой таблице используются файлы со средним размером 100 байтов, во второй — 1000 байтов, а в третьей — 10000 байтов.


ext3
files=68952
size=100 bytes
dirs=242
XFS
files=68952
size=100 bytes
dirs=241
reiserFS
files=68952
size=100 bytes
dirs=241
Create 90.07 267.86 53.05
Fragm. 1.32 1.02 1.00
Copy 239.02 744.51 126.97
Fragm. 1.32 1.03 1.80
Slinks 0 203.54 105.71
Read 782.75 1543.93 562.53
Stats 108.65 262.25 225.32
Rename 67.26 205.18 70.72
Delete 23.80 389.79 85.51


ext3
files=11248
size=1000 bytes
dirs=44
XFS
files=11616
size=1000 bytes
dirs=43
ReiserFS
f iles=11616
size=1000 bytes
dirs=43
Create 30.68 57.94 36.38
Fragm. 1.38 1.01 1.03
Copy 75.21 149.49 84.02
Fragm. 1.38 1.01 1.43
Slinks 16.68 29.59 19.29
Read 225.74 348.99 409.45
Stats 25.60 46.41 89.23
Rename 16.11 33.57 20.69
Delete 6.04 64.90 18.21


ext3
files=2274
size=10000 bytes
dirs=32
XFS
files=2292
size=10000 bytes
dirs=31
reiserFS
files=2292
size=10000 bytes
dirs=31
Create 27.13 25.99 22.27
Fragm. 1.44 1.02 1.05
Copy 55.27 55.73 43.24
Fragm. 1.44 1.02 1.12
Slinks 1.33 2.51 1.43
Read 40.51 50.20 56.34
Stats 2.34 1.99 3.52
Rename 0.99 1.10 1.25
Delete 3.40 8.99 1.84

Цифры говорят о том, что ext3 обычно быстрее на этапах Stats, Delete и Rename, в то время как reiserFS сильнее в Create и Copy. Также обратите внимание на то, что reiserFS проявляет свои лучшие качества в случае с маленькими файлами, что и подчеркивается в документации по reiserfs.

Выводы

На основании результатов тестирования, я советую в будущем установить файловую систему reiserFS (лично я это обязательно сделаю).

Источник

Читайте также:  Windows с драйверами для нетбука lenovo
Оцените статью