Daniel Robbins ([email protected])
President/CEO, Gentoo Technologies, Inc.
August 2001
С выходом релиза 2.4 Linux появилась возможность использования filesystem с новыми свойствами, таких как Reiserfs, XFS, GFS и других. Эти filesystems еще не достаточно опробованы и имеются вопросы, что именно они могут делать, насколько они хороши и насколько оправдано их использование в промышленной Linux среде. Daniel Robbins отвечает на эти вопросы по ходу пояснения инсталляции этих новых продвинутых filesystems под Linux 2.4. В своей предыдущей статье этой серии Daniel описал преимущества journalling и ReiserFS. В этой статье речь пойдет о процессе инсталляции rock-solid Linux 2.4-based ReiserFS системы.
В этой статье я опишу процесс установки ReiserFS с ядром 2.4. Одновременно будут затронуты "технические" аспекты, касающиеся ядра 2.4 и его сопряженности с ReiserFS, вопросы производительности и т.п. Так как инсталляция будет описана в начале, я рекомендую прежде прочесть всю статью, и лишь потом перейти к практике. Полезно сразу ознакомиться с техническими примечаниями, поскольку при установке ReiserFS на вашу систему такое знание поможет снять ряд вопросов.
Чтобы enable ReiserFS на вашей системе, сначала потребуется найти подходящее ядро. Если вы следите за развитием ядер серии 2.4, то, наверное, знаете, что не все происходит гладко. При написании статьи последним было 2.4.6-pre2. Однако я рекомендую обратить внимание либо на 2.4.4 (a stock Linus kernel), либо на 2.4.4-ac9 (модифицированное ядро от Alan Cox) для установки ReiserFS. Тесты показали, что на 2.4.5 имеются "моменты", которые не позволяют рекомендовать это ядро для промышленного использования. Давайте надеяться, что 2.4.6 в этом плане будет лучше.
Если не хотите использовать 2.4.4 или 2.4.4-ac9 ядро для ReiserFS, прежде убедитесь, что проведены достаточные тесты по исследованию устойчивости ReiserFS на выбранном ядре. Конечно, предупреждение не распространяется для ReiserFS на тестовом сервере, где можно использовать любое ядро, если не поступало сообщений о его "проблемности".
Имеются два серьезных основания для повышенного внимания к проблемам стабильности ядра вообще и стабильности ReiserFS в частности. Первое, до сих пор ReiserFS - "экспериментальная" kernel feature и вы не должны прогнозировать, что ее реализация на более новом ядре будет работать не хуже, чем на предыдущем. Второе (в данный момент это самая большая проблема), большая часть релизов ядра 2.4 и patches были немного flaky side, что предполагает большую осторожность. Теоретически, все 2.4 релизы принадлежат stable series, так как 2.4 "по определению" считается таковой. На практике в этом возникают сомнения.
Я надеюсь, что не отговорил вас от использования ReiserFS или Linux 2.4, но предупреждение не будет лишним. Не прыгайте с одного ядра на другое только по причине его "современности". На промышленных системах такая практика ничего хорошего не сулит. Когда переходите на непроверенное ядро, вы рискуете не только зависанием системы, но и сохранностью данных. Даже если сама ReiserFS устойчива, есть вероятность, что ошибки в других частях ядра приведут к повреждению информации на файловой системе.
Если вы еще не выбрали хороший источник информации по стабильности современных ядер, я рекомендую посетить Linux Weekly News (смотри Resources ниже), чтобы быть "в курсе" kernel problems (информация обновляется каждый четверг). Теперь, когда я убедил читателей в использовании 2.4.4 или 2.4.4-ac9 для ответственных инсталляций ReiserFS, продолжим.
OK, возможны три варианта получения production-ready ReiserFS. Первый, использование простого stock 2.4.4 Linux kernel. Второй, использование 2.4.4 kernel с наложением ReiserFS bigpatch. Он, в свою очередь, содержит специальные patches для придания ReiserFS свойств quota-compatible и дополнительной совместимости с locally-running NFS сервером. Третий, использование 2.4.4 ядра с ac9 patch (что дает нам 2.4.4-ac9) как с bigpatch, так и без него. Я рекомендую использовать 2.4.4-ac9 с bigpatch, так как bigpatch не имеет отрицательных эффектов, а с ac9 ядро работает лучше. Однако, если вы испытываете неприязнь к ac ядрам, используйте простое 2.4.4. Далее описывается процесс установки 2.4.4-ac9 с bigpatch, но если у вас одна или обе patches не установлены, просто пропустите соответствующий шаг. Теперь начнем.
Получите 2.4.4 kernel sources от kernel.org и положите в /usr/src каталог. Переименуйте существовавший linux каталог или symlink на него, либо просто удалите старую symlink. Далее:
# cd /usr/src
# cat /path/to/linx-2.4.4.tar.bz2 | bzip2 -d | tar xvf -
Можно использовать простое 2.4.4 ядро, в нем все имеется. Однако я рекомендую применить следующие ac и bigpatch patches.
Для apply the ac9 patch, получите Alan Cox ac9 patch из kernel.org и выполните:
# cd /usr/src/linux
# bzip2 -dc /path/to/patch-2.4.4-ac9.bz2 | patch -p1
Наложив такой patch (или оставив все без изменений), получите DiCE и ReiserFS bigpatch. Опять же, этот шаг необязателен, но мною рекомендованный, особенно для NFS сервера и поддержки квот (даже если это вам не нужно, patch не навредит). Для наложения bigpatch выполните:
# cd /usr/src/linux
# bzip2 -dc /path/to/bigpatch-2.4.4.diff.bz2 | patch -p1
Выполнив один, оба или ни одного шага, вы готовы к конфигурированию ядра для ReiserFS.
Обратите внимание: если вам требуется помощь в компиляции ядра, есть хорошая, свободно распространяемая обучающая программа Compiling the Linux kernel на developerWorks. Далее очень кратко.
Kernel configuration весьма проста. Сначала выполняем "make menuconfig
". В секции "Code maturity level
options" убедитесь, что опция "Prompt for development and/or incomplete code/drivers" - enabled. Переходим
в секцию "File systems" и enable "ReiserFS support". Вы должны конфигурировать поддержку ReiserFS для
компилирования непосредственно в ядро, а не как модуль. Теперь не помешает разрешить "Have reiserFS do extra internal
checking". Сохраните конфигурацию и компилируйте ядро ("make dep; make bzImage; make modules; make modules_install") и
добавьте запись в ваш загрузчик для ReiserFS-enabled kernel.
Важно: никогда не удаляйте ваше текущее ядро, не убедившись в работоспособности нового.
До перезагрузки следует инсталлировать "reiserfsprogs" tools, которые состоят из "mkreiserfs", "resize_reiserfs" (полезно, если у вас используется LVM) и "fsck.reiserfs". Получить самую последнюю версию "reiserfsprogs" (на момент написания статьи - "3.x.0j") можно от Namesys.com download page. Как только tools загружены, их можно компилировать и инсталлировать следующими командами:
# cd /tmp
# tar xzvf reiserfsprogs-3.x.0j.tar.gz
# cd reiserfsprogs-3.x.0j
# ./configure
./configure output will appear here
# make
make output will appear here
# make install
make install output will appear here
После инсталляции tools можно создавать новые partitions (используя "fdisk" или "cfdisk") либо LVM logical volumes (используя "lvcreate") по необходимости и перезагрузить систему. Когда создается standard partitions его можно маркировать как "Linux native file system" (83).
После перезагрузки вы сможете создать файловую систему ReiserFS на пустом partition следующей командой:
# mkreiserfs /dev/hdxy
В этом примере /dev/hdxy - device node, соответствующий свободному partition. Монтирование аналогично любой другой файловой системе:
# mount /dev/hdxy /mnt/reiser
Добавить файловую систему ReiserFS в файл /etc/fstab можно при установке полей "freq" и "passno" в значение "0", например:
/dev/hdc1 /home reiserfs defaults 0 0
Начиная с этого момента ваша ReiserFS внешне становится тождественной ext2. Вы быстро забудете об изнурительном "fsck", а данные станут доступны быстрее, особенно из маленьких файлов.
Я использовал 2.4.4 с ReiserFS на промышленном сервере в течение месяца (на cvs.gentoo.org development сервере) без каких-либо проблем. 2.4.4 и 2.4.4-ac9 зарекомендовали себя надежными. Сервер сильно загружен операциями IO, так как на нем хранятся cvs архив нашего "dev-wiki", почтовый сервер gentoo.org, списки рассылки и другое.
Хотя ReiserFS превосходит по быстродействию практически во всех типах приложений "файловую классику" ext2, имеется ряд областей, где ReiserFS в настоящее время еще не доработан. Это не жесткие ограничения ReiserFS, а те области, до которых разработчики Namesys не имели время добраться.
Да, это истина. ReiserFS не имеет "dump" и "restore" реализации. Если вы желаете использовать ReiserFS, но вам нравится "dump", придется находить иные пути backing data. В действительности это не так актуально. Ядро 2.4 несовместимо с "dump" и "restore" в принципе (а не только на ReiserFS). Для подробной информации о dump/kernel 2.4 incompatibility читайте Linus Torvalds (смотри Resources), где он говорит, "Dump была глупой программой, во-первых. Оставьте ее в прошлом."
Хотя ReiserFS в общем, имеет преимущество в производительности над ext2, в частностях имеются и слабости. Первая - работа с "разреженными" файлами (например, mailbox). ReiserFS заметно хуже справляется с разреженными файлами, чем ext2. Положение должно изменится, когда разработчики Namesys вернуться к оптимизации этой стороны ReiserFS (предполагается в версии 4 ReiserFS). А сейчас ext2 - лучшее решение для приложений, которые помещают информацию в разреженные файлы.
Вы можете столкнуться с проблемами при написании кода, который делает связанный вызов stat() для большого числа файлов. Одно из приложений, которое имеет проблемы (проявляется только с ReiserFS на ядрах 2.4, но не с 2.2) - mutt mailer (смотри Resources) когда он читает большие maildir-style mailboxes. Очевидно, mutt выполняет вызов stats для каждого почтового файла дважды. Это имеет тенденцию замедления работы. В команде разработчиков ReiserFS об этой специфической проблеме знают и работают над ее устранением (решение будет включено в ReiserFS 4 или раньше).
К счастью, имеется пара простых приемов, которые вы можете использовать для "купирования" проблем производительности. Первый прием - монтирование ReiserFS filesystem с опцией "noatime" (опция монтирования, доступная и для других файловых систем). Вероятно, вы знаете, что системы UNIX делают запись atime (время доступа) для каждого объекта файловой системы и этот атрибут модифицируется при каждом чтении файла. Для большинства случаев штамп atime интереса не представляет (даже не могу привести пример, когда atime требуется для "критических" приложений). По этой причине, ничем не рискуя, от его модификации можно отказаться и получить выигрыш в производительности. Можно даже сказать следующее. Если вам не известно, что штамп atime требуется для конкретного приложения, разместившего файлы на конкретной файловой системе, то вы должны монтировать ее с опцией noatime. Используйте примерно следующую запись в /etc/fstab:
/dev/hdc1 /home reiserfs noatime 0 0
В первой статье о ReiserFS я упомянул, что ReiserFS имеет специфическую feature, называемую "tail packing" (упаковка хвостов). А что в ReiserFS называют "хвостами"? Во-первых, файлы, размер которых меньше, чем блок файловой системы или, во-вторых, "кончики" файлов, которые не заполняют весь блок. В первом случае ReiserFS имеет превосходную производительность по причине умения "запихивать" такие "карликовые" файлы в свои b*tree (первичная организационная структура данных). При этом данные хранятся рядом со stat-data (ReiserFS эквивалент i-node). Во втором случае с производительностью иначе. Хвосты не заполняют полный блок и непроизводительно используют дисковое пространство. Для лучшего использования дискового пространства ReiserFS использует "tail packing". Считается, что такая feature позволяет экономить более 5% в сравнении с ext2.
Не следует думать, что упаковка хвостов больших файлов имеет одни достоинства. Один из недостатков - снижение производительности. Разработчики ReiserFS предполагали, что ряд пользователей решит не жертвовать производительностью ради 5% экономии дискового пространства. Была предусмотрена опция монтирования "notail". Когда файловая система монтируется с этой опцией, упаковка хвостов отключается, что дает прирост скорости при меньшей вместимости диска. С учетом сегодняшней стоимости дискового пространства следует рекомендовать монтирование файловой системы с опциями "notail" и "noatime":
/dev/hdc1 /home reiserfs noatime,notail 0 0
Даже если имеется потребность в экономии дискового пространства, может оказаться хорошей идеей временное монтирование файловой системы (пока не заполнилась) с опцией "notail". Кроме того, некоторые загрузчики имеют проблемы с загрузкой ядер, созданных на ReiserFS с tail packing enabled. Если у вас LILO старее версии 21.6, с такой проблемой вы обязательно столкнетесь. Могут быть проблемы даже с современными версиями GRUB при загрузке файлов stage1 и stage1_5, хотя на загрузку самого ядра это не влияет. Устранить проблему поможет временное монтирование ReiserFS с опцией "notail" и перемещение файлов в буферную файловую систему "туда обратно". Помните, после пересоздания файлов (инсталляция нового ядра) они снова окажутся "без хвостов". Есть возможность перемонтирования файловой системы (с новыми опциями) без ее размонтирования (подробно в части 3). Ниже показано, как перемонтировать корневую файловую систему с опцией "notail". Команда будет полезной, если для вас обычная практика - упаковка хвостов, но загрузчик "этого не любит" и требуется "распаковать" вспомогательные файлы:
# mount / -o remount,notail
Если вы используете qmail с ReiserFS, то имеется несколько важных замечаний. Первое - необходимо использовать специальный patch к qmail 1.03 sources. Он требуется для устранения проблемы, которая возникает в связи с несинхронными "link()" и "unlink()" вызовами (с ext2 имеется похожая проблема). Далее, можно посетить Jedi's qmail tuning page, где содержится множество хороших советов о том, как оптимизировать производительность qmail. Наконец, имеется Jedi's ReiserSMTP package. ReiserSMTP содержит GPL plug-in для SMTP части qmail. Такая модернизация от Jedi's (специально для ReiserFS) обеспечит удвоение производительности при обработке входящей почты.
Я нахожу, что ReiserFS очень приятная файловая система и дает выигрыш не только на маленьких, но и на больших файлах по сравнению с ext2. Благодаря ReiserFS разработчикам требуется только 15 секунд для модификации CVS Gentoo Linux, притом, что на ext2 это занимало около 2 минут. ReiserFS делает работу более комфортной и позволяет нашему cvs серверу одновременно обрабатывать большее число IO без потери интерактивности.
Притом, что она уже сегодня производит впечатление, будущее представляется еще более интересным. Hans Reiser имеет очень агрессивный творческий план относительно ReiserFS, включая использование ее как full-fledged high-performance database с полной поддержкой transaction и advanced querying features. Со временем можно ожидать, что ReiserFS станет больше чем "другая высокоэффективная файловая система". Это должно открыть новые возможности и подходы для решения традиционных проблем хранения информации. С Namesys можно связывать и будущее развитие Linux.