Библиотека сайта 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'ов - вы можете не ждать, а использовать эти преимущества уже сейчас.