Знакомство с btrfs

Алексей Федорчук

2009-01-26

назад | к началу | вперед

Подготовительные мероприятия

Чтобы использовать btrfs, нужно для начала обеспечить её поддержку — на сегодняшний день ни один дистрибутив "искаропки" этого не предоставляет. Но, как можно догадаться из предшествовавшего изложения, этого можно достигнуть двумя путями. Первый — скачать и установить последний патч к ядру (на момент сочинения — версия за номером 0.18). Он, безусловно, прост, описан в документации, по сообщениям как на официальном сайте, так и в сети, работает с ядром версии 2.6.28. Однако с более ранними версиями наверняка будут проблемы: сам я не экспериментировал, но, по свидетельству Михаила, уже с ядром 2.6.27 он не работает.

Второй путь — скачать исходники ядра linux-2.6.29-rc_сколько_есть (на данный момент — rc2), должным образом сконфигурировать его, собрать, установить и обеспечить загрузку. Для начала, разумеется, в параллели с ядром старым — во избежание, как говаривали "азиатские мудрые люди".

Кроме того, необходимо обеспечить возможность манипулировать c файловой системой btrfs. для чего потребуется скачать, собрать и установить комплект соответствующих утилит — актуальные на настоящий момент версии его существуют только в виде исходников.

В дистрибутиве, который я намечал для экспериментов (Zenwalk 5.4-beta1), штатно присутствует ядро linux-2.6.27.10, для работы с btrfs непригодное. Тем более что собрано оно без поддержки PAE, то есть может использовать только 3 Гбайт с копейками суммарной памяти. А у меня было глубокое подозрение, что если btrfs хоть чем-то похожа на ZFS, то и память она любит не меньше. Да и банальная жадность не позволяла отдавать за просто так 700 Мбайт оной. Иными словами, пересборка ядра так и так стояла на очереди — и почему бы не двинуться в этом направлении вперёд, а не топтаться на месте?

Короче говоря, я скачал с зеркала на perespim.ru (несмотря на название — или благодаря оному? — оно работает весьма справно), распаковал архив, сконфигурировал в соответствии со своими же рекомендациями по части включения PAE и освобождения от архитектурных излишеств (см. здесь). После чего озаботился уже непосредственно обеспечением поддержки btrfs.

Собственно говоря, тут все действия сводятся к тому, чтобы отправиться в пункт File Systems главного меню (Рис. 1), отыскать там пункт Btrfs filesystem и включить его — встроив в ядро (как показано на Рис. 2) или модулем. В документации по btrfs указан только второй вариант; однако я эксперименту ради решил опробовать жесткое включение — вроде, вреда ни малейшего.


Рис. 1


Рис. 2

В результате этих действий в конфиге ядра (файле /usr/src/linux-2.6.29-rc1/.config) появится строка

CONFIG_BTRFS_FS=y

или

CONFIG_BTRFS_FS=m

соответственно. Во втором случае следует выполнить ещё одно действие: перейти в пункт Library routines главного меню (Рис. 3) и включить в нём подпункт CRC32c (Рис. 4), также в виде модуля, что создаст в конфиге ядра пункт

CONFIG_CRYPTO_CRC32C=m


Рис. 3

Если поддержка btrfs встроена в ядро жестко, то и жесткое встраивание CRC32c произойдёт автоматически:

CONFIG_CRYPTO_CRC32C=y

Что, собственно, и показано на Рис. 4.


Рис. 4

Теперь собираю ядро и модули, устанавливаю то и другое, как было описано ранее, обеспечиваю загрузку нового ядра. В Zemwalk'е по умолчанию принят загрузчик Lilo. Так что в файл /etc/lilo.conf дописываю строки:

image = /boot/vmlinuz-2.6.29-rc1
  root = /dev/sda1
  label = Zen-2.6.29
  read-only

переустанавливаю загрузчик:

# /sbin/lilo

и перезагружаюсь, выбирая в меню загрузчика новый пункт.

Да, если поддержка btrfs задействована через модуль, следует загрузить его вместе с модулем CRC32c:

# modprobe libcrc32c
# insmod btrfs.ko

Всё — подготовительные мероприятия выполнены, остаётся посмотреть в первом приближении, что же получилось.

Чтобы сварить суп из курицы, надо как минимум иметь курицу. То есть и для опробования btrfs, кроме её поддержки ядром, необходимо иметь соответствующий инструментарий — средства создания соответствующей файловой системы и манипуляции ею. Получить его в виде пакета исходников (btrfs-progs) можно из git-хранилища с kernel.org, из каталога, принадлежащего Мейсону.

Поскольку я и то, и другое встроил в ядро жестко, то необходимости в этой операции не возникло.

Зато в Zemwslk'е мне для начала потребовалось установить пакет git (в инсталляционном наборе он отсутствует) из любого официального репозитория:

# netpkg git

Хотя можно воспользоваться и графической утилитой Netpkg. Далее — так (можно от лица обычного пользователя):

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs-unstable.git

После этого перехожу в новообразовавшися каталог:

$ cd path2/btrfs-progs-unstable

собираю пакет (без предварительного конфигурирования):

$ make

и, получив права суперпользователя, устанавливаю:

# make install

Инсталляция происходит в каталог /usr/local, в результате чего в нём можно будет увидеть следующие утилиты:

$ ls -1 /usr/local/bin
btrfs-debug-tree*
btrfs-image*
btrfs-show*
btrfs-vol*
btrfsck*
btrfsctl*
btrfstune*
mkfs.btrfs*

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

Однако со всеми этими утилитами я намерен разбираться позднее — пока мне достаточно создать файловую систему и проверить её в работе. Для этого при инсталляции был заботливо припасён пустой первичный раздел без файловой системы. Насколько я понимаю, никто не запрещает создавать btrfs и на логическом разделе, однако это теряет смысл: ведь она берёт на себя функции не только собственно файловой системы, но и менеджера томов, что делает ненужным использование extended partition вообще.

Итак, создаю файловую систему btrfs:

# mkfs.btrfs /dev/sda4

Этой команде можно задать несколько важных опций, но пока все они не существенны, ими мы займёмся позднее.

Монтирую её в заранее заготовленный подкаталог домашнего каталога пользователя:

# mount -t btrfs /dev/sda4 /home/alv/btrfs/

Возвращаюсь в режим обычного пользователя и копирую на btrfs произвольный файл:

$ cp /mnt/sdb3/diff/нечто.avi /home/alv/btrfs/

Ура! Всё работает. Можно разбираться дальше.

назад | к началу | вперед