Журналирующие файловые системы под Linux
Автор: © Matteo Dell'Omodarme
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ВведениеФайловая система - это программное обеспечение, которое используется для организации и управления данными, хранящимися на носителях информации; файловая система обеспечивает целостность данных, контролируя идентичность данных при их записи и последующем чтении. Также, помимо хранения данных, находящихся в файлах, файловая система хранит и управляет важной информацией о файлах и о самой файловой системе (то есть это информация о дате и времени, владельце, правах доступа, и размере файла, а также носителе информации и местонахождении файлов на диске, и т.д.). Очень часто подобного рода информацию называют метаданными.
Так как файловая система старается работать как можно более
асинхронно для того, чтобы избегать узких мест при
обращении к диску, то неожиданное прерывание работы файловой
системы может привести к потере данных. В качестве
иллюстрации можно привести следующую ситуацию: что
произойдет, если ваша машина "упала" в то время, когда вы
работали с документом, расположенным в стандартной для Linux
файловой системе ext2?
Стандартная для Linux файловая система ext2fs старается предотвратить разрушение метаданных и пытается их восстанавливать за счет тщательного анализа фаловой системы (fsck) во время загрузки системы. В связи с тем, что ext2fs содержит избыточные копии критически важных метаданных, вероятность полной потери данных чрезвычайно мала. Система определяет метонахождение поврежденных метаданных и потом либо восстанавливает данные, копируя их из резервных копий, либо просто удалет файл или файлы, чьи метаданные пострадали.
Очевидно, что чем больше файловая система, тем дольше длится
процесс проверки. На дисковом разделе размером в несколько
гигабайт, процедура проверки метаданных во время загрузки
может очень сильно затянуться. Журналирующие файловые системы, доступные под Linux, являются решением данной проблемы. Что такое журналируюшая файловая системаНиже предлагается информация общего характера о журналировании. За специфической информацией и техническими подробностями обращайтесь к статье Juan I. Santos Florido из Linux Gazette 55. Дополнительную информацию можно получить с freshmeat.net/articles/view/212/.
Большинство современных файловых систем используют
журналирование, заимствованное из мира баз данных, которое
призвано улучшить восстановление после сбоев в работе
системы.
Дисковые транзакции последовательно записываются в
специальную зону диска, называемого
журналом или логом, перед тем как
записаться в конечные пункты своего назначения в файловой
системе. Теперь, если сбой происходит перед внесением записи в журнал, то первоначальная версии файла сохраняется на диске, а теряются только несохраненные изменения. Если система "падает" в момент обновления данных на диске (то есть после внесения записи в журнал), то запись в журнале показывает, что планировалось сделать. Поэтому после перезагрузки системы, прочитываются журнальные записи и прерванные операции записи на диск доводятся до своего логического конца. В любом случае у вас останутся неповрежденные данные и можно будет обойтись без засорения/разрушения дисковых разделов. Также важно отметить, что использование журналирующей файловый системы не делает использование программ проверки файловой системы полностью устаревшими. Ошибки в программном и аппаратном обеспечении, которые разрушают случайные блоки файловой системы, как правило не исправляются за счет использования транзакционного журнала. Существующие журналирующие файловые системыВ этой части статьи я рассмотрю три журналирующие файловые системы.Первая - это ext3. Система разработана Stephen Tweedie, одним из ведущих разработчиков ядра, ext3 добавляет функцию журналирования в ext2. Альфа-версия доступна на ftp.linux.org.uk/pub/linux/sct/fs/jfs/. У Namesys есть журналирующая файловая система, которая называется ReiserFS. Ее можно найти на www.namesys.com. Первого мая 2001 компания SGI выпустила версию 1.0 своей файловой системы для Linux XFS. Вы можете найти ее на oss.sgi.com/projects/xfs/. В этой статье я тестирую и сравниваю эти три решения с использованием двух различных программ.
Установка ext3За техническими подробностями об ext3, пожалуйста, обращайтесь к работе Stephen Tweedie и его дискуссии.Файловая система ext3 является прямым потомком ext2. Одной из самых ценных особенностей ext3 является 100%-ная обратная совместимость с ext2, так как ext3 - это не что иное как ext2 с поддержкой журналирования. Очевидным недостатком ext3 является то, что в ней не реализована все та функциональность современных файловых систем, которая повышает скорость манипулирования данными и качество их распределения на дисках.
ext3 существует как патч к ядру 2.2.19 kernel, так что
сначала получите ядро linux-2.2.19 с
ftp.kernel.org
или с одного из зеркал.
Сам патч лежит на ftp.linux.org.uk/pub/linux/sct/fs/jfs
или ftp.kernel.org/pub/linux/kernel/people/sct/ext3, или же на одном из зеркал.
mv linux linux-old tar -Ixvf linux-2.2.19.tar.bz2 tar -Ixvf ext3-0.0.7a.tar.bz2 cd linux cat ../ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1 cat ../ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1Первый .diff-файл - это копия патчей для отладчика ядра kdb (от SGI). Второй - это файловая система ext3. Теперь сконфигурируйте ядро, сказав "YES" в пункте "Enable Second extended fs development code" (Разрешить использование дополнительного программного кода для экперименальных файловых систем) в разделе "Файловая система", а потом постройте ядро. Когда ядро скомпилируется и установится, установите e2fsprogs: tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2 cd e2fsprogs-1.21 ./configure make make check make installВот и все. Следующий шаг - это установка ext3 на раздел диска. Перезагрузитесь с новым ядром. Теперь у вас появляется выбор: либо создать новую журналирующую файловую систему, либо журналировать уже существующую.
mount -t ext3 /dev/xxx /mount_dirТак как ext3 - это по сути журналирующая ext2, то корректно размонтированная файловая система ext3, может затем быть снова смонтирована как ext2 без использования каких-то дополнительных команд. Установка XFSЗа техническими подробностями о файловой системе XFS обратитесь на cтраницу SGI о XFS для Linux или страницу публикаций на сервере SGI.Также посмотрите страницу с FAQ .
XFS - это журналирующая файловая система для Linux, которая
была разработана SGI. Это зрелый продукт, который доказал
свою работоспособность, функционируя в качестве основной
файловой системы на машинах, работающих под IRIX, которые
поставлялись всем клиентам SGI. XFS выпущена под GPL. mv linux linux-old tar -Ixf inux-2.4.2.tar.bz2Скопируйте все патчи в корень вашей иерархии исходников Linux (то есть в /usr/src/linux) и применительно к ним сделайте: zcat patchfile.gz | patch -p1Затем сконфигурируйте ядро, активизируя опции "XFS filesystem support" [Поддержка файловой системы XFS] (CONFIG_XFS_FS) и "Page Buffer support" [Поддержка страничной буфферизации] (CONFIG_PAGE_BUF) в разделе "Файловая система". Обратите внимание на то, что вам также понадобится обновить следующие системные утилиты до указанных или более поздних версий: Установите новое ядро и перезагрузитесь Теперь скачайте пакет инструментов для работы с xfs. Этот тарбол содержит набор программ для использования файловой системы XFS, например mkfs.xfs. Для сборки сделайте: tar -zxf xfsprogs-1.2.0.src.tar.gz cd xfsprogs-1.2.0 make configure make make installПосле установки этого пакета вы можете создать новую файловую систему XFS командой: mkfs -t xfs /dev/xxxОдной важной опцией, которая может вам понадобиться, является "-f", которая форсирует создание новой файловой системы, в случае если на манипулируемой партиции уже существует файловая система. Заметьте, что все данные на партиции будут уничтожены: mkfs -t xfs -f /dev/xxxПосле можно смонтировать новую файловую системы командой: mount -t xfs /dev/xxx /mount_dir Установка ReiserFSЗа техническими деталями обращайтесь на сайт NAMESYS и на страницу с FAQ .
ReiserFS присутствует в официальной версии ядра Linux,
начиная с версии 2.4.1-pre4. Для работы вам понадобятся
специальные утилиты (например, mkreiserfs для создания
ReiserFS на пустой партиции, resizer и др.).
Как обычно первый шаг - это скачать стандартное ядро
linux-2.2.19.tar.bz2 с зеркала kernel.org.
Потом возьмите для reiserfs 2.2.19
patch. В настоящее время версия последнего патча - 3.5.33. tar -Ixf linux-2.2.19.tar.bz2 bzcat linux-2.2.19-reiserfs-3.5.33-patch.bz2 | patch -p0Скомпилируйте ядро, предварительно установив поддержку reiserfs в разделе "Файловая система". Скомпилируйте и установите утилиты reiserfs: cd /usr/src/linux/fs/reiserfs/utils make make installУстановите новое ядро и перезагрузитесь. Теперь можно создать новую файловую системы командой: mkreiserfs /dev/xxxxи смонтировать ее с помощью: mount -t reiserfs /dev/xxx /mount_dir Сравнительный анализ файловых системДля тестирования я использовал Pentium III - 16 Mb RAM - 2 Gb HD c установленным Linux RedHat 6.2.Все файловые системы работали без проблем, поэтому я затеял небольшой сравнительный анализ производительности файловых систем. В качестве первого теста, я имитировал сбой, просто выключив компьютер, чтобы проконтролировать процесс восстановления журнала. Все файловые системы прошли это испытание на ура, и во всех трех случаях машина была в норме уже через несколько секунд.
Следующим шагом в анализе было использование программы
bonnie++ с www.coker.com.au/bonnie++.
Эта программа проводит тестирование в стиле работы с базами
данных применительно к какому-то одному файлу. Тестируется
создание, чтение и удаление небольших файлов, что может
имитировать работу таких программ, как Squid, INN, или
ПО, работающего с форматом Maildir (qmail). bonnie++ -d/work1 -s10 -r4 -u0что запускало тестирование с использованием 10 Мб (-s10) дискового пространства на файловой системе, смонтированной в каталог /work1. Таким образом, перед запуском теста, вы обязаны создать необходимую файловую систему и смонтировать ее в каталог /work1. Остальные опции отвечают за размер оперативной памяти в Мб (-r4) и за имя пользователя (-u0, то есть root). Результаты демонстрируются в следующей таблице.
Два типа данных приводятся для каждого теста: скорость
файловой системы (в Кб/сек) и загрузка процессора (в %). Чем
выше скорость, тем лучше файловая система. Что касается
загрузки процессора - то там все наоборот. Что касается остальных файловых систем, то в их результатах разницы практически нет. Скорость XFS близка к скорости ext2, а ext3, как и ожидалось, немного медленнее ext2 (по сути это одно и то же, только ext3 тратит еще немного времени на обращение к журналу).
В качестве последнего испытания я использовал программу mongo,
обнаруженную на странице тестов reiserFS на www.namesys.com. Я
немного поправил исходники для использования программы с
тремя файловыми системами. Я вставил в перловый скрипт
mongo.pl команды для монтирования и форматирования файловых
систем xfs и ext3. Потом я запустил программу
тестирования. Fragm = число_фрагментов / число_файловС результатами можно ознакомиться и в каталоге results в файлах: log - результаты, представленные в неформатированном виде. log.tbl - результаты для программы, осуществляющей сравнение. log_table - результаты в виде таблицы.Тестирование происходило таким образом: mongo.pl ext3 /dev/hda3 /work1 logext3 1 где ext3 нужно заменить на reiserfs или xfs для тестирования других файловых систем. Остальные аргументы - это имя монтируемого устройства, где находится тестируемая файловая система, каталог, в который файловая система монтируется, имя файла, куда направляются результаты, и количество запускаемых процессов. В следующих таблицах представлены результаты моего анализа. Представленные данные - это время (в сек). Чем меньше значение, тем лучше файловая система. В первой таблице используются файлы со средним размером 100 байтов, во второй - 1000 байтов, а в третьей - 10000 байтов.
Цифры говорят о том, что ext3 обычно быстрее на этапах Stats, Delete и Rename, в то время как reiserFS сильнее в Create и Copy. Также обратите внимание на то, что reiserFS проявляет свои лучшие качества в случае с маленькими файлами, что и подчеркивается в документации по reiserfs. ВыводыНа сегодняшний день существует по крайней мере 2 работоспособных и надежных журналирующих файловых системы под Linux (то есть XFS и reiserFS), которые можно не боясь использовать.ext3 все еще находится в стадии альфа-тестирования и потенциально подвержена сбоям. У меня возникло несколько проблем с ext3, когда я тестировал ее с bonnie++: система сообщала об VM-ошибках и килляла шелл, которым я пользовался. На основании результатов тестирования, я советую
в будущем установить файловую систему reiserFS (лично я это
обязательно сделаю).
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 2001, Matteo Dell'Omodarme. Copying license http://www.linuxgazette.com/copying.html Published in Issue 68 of Linux Gazette, July 2001 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вернуться на главную страницу |