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

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

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

Второй путь — скачать исходники ядра linux-2.6.29-rc1, должным образом сконфигурировать его, собрать, установить и обеспечить загрузку. Для начала, разумеется, в параллели с ядром старым — во избежание, как говаривали «азиатские мудрые люди».

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

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

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

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

В результате этих действий в конфиге ядра (файле /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

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

CONFIG_CRYPTO_CRC32C=y

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

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

modprobe libcrc32c
insmod btrfs.ko

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

Зато в 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 | grep
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/

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

Btrfs: подготовительные мероприятия: 1 комментарий

Обсуждение закрыто.