Гайд по расширенным возможностям Btrfs

Btrfs (B-tree FS, «Better FS» или «Butter FS») — файловая система (ФС) для Linux, основанная на структурах Б-деревьев и работающая по принципу «копирование при записи» (copy-on-write). Опубликована компанией Oracle Corporation в 2007 году под лицензией GNU General Public License (GPL). Разработка данной ФС организована с целью обеспечить достойную конкуренцию популярной ZFS. Btrfs будет избавлена от многих недостатков, присущих другим современным файловым системам для Linux.

Btrfs считается стабильной, однако до сих пор не создано инструмента для проверки файловой системы и исправления ошибок. Версия Btrfs v0.19 выпущена в июне 2009 года. Изначально планировалось выпустить Btrfs v1.0 в конце 2008 года, однако формат был зафиксирован только 12 июня 2010 года.

Итак, от слов к делу...

Создание отказоустойчивых конфигураций

Шаг 1: Создание тестового раздела Btrfs на диске /dev/sdb:
# mkfs.btrfs /dev/sdb
 adding device /dev/sdb id 2
 fs created label (null) on /dev/sdb
 nodesize 4096 leafsize 4096 sectorsize 4096 size 10.00GB
 Btrfs Btrfs v0.19

Шаг 2: Монтирование созданного раздела:
# mount /dev/sdb /mnt

Шаг 3: Создание подраздела, копирование тестовых файлов:
# cd /mnt
# btrfs subvolume create MYFILES
# cp myfile* /mnt/MYFILES
# ls /mnt/MYFILES
 myfile1
 myfile2
 myfile3

Шаг 4: Удаление одного из файлов:
# rm /mnt/MYFILES/myfile2
# ls /mnt/MYFILES
 myfile1
 myfile3

В случае, когда количество файлов большое, их рациональнее убирать командой удаления подраздела (вместо ресурсоемкой "rm -rf").
# btrfs subvolume delete MYFILES

Важно! Помните, что удалить можно только отдельно созданные подразделы. Удалению не подлежит подраздел, создаваемый по умолчанию при форматировании ФС.

Настройка отказоустойчивой конфигурации с зеркалированием на несколько дисков.

Btrfs обладает удобным набором средств по зеркалированию данных, а также
расширению доступного пространства раздела. Вы можете увеличить размер ФС и осуществить отказоустойчивость с помощью подключения дополнительных дисков. Сделать это возможно в любое удобное для Вас время.

Зеркалирование метаданных на двух дисках происходит по умолчанию.
Если диск один, то копии метаданных размещаются на нем. В случае, когда раздел размещен на нескольких дисках, зеркалирование метаданных происходит на двух дисках (по умолчанию). При этом сами данные распределяются по дискам без резервирования.

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

#  btrfs device add /dev/sdc /mnt/btrfs
#  btrfs filesystem show
Label: none uuid: b4f5c9a8-d8ec-4a5b-84f0-2b8c8d18b257
           Total devices 2 FS bytes used 200.33MB
           devid 1 size 5.00GB used 5.00GB path /dev/sdb
           devid 2 size 5.00GB used 4.98GB path /dev/sdc


Использование RAID

Btrfs имеет встроенную поддержку нескольких уровней RAID (RAID1, RAID5).
Для создания логических RAID-разделов Btrfs использует распределение chunk-ов. Они определяют дисковую область заданного размера (от 256 Мб). С каждым chunk-ом можно провести процедуру зеркалирования на несколько дисков или соединения из частей разных дисков.
В процессе создания RAID для метаданных и служебных структур всегда применяется зеркалирование, а для данных возможно применение различных методов хранения.

RAID можно создать на этапе создания ФС.

Шаг 1: Создание RAID1 (зеркало) из двух дисков:
# mkfs.btrfs -m raid1 -d raid1 /dev/sdb /dev/sdc
 mkfs.btrfs -m raid1 -d raid1 /dev/sdb /dev/sdc
 adding device /dev/sdc id 2
 fs created label (null) on /dev/sdb
              nodesize 4096 leafsize 4096 sectorsize 4096 size 10.00GB
 Btrfs Btrfs v0.19

Шаг 2: Создание RAID10 (подключение ещё двух дисков - зеркало на двух склеенных дисках):
# mkfs.btrfs -m raid10 -d raid10 /dev/sdd /dev/sde
 adding device /dev/sde id 2
 fs created label (null) on /dev/sdd
	nodesize 4096 leafsize 4096 sectorsize 4096 size 10.00GB
 Btrfs Btrfs v0.19


Важно! Опция "-m" задаёт уровень RAID для метаданных, а "-d" для данных. Например, можно использовать смешанные схемы:
# mkfs.btrfs -m raid1 -d raid10 /dev/sdf /dev/sdg /dev/sdh /dev/sdi


Обеспечение целостности данных

Встроенные механизмы обеспечения целостности, поддерживаемые Btrfs:

1)Хранение контрольных сумм для проверки блоков данных и метаданных;
2)Изоляция сбоев (отдельное сохранение данных и метаданных с CRC-верификацией);
3)Средства выявления повреждений и их автоматической корректировки (проверка по контрольным суммам осуществляется при каждом чтении блока, если выявлено расхождение осуществляется попытка прочитать повреждённый блок с другого диска, после чего осуществляется корректировка повреждённого блока);
4)Поддержка операции фоновой перепроверки всего содержимого ФС (вычисляются и сверяются контрольные суммы для всех блоков). Для запуска проверки следует выполнить:
# btrfs scrub start /mnt/MYFILES

5)Перестроение RAID при замене или добавлении новых дисков. Отличительной чертой Btrfs является то, что в перестроении участвуют только занятые блоки, что существенно сокращает время выполнения операции.

Важно! На сегодняшний момент в Btrfs нет встроенной возможности хранения информации в зашифрованном виде. Однако путем создания ФС поверх шифрованных разделов, созданных при помощи подсистем dm_crypt и LUKS, можно вполне обеспечить шифрование данных.

Использование сжатия данных

Механизмы сжатия, встроенные в Btrfs, можно использовать для оптимизации дискового пространства. Сжатие поддерживается методами Lempel-Ziv-Oberhumer (LZO) или zlib (в разработке поддержка Snappy и LZ4). Процесс сжатия можно включить после создания ФС, на этапе монтирования, тогда будут сжиматься только новые данные.

Шаг 1: Монтаж раздела с включением сжатия:
# mount -o compress=lzo /dev/sdb /mnt/MYFILES

Важно! Сжатие можно включить и для отдельного подраздела:
# btrfs subvolume create /mnt/MYFILES/mysubvol
# mount -o compress=lzo,subvol=mysubvol /dev/sdb /mnt/MYSUBVOL


Снапшоты и клонирование

Снапшот поможет сделать активный срез состояния ФС в заданный момент времени. Сохранённый снапшот можно восстановить на другом компьютере, используя средства миграции данных, Плюс снапшота в том, что он не приводит к увеличенному расходу дискового простаранства (кроме задействования дополнительных метаданных - физически хранится одна копия данных).

Шаг 1: Создание снапшотов для ранее созданных данных:
# ls /mnt/MYFILES
 myfile1
 myfile2
# btrfs subvolume snapshot /mnt/MYFILES /mnt/SNAPSHOT
# ls /mnt/SNAPSHOT
 myfile1
 myfile2

Важно! Для отдельных файлов можно создавать клоны. Они используют один набор блоков на диске:
# cp --reflink /mnt/MYFILES/myfile1 /mnt/MYFILES/myfile3
# ls /mnt/MYFILES
 myfile1
 myfile2
 myfile3


Средства дефрагментации

Btrfs поддерживает режим ручной и автоматической фоновой дефрагментации, активируемый при помощи опции монтирования "-o autodefrag".
Ручная дефрагментация запускается при помощи команды:
# btrfs filesystem defrag /mnt






Вас также может заинтересовать:

Небольшой гайд - как проинсталлировать Diablo 3 под Linux
Файловой системой по умолчанию в Fedora 16 станет btrfs
Для Fedora 17 одобрен перенос компонентов из корня в /usr и переход на Btrfs
Поддержка RAID5/6 для Btrfs принята в состав ядра Linux 3.9