2006 г.
Руководство по продвинутым файловым системам
Развертывание XFS
Дэниел Роббинс (Daniel Robbins), перевод Владимира Холманова, под редакцией Алексея Федорчука
Первоисточник : http://www-106.ibm.com/developerworks/library/l-fs10.html
Апрель, 2002
Зачем оно нужно?
В этой статье будет показано, как добавить поддержку XFS к вашей системе. Но
сначала посетите и исследуйте SGI XFS Project page. Если проследуете по ссылкам, вы найдете патчи, инструментарий и даже ядро от Red
Hat, поддерживающее XFS.
Но не торопитесь. Конечно, можно инсталлировать XFS используя pre-rolled,
т.е. официальные релизы. Но в данном случае я не рекомендую такой подход. При
написании этой статьи самый последним из официальных релизов XFS был 1.0.2,
созданный еще в ноябре 2001. С того времени было внесено множество уточнений к
XFS и, чтобы извлечь из этого выгоду, воспользуемся современными исходниками из XFS
CVS-дерева. Developers и users, сделавшие выбор в пользу Gentoo Linux и
воспользовавшиеся XFS из CVS, получили от XFS много больше.
Использование CVS
Если вы раньше не пользовались CVS, можете воспользоваться моим руководством по
CVS для разработчиков и любителей.
Даже если вы имеете самое общее представление о CVS, этого будет достаточно.
Убедитесь только, что на вашей системе имеется инсталлированный пакет CVS и
вам доступна команда cvs
.
Описание инструкций CVS, которые будут использоваться далее, можно также
найти на сайте SGI.
После скачивания исходников через cvs
, вы получите новый каталог,
содержащий ядро, готовое к использованию XFS, и самые современные инструменты для работы с этой файловой системой. Для скачивания исходников от XFS CVS сначала установите переменную окружения
CVSROOT
в требуемое значение. Например, в командной строке bash введите:
$ export CVSROOT=':pserver:cvs@oss.sgi.com:/cvs'
Теперь перейдите в каталог, где вы желаете разместить каталог дерева XFS, и
выполните:
$ cvs login
По запросу пароля введите cvs
. Теперь вы подключились к общедоступному репозиторию
CVS. Получите самые последние исходники XFS, введя:
$ cvs -z3 checkout linux-2.4-xfs
Запустится процесс checkout. Это займет некоторое время, так как файлы,
которые вы скачиваете, включают полное дерево исходников ядра Linux. Через некоторое время,
когда команда cvs checkout
завершится, вы будете иметь новое дерево исходников в текущем рабочем каталоге. Рекомендация на будущее: если вам потребуется модернизировать дерево исходников, просто внутри образовавшегося каталога введите:
$ cvs -z3q update -dP
Работа с деревом
В начале этого раздела Дэниел рассказывает о подготовке дерева исходников ядра. Эта часть опущена, как полностью утратившая актуальность - А.Ф.
Теперь о конфигурировании ядра. Для поддержки 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, что позволит в дальнейшем конфигурировать области памяти, обеспечивающие
определенную производительность для приложений реального времени. Опция "XFS
Quota
" позволит, как нетрудно догадаться, поддержку лимитов на размер
доступного дискового пространства для пользователей и групп. Опция "XFS
DMAPI
", если помечена, разрешит специальный API, предназначенный для
управления приложениями. В настоящее время под Linux еще нет инструментов, которые
пользуются преимуществами DMAPI (имеются у Sistina's LVM и "родные" утилиты SGI XFS). Однако некоторые DMAPI-приложения для Linux уже находятся в
разработке у SGI и IBM.
После выбора "SGI XFS filesystem support
" и конфигурирования
остальной части ядра по вашему вкусу, вы готовы ввести make dep &&
make && make bzImage && make modules && make
modules_install
, инсталлировать новое ядро и перезагрузиться. .
Инсталляция инструментария
Теперь, когда вы работаете на ядре, поддерживающем XFS, можно создать и
инсталлировать различные XFS tools. Одна из хороших новостей относительно XFS -
она поставляется с полным набором инструментов поддержки и утилит. Войдите в
каталог linux-2.4-xfs/cmd
и запустите (с правами root) следующий сценарий оболочки:
# for x in attr acl xfsprogs dmapi xfsdump
do
cd $x
autoconf
/configure --prefix=/usr
make
make install
cd ..
done
Не забудьте о переводе строки после done
. Наш специальный скрипт начнет работу, и все инструменты XFS будут инсталлированы. После финиша добавим
несколько developer-related файлов, которые не инсталлированы предыдущей
командой make install
l:
# for x in attr dmapi xfsprogs
do
cd $x
make install-dev
cd ..
done
H4>Создание и монтирование файловой системы.
После отработки скриптов все нужные для XFS программы будут инсталлированы и
готовы к использованию. Можно создать тестовую XFS и попытаться достигнуть
оптимальной производительности.
Если XFS создается поверх ReiserFS, потребуется небольшая уловка. По приглашению bash введите следующую команду для "обнуления" начального участка блочного устройства, на котором хранилась ReiserFS, а теперь вы собираетесь инициализировать
новую файловую систему XFS:
# dd if=/dev/zero of=/dev/hdc9
Такой шаг необходим для eybxnj;tybzt хранящихся ReiserFS метаданных. Иначе,
команда mount
может "запутаться" и случайно смонтировать новую файловую систему XFS как дефектную ReiserFS! Достаточно позволить dd
отработать 10 секунд и прервать комбинацией CTRL-C. При этом все "критические"
части ранее существовавшей ReiserFS будут заполнены нулями, а код
авто-детектирования типа файловой системы "путаться" больше не будет.
Пришло время создать новую файловую систему. Для этого можно воспользоваться
командой 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машин и серверов. Если вы
повторно перечитаете мою предыдущую
статью>, allocation groups позволяют XFS выполнять операции над метаданными
параллельно. Это очень удобно для high-end серверов, но слишком много allocation
groups добавляют работы. Вместо того чтобы разрешить mkfs.xfs
автоматически выбрать число allocation groups для вашей файловой системы,
сделайте это "вручную", используя -d agcount=x
. Выберите
x
минимальным, например, 4, 6 или 8. Расчет достаточно прост,
необходимо иметь, по крайней мере, одну allocation group на каждые 4 GB в целевом блочном устройстве. Две описанные опции позволят создать "оптимизированную" XFS
filesystem следующей командой:
# mkfs.xfs -d agcount=4 -l size=32m /dev/hdc9
Теперь, после создания файловой системы, ее можно монтировать. При этом можно
воспользоваться некоторыми опциями монтирования, повышающими производительность, чтобы
"выжать" максимум из новой файловой системы:
# mount /dev/hdc9 /mnt -o noatime,nodiratime,osyncisdsync
Первые две опции монтирования выключают модификацию atime
, что
практически никогда и не требуется, но способствует деградации
производительности. Опция osyncisdsync
добивается такого sync/async
поведения XFS, чтобы максимально соответствовать таковому в ext3. Благодаря
таким mkfs.xfs
и mount
ваша новая XFS будет иметь
скорость немного выше, чем при умолчании.
Положительные герои.
Одна из хороших вещей в XFS - она имеет много специальных функциональных возможностей. Одной из них являются "access control lists" или ACL.
Сейчас это поддерживается в XFS по умолчанию. Списки контроля доступа позволяют
определять более дробные разрешения на файлы. Например, вместо ограниченного
"rwx" для владельца, группы и других, становится возможным добавлять любое число
дополнительных пользователей или групп и определять "rwx" permissions и для них.
Полное описание access control lists - вне контекста этой статьи. Если вам
это интересно, посмотрите большое введение в ACL на bestbits site,
особенно, если посетить страничку "Why you may want Access Control Lists
(ACLs)". Обратите внимание, большая часть технической информации этого сайта
связана с поддержкой ACL под ext2 и ext3 (но ничего дополнительного не требуется
для ACL под XFS).
XFS имеет еще одну особенность, называемую расширенными атрибутами (extended attributes). Такие extended attributes позволяют вам ассоциировать определенные пользователем данные с объектами файловой
системы. Например, если вы имеете графический файл по имени
mygraphic.png
, можно прикрепить к нему атрибут, называемый
"thumbnail
", содержащий маленькую версию изображения. Эти данные не будут
видимы обычными файловыми операциями ввода/вывода, но к ним можно обращаться из
программ, использующих API специальных расширенных атрибутов. По своей сути, расширенные атрибуты похожи на ветви ресурсов (resource fork), существующие на MacOS системах.
Имеется пример использования расширенных атрибутов через команду
attr
из командной строки. Скажем, я желаю добавить атрибут
description
к моему домашнему каталогу. Я ввожу:
$ 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
, я ввожу:
$ attr -q -g description /home/drobbins/
Home of Daniel Robbins
Расширенные атрибуты просты и забавны в использовании. Вы можете узнать о них
больше, прочитав man attr
. XFS включает также API C для
взаимодействия с extended attributes. Если вы интересуетесь работой с C++
IOStream интерфейсом к расширенным атрибутам, можете посмотреть libferris на
SourceForge.
Конечно, расширенные атрибутыs и ACL открывают интересные возможности, но
будьте осторожны. Большинство программ резервного копирования в настоящее время еще "не
понимают" ни EA, ни ACL. Известные мне исключения - xfsdump
и
xfsrestore
, поставляемые с XFS distribution. Если используете
другую backup программу, проведите сначала интенсивное тестирование на поддержку
EA и ACL.
Я надеюсь, вам понравилось это "мгновенное" введение в файловую систему XFS. Ждите
новых статей!