Руководство по "продвинутым" файловым системам, часть 10


Первоисточник : http://www-106.ibm.com/developerworks/library/l-fs10.html


Развертывание XFS.

Daniel Robbins ([email protected])
President/CEO, Gentoo Technologies, Inc.
April 2002

С выходом релиза 2.4 Linux появилась возможность использования filesystem с новыми свойствами, таких как Reiserfs, XFS, GFS и других. Эти filesystems еще не достаточно опробованы и имеются вопросы, что именно они могут делать, насколько они хороши и насколько оправдано их использование в промышленной Linux среде. Daniel Robbins отвечает на эти вопросы по ходу пояснения инсталляции этих новых продвинутых filesystems под Linux 2.4. В этой статье Daniel описывает, как добавить XFS к вашей системе и исследует отдельные, более "продвинутые" features XFS.

В этой статье будет показано, как добавить поддержку XFS к вашей системе. Но сначала посетите и исследуйте SGI XFS Project page (смотри Resources далее). Если проследуете по download link, вы найдете patches, tools и даже Red Hat XFS-enabled kernels.

Но не торопитесь. Конечно, можно инсталлировать XFS используя pre-rolled, т.е. официальные релизы. Но в данном случае я не рекомендую такой подход. При написании этой статьи самый последним из официальных релизов XFS был 1.0.2, созданный еще в ноябре 2001. С того времени было внесено множество уточнений к XFS и, чтобы извлечь из этого выгоду, воспользуемся современными sources из XFS CVS tree. Developers и users, сделавшие выбор в пользу Gentoo Linux и воспользовавшиеся XFS из CVS, получили от XFS много больше.

Использование CVS.

Если вы раньше не пользовались CVS, можете воспользоваться моей tutorial - CVS для developer и любителей (смотри Resources). Даже если вы имеете самое общее представление о CVS, этого будет достаточно. Убедитесь только, что на вашей системе имеется инсталлированный CVS package и вам доступна команда cvs.

Описание CVS instructions, которые будут использоваться далее, можно также найти на SGI's site (смотри Resources). После grabbing исходников через cvs, вы получите новый каталог, содержащий up-to-date XFS-enabled kernel sources и самые современные XFS tools. Для grab the sources от XFS CVS сначала установите переменную окружения CVSROOT в требуемое значение. Например, по bash prompt введите:


$ export CVSROOT=':pserver:[email protected]:/cvs'

Теперь перейдите в каталог, где вы желаете разместить XFS directory tree, и выполните:


$ cvs login

По запросу пароля введите cvs. Теперь вы подключились к public CVS repository. Получите самые последние XFS sources, введя:


$ cvs -z3 checkout linux-2.4-xfs

Запустится процесс checkout. Это займет некоторое время, так как файлы, которые вы grabbing, включают полное Linux source tree. Через некоторое время, когда команда cvs checkout завершится, вы будете иметь новое linux-2.4-xfs directory tree в текущем рабочем каталоге. Рекомендация на будущее: если вам потребуется модернизировать source tree, просто внутри linux-2.4-xfs каталога введите:


$ cvs -z3q update -dP

Работа с деревом.

Имеется два важных каталога внутри нового linux-2.4-xfs. Первый называется linux и содержит XFS-enabled kernel source tree, а второй называется cmd и содержит sources для различных XFS userspace программ. Чтобы воспользоваться kernel sources, можно либо скопировать linux каталог в /usr/src, либо компилировать новое ядро "на месте".

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


VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 17
EXTRAVERSION = -xfs

Эти строки сообщают Makefile компилировать ядро с официальным именем 2.4.17-xfs. Некоторые предпочитают иметь ядро без -xfs в официальном имени. Если вы один из таких людей, измените строку, которая будет читаться:


EXTRAVERSION =

Теперь о kernel configuration. Для enable XFS, после make menuconfig перейдите в секцию File systems. Там вы увидите следующую опцию:


< > SGI XFS filesystem support

Разрешите ее (рекомендуется статически компилировать в ядро). Введите "y" и появятся еще три под опции:


[ ]   Enable XFS Realtime support
[ ]   Enable XFS Quota
< >   Enable XFS DMAPI

Опция "XFS Realtime" разрешает поддержку realtime subvolume в XFS, что позволит в дальнейшем конфигурировать области памяти, обеспечивающие deterministic performance для приложений реального времени. Опция "XFS Quota" позволит, как нетрудно догадаться, поддержку лимитов на размер доступного дискового пространства для пользователей и групп. Опция "XFS DMAPI", если помечена, разрешит специальный API, предназначенный для management приложений. В настоящее время под Linux еще нет tools, которые пользуются преимуществами DMAPI (имеются у Sistina's LVM и "родные" SGI XFS utilities). Однако некоторые DMAPI-enabled приложения для Linux уже находятся в разработке у SGI и IBM.

После выбора "SGI XFS filesystem support" и конфигурирования остальной части ядра по вашему вкусу, вы готовы ввести make dep && make && make bzImage && make modules && make modules_install, инсталлировать новое ядро и перезагрузиться. .

Инсталляция tools.

Теперь, когда вы работаете на XFS-enabled kernel, можно создать и инсталлировать различные XFS tools. Одна из хороших новостей относительно XFS - она поставляется с полным набором инструментов поддержки и утилит. Войдите в каталог linux-2.4-xfs/cmd и запустите (с правами root) следующий shell script:


# for x in attr acl xfsprogs dmapi xfsdump
do
cd $x
autoconf
/configure --prefix=/usr
make
make install
cd ..
done

Не забудьте о переводе строки после done. Наш специальный build script начнет работу, и все XFS tools будут инсталлированы. После финиша добавим несколько developer-related файлов, которые не инсталлированы предыдущей командой make installl:


# for x in attr dmapi xfsprogs
do
cd $x
make install-dev
cd ..
done

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

После отработки script все XFS-related программы будут инсталлированы и готовы к использованию. Можно создать тестовую XFS и попытаться достигнуть оптимальной производительности.

Если XFS создается поверх ReiserFS, потребуется небольшая уловка. По bash prompt введите следующую команду для "обнуления" начального участка block device, на котором хранилась ReiserFS, а теперь вы собираетесь инициализировать новую XFS filesystem:


# dd if=/dev/zero of=/dev/hdc9

Такой шаг необходим для wipe out хранящихся ReiserFS метаданных. Иначе, команда mount может "запутаться" и случайно смонтировать новую XFS filesystem как дефектную ReiserFS! Достаточно позволить dd отработать 10 секунд и прервать комбинацией CTRL-C. При этом все "критические" части ранее существовавшей ReiserFS будут заполнены нулями, а код авто-детектирования типа файловой системы "путаться" больше не будет.

Пришло время create новую файловую систему. Для этого можно воспользоваться командой mkfs.xfs следующим образом:


# mkfs.xfs /dev/hdc9

Такая команда сделает все необходимое, но имеется пара опций, позволяющих mkfs.xfs сконфигурировать новую XFS под максимальную производительность.

Первая из таких опций -l size=32m, что сообщит mkfs.xfs сконфигурировать файловую систему так, чтобы журнал метаданных имел размер 32 Mb. Это повысит производительность, сделав маловероятным переполнение журнала при высоких нагрузках.

Вторая опция позволяет поднять производительность новой файловой системы, сообщив mkfs.xfs минимизировать число allocation groups. Обычно, mkfs.xfs выбирает число allocation groups автоматически. Но опыт показывает, выбирается число несколько большее, чем требуется для оптимальной производительности однопроцессорных Linux workstations и серверов. Если вы повторно перечитаете мою предыдущую статью, allocation groups позволяют XFS выполнять операции над метаданными параллельно. Это очень удобно для high-end серверов, но слишком много allocation groups добавляют работы. Вместо того чтобы разрешить mkfs.xfs автоматически выбрать число allocation groups для вашей файловой системы, сделайте это "вручную", используя -d agcount=x. Выберите x минимальным, например, 4, 6 или 8. Расчет достаточно прост, необходимо иметь, по крайней мере, одну allocation group на каждые 4 GB в target block device. Две описанные опции позволят создать "оптимизированную" XFS filesystem следующей командой:


# mkfs.xfs -d agcount=4 -l size=32m /dev/hdc9

Теперь, после created файловой системы, ее можно монтировать. При этом можно воспользоваться некоторыми performance-enhancing опциями монтирования, чтобы "выжать" максимум из новой файловой системы:


# mount /dev/hdc9 /mnt -o noatime,nodiratime,osyncisdsync

Первые две опции монтирования выключают модификацию atime, что практически никогда и не требуется, но способствует деградации производительности. Опция osyncisdsync добивается такого sync/async поведения XFS, чтобы максимально соответствовать таковому в ext3. Благодаря таким mkfs.xfs и mount ваша новая XFS будет иметь скорость немного выше, чем при умолчании.

Положительные герои.

Одна из хороших вещей в XFS - она имеет много goodies. Одной из таких специальных функциональных возможностей являются "access control lists" или ACL. Сейчас это поддерживается в XFS по умолчанию. Списки контроля доступа позволяют определять fine-grained разрешения на файлы. Например, вместо ограниченного "rwx" для владельца, группы и других, становится возможным добавлять любое число дополнительных пользователей или групп и определять "rwx" permissions и для них.

Полное описание access control lists - вне контекста этой статьи. Если вам это интересно, посмотрите большое введение в ACL на bestbits site (Resources), особенно, если посетить страничку "Why you may want Access Control Lists (ACLs)". Обратите внимание, большая часть технической информации этого сайта связана с поддержкой ACL под ext2 и ext3 (но ничего дополнительного не требуется для ACL под XFS).

XFS имеет еще одну feature, называемую "extended attributes". Такие extended attributes позволяют вам associate user-defined данные с объектами файловой системы. Например, если вы имеете графический файл по имени mygraphic.png, можно attach к нему атрибут, называемый "thumbnail", содержащий маленькую версию image. Эти данные не будут viewable обычными IO файловыми операциями, но к ним можно обращаться из программ, использующих special extended attributes API. По своей сути, extended attributes похожи на "resource fork", существующие на MacOS системах.

Имеется пример использования extended attributes через команду attr из командной строки. Скажем, я желаю добавить description attribute к моему home каталогу. Я ввожу:


$ attr -s description -V "Home of Daniel Robbins" /home/drobbins
Attribute "description" set to a 22 byte value for /home/drobbins:
Home of Daniel Robbins

После этого, чтобы видеть список атрибутов, ассоциированных с /home/drobbins, можно ввести:


$ attr -l /home/drobbins
Attribute "description" has a 22 byte value for /home/drobbins/

А чтобы просмотреть содержание description attribute, я ввожу:


$ attr -q -g description /home/drobbins/
Home of Daniel Robbins

Extended attributes просты и забавны в использовании. Вы можете узнать о них больше, прочитав man attr. XFS включает также API C для взаимодействия с extended attributes. Если вы интересуетесь работой с C++ IOStream интерфейсом к extended attributes, можете посмотреть libferris на SourceForge (Resources).

Конечно, extended attributes и ACL открывают интересные возможности, но будьте осторожны. Большинство backup программ в настоящее время еще "не понимают" ни EA, ни ACL. Известные мне исключения - xfsdump и xfsrestore, поставляемые с XFS distribution. Если используете другую backup программу, проведите сначала интенсивное тестирование на поддержку EA и ACL.

Я надеюсь, вам понравилось это "мгновенное" введение в XFS filesystem. Ждите новых статей!

Resources

About the author

author Residing in Albuquerque, New Mexico, Daniel Robbins is the President/CEO of Gentoo Technologies, Inc., and the creator of Gentoo Linux, an advanced Linux for the PC, and the Portage system, a next-generation ports system for Linux. He has also served as a contributing author for the Macmillan books Caldera OpenLinux Unleashed, SuSE Linux Unleashed, and Samba Unleashed. Daniel has been involved with computers in some fashion since the second grade, when he was first exposed to the Logo programming language as well as a potentially dangerous dose of Pac Man. This probably explains why he has since served as a Lead Graphic Artist at SONY Electronic Publishing/Psygnosis. Daniel enjoys spending time with his wife, Mary, and his new baby daughter, Hadassah. You can contact Daniel at [email protected].

Перевод: Владимир Холманов