Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Первое знакомство с Btrfs

Оригинал: Weekend Project: Get Started with Btrfs
Автор: Nathan Willis
Дата публикации: октябрь 2010 г.
Перевод: В. Семененко
Дата перевода: май 2011 г.

B-древовидная файловая система Btrfs является следующим поколением файловых систем для Linux. Несмотря на то, что она еще находится в процессе активной разработки, ею уже можно пользоваться для повседневных задач. Даже если вы и не собираетесь переводить свои производственные сервера на Btrfs, вам следует потратить некоторое время на ее изучение, чтобы узнать, что она может. Эта файловая система имеет значительные улучшения, по сравнению с ext3/ext4, например - гораздо более простой способ управления разделами дисков.

Для тех, кто впервые узнает о Btrfs - это коренная переработка использующейся в последние годы файловой системы Linux ext. Btrfs использует b-tree (b-дерево) для хранения общих типов элементов данных (items) в единой унифицированной структуре. Эти типы данных сортируются по их 136-битному ключу. Сходные типы данных группируются вместе с помощью общего префикса ключа (и таким образом файловая система оптимизируется для операций чтения и записи). Небольшие файлы могут храниться непосредственно в "листьях" дерева, в то время, как большие файлы записываются в extents - что снижает накладные расходы и уменьшает фрагментацию.

Для "узлов" дерева вычисляются контрольные суммы и включают в себя счетчики как ссылок, так и обратных ссылок. Это позволяет контролировать корректность файловой системы, а также перемещать и изменять размер последней с большей простотой. И последнее - файловая система Btrfs использует механизм copy-on-write, когда на диск записываются измененные данные в первую очередь, а затем обновляются ссылки в дереве. Btrfs является является отказоустойчивой, но при этом нежурналируемой системой.

Еще больше преимуществ имеется на уровне инструментов файловой системы. Btrfs имеет встроенную поддержку RAID-массивов, в том числе - multi-устройств и механизм защиты от повреждений. Поддерживает изменение размера файловой системы в режиме on-line, добавление и удаление дисков.

Файловая система Btrfs поддерживает прозрачное сжатие данных, создание снимков файловой системы и создание подтомов - это особенно полезно, когда необходимо иметь разделы на разных дисках.

Начало

Большинство основных дистрибутивов Linux в своих свежих релизах имеет встроенную поддержку файловой системы Btrfs, по крайней мере, на экспериментальном уровне. Так как разработка Btrfs ведется очень активно, рекомендуется иметь ядро Linux не ниже версии 2.6.33. Возможно, вам потребуется установить отдельным пакетом (btrfs-progs) утилиты для работы с этой файловой системой. (Примечание переводчика: например, для Archlinux - в репозиториях AUR; для Ubuntu этот пакет носит другое название - btrfs-tools и легко находится командой aptitude search btrfs-tools).

Btrfs создается командой mkfs.btrfs. Основная программа для работы с файловой системой - утилита btrfs. Она умеет создавать и управлять снимками, подтомами и контролировать целостность всей системы. Может случиться, что вы найдете ссылку на более старую версию этой утилиты под названием btrfsctl. Если вы решили воспользоваться ею, необходимо перед этим прочитать документацию по Btrfs, так как опции и синтаксис могли поменяться. (Примечание переводчика: btrfsctl входит в состав пакета btrfs-tools из репозитория Ubuntu).

Имеются также утилита btrfsck (проверяет неподмонтированную файловую систему Btrfs на ошибки) и небольшой набор других утилит, используемых для поиска неисправностей и отладки. Например, btrfs-image может выполнять дамп образа файловой системы; вы можете отправить его Btrfs-разработчикам, если ищете помощи при отладке возникших неисправностей.

Btrfs имеет свои собственные опции монтирования, но вам нет необходимости устанавливать другую версию программы mount для того, чтобы выполнять монтирование разделов с btrfs.

Основные операции: создание и изменение файловых систем, массивов

Создание файловой системы Btrfs на устройстве выполняется с помощью утилиты mkfs.btrfs командой mkfs.btrfs device_name

Например:

# mkfs.btrfs /dev/sda2

Это создаст файловую систему на всем разделе sda2.

Если хотите создать файловую систему определенного размера, нужно применить опцию -b (размер в байтах):

# mkfs.btrfs -b 120134 /dev/sda2

Тоже самое можно сделать заданием размера сектора - опция -s:

# mkfs.btrfs -s 2345 /dev/sda2

Более интересная ситуация - это создание RAID-массивов. Синтаксис команды:

# mkfs.btrfs device_one device_two device_three

То есть, для создания RAID-массива на трех дисках, вам достаточно указать их утилите mkfs.btrfs одной строкой. Все остальное она сделает сама. По умолчанию, каждый диск будет поделен поровну на тип stripe для данных (RAID0) и на тип mirror (RAID1).

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

-m profile - аргумент утилиты mkfs.btrfs для метаданных;
-d profile - профиль для данных.

На данный момент можно создать массивы типов RAID0, RAID1, RAID10 и single.

Монтировать созданную файловую систему Btrfs можно с опцией -t filesystem:

# mount -t btrfs /dev/sda2 /media/sda2

Для монтирования RAID-массивов вам достаточно указать только одно из устройств, входящих в состав всего массива; утилита btrfs сама найдет остальные устройства и автоматически смонтирует их вместе.
Например, если вы создали двух-дисковый массив командой:

# mkfs.btrfs /dev/sda /dev/sdb

то подмонтировать его вы можете командой:

# mount -t btrfs /dev/sda /mnt/bigarray

Особый интерес представляет ситуация, когда необходимо добавить дополнительное устройство к уже существующему массиву. В этом случае вы можете не изменять соответствующую этому массиву строку в файле /etc/fstab. Для добавление третьего устройства выполните команду:

# btrfs device add /dev/sdc /mnt/bigarray

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

# btrfs filesystem balance /mnt/bigarray

Эта операция может занять продолжительное время, если массив большой. Даже если один из дисков вашего RAID-массива выйдет из строя, вы можете монтировать этот диск с помощью опции degraded.

Например:

# mount -t btrfs -o deraded /dev/sdb /mnt/bigarray

В этом случае сообщения об ошибках (то есть - о повреждении диска) выводиться не будут. Можно удалить диск из RAID-массива командой:

# btrfs device delete /dev/sdb /mnt/bigarray

Все данные будут перемещены на оставшиеся диски (если объема их будет достаточно; если нет, то вам сперва придется добавить другой дополнительный диск). Синтаксис команды для изменения размера файловой системы Btrfs:

# btrfs filesystem resize filesystem_name size

Аргумент size может принимать три значения:

- заданный размер (например, 1024M или 7G);
- инкремент или декремент (например, +200M или -2G);
- максимальный размер (max) - в этом случае файловая система будет создана на всем доступном пространстве диска или раздела.

Имена всех основных команд по управлению файловой системой говорят сами за себя - Btrfs по умолчанию предоставляет простой и удобный выбор команд, а также наводящие вопросы, для того, чтобы избежать возможных ошибок при введении дополнительных параметров. Вот почему чистые ванильные файловые системы (даже RAID-массивы) в большинстве Linux-систем проходят короткий путь от тестирования до применения. Для того, чтобы по настоящему увидеть, что нового появилось в этой файловой системе, давайте поближе рассмотрим подтома Btrfs.

Подтома, снимки и преобразования

Подтома в Btrfs являются частью (sub-tree) основного дерева (tree) файловой системы. Они создаются внутри существующей файловой системы, но ведут себя подобно самостоятельным файловым системам, со своими собственными точками монтирования, опциями и правами. В отличие от создания диска, разделенного на несколько разделов (партиций), подтома не требуют для себя дополнительного дискового пространства; они представляют из себя просто пустую директорию. Но как только вы начнете сохранять в них данные, размер подтомов начнет расти прямо пропорционально объему добавляемых в них файлов. Преимущество такого подхода не только в экономии места на диске; это означает, что вы можете создать столько подтомов в одной файловой системе, сколько вам необходимо. И присоединять дополнительные съемные устройства к подтомам, когда устройства будут заполнены, вне зависимости от того, какой том имеет наибольший объем.

По большому счету, вы можете рассматривать подтома как директории, которые могут монтироваться так, как если бы это было устройство или образ виртуального диска в виртуальной машине (VM).

Давайте создадим подтом для примера:

# btrfs subvolume create /path/to/volume/volume_name

Если вы не укажете явным образом путь в файловой системе для подтома, то он будет создан в текущей директории. Вы можете примонтировать подтом куда угодно, указав опцию subvolume команде монтирования mount. Например, если вы создали подтом по имени mysubvolume по пути /mnt/bigarray, вы можете примонтировать его командой:

# mount -t btrfs -o subvol=mysbvolume /dev/sda /mnt/notsobig

Если вы не помните точно, где вы создали ваши подтома, команда:

# btrfs subvolume list /mnt/bigarray

покажет список всех имеющихся в системе. Для того, чтобы удалить один из них, синтаксис команды:

# btrfs subvolume delete subvolume_name

Вы можете создать столько подтомов, сколько вам необходимо, и все в одной файловой системе. Но создание отдельных точек монтирования - это не все, на что способны подтома.

Btrfs поддерживает специальный тип подтомов, необходимый для сопровождения файловой системы - снимки. Синтаксис, в сущности, тот же самый; нужно только заменить опцию create опцией snapshot.

Например:

# btrfs subvolume snapshot /mnt/bigarray /mnt/backups/October15

Эта команда создаст подтом в директории /mnt/backups/October15, который будет являться снимком директории /mnt/bigarray. Этот снимок вы можете переместить на съемное устройство или записать на диск (в зависимости от того, что вам требуется для обеспечения сохранности данных). Примечательной стороной файловой системы Btrfs является то, что при создании снимков она дублирует не данные, а делает копию b-дерева этих данных. Если вы не изменяли какие-либо файлы в директории /mnt/bigarray, имеющийся снимок не занимает дополнительного дискового пространства.

Это и есть метод copy-on-write. В основном, большинство файлов не изменяются, поэтому снимки не занимают много места.

Существует еще одна интересная особенность, основанная на свойстве copy-on-write - конвертирование файловой системы ext3/ext4 в Btrfs. Утилита btrfs-convert создает файловую систему Btrfs, переписывая существующую ext3/ext4 путем чтения ее и создания b-деревьев на свободном дисковом пространстве. Подобно созданию снимков, эта вторая файловая система не занимает дополнительного места, если файлы не изменяются. Когда же файлы изменены, оригинальная версия файловой системы ext сохраняется, так что вы можете "откатить" назад весь процесс конвертирования и восстановить файловую систему в ее прежнем, до Btrfs, состоянии.

Для начала вам необходимо запустить утилиту fsck для проверки файловой системы на возможные ошибки. После этого можно запускать конвертацию.

Синтаксис команды:

# btrfs-convert device

Затем подмонтируем вновь созданную Btrfs-систему:

# mount -t btrfs device the_btrfs_mountpoint

Оригинальная ext-система сохраняется в виде снимка с именем ext2_saved (даже если она имела формат ext3 или ext4). Вы также можете примонтировать снимок с помощью команды:

# mount -t btrfs -o subvol=ext2_saved device /mnt/ext2_saved

Вернуть снимок файловой системы ext в первоначальное состояние (до изменений) вы можете так:

# btrfs-convert -r device

Экстра возможности: опции монтирования

Опции compress и compress-force позволяют выполнять прозрачное сжатие данных в файловой системе; опция force позволяет выполнять компрессию файлов, которые обычно имеют низкий коэффициент сжатия (таких, как сжатые аудио или видео форматы). Опция ssd полезна для тех пользователей, которые имеют в своем распоряжении твердотельные накопители (SSD); она включает несколько способов оптимизации, которые повышают производительность этих already-speed устройств.

Заключение

Файловая система Btrfs еще находится в состоянии активной разработки. Поддержка дополнительных конфигураций RAID-массивов, повторное дублирование и провека на ошибки в режиме on-line пока только в плане. Однако, принимая во внимание, насколько упрощены способы работы с разделами, массивами и логическими томами в этой файловой системе, насколько снимки могут изменить ваш подход к стратегии создания backup'ов - вы можете не ждать, а использовать эти преимущества уже сейчас.