В заметке представлены примеры использования таких расширенных функций Btrfs как создания отказоустойчивых конфигураций, опции для обеспечения целостности данных, хранение данных в сжатом виде, снапшоты.Создадим тестовый раздел 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
Примонтируем созданный раздел:
# mount /dev/sdb /mnt
Создадим подраздел и скопируем на него тестовые файлы:
# cd /mnt
# btrfs subvolume create MYFILES
# cp myfile* /mnt/MYFILES
# ls /mnt/MYFILES
myfile1
myfile2
myfile3
Удалим один из файлов:
# 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 оперирует не формированием RAID на уровне дисков, а использует для создания логических RAID разделов распределение chunk-ов, определяющих дисковую область заданного размера (от 256 Мб). Каждый chunk может быть отзеркалирован на несколько дисков или склеен из частей разных дисков. При создании RAID для данных и метаданных могут применяться разные методы хранения, например, для метаданных и служебных структур всегда применяется зеркалирование.
Создать RAID заданного уровня для данных и метаданных можно на этапе создания ФС. Например, создадим 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
После чего подключим ещё два диска и создадим 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 поддерживает несколько встроенных механизмов обеспечения целостности:
* Хранение контрольных сумм для проверки блоков данных и метаданных;
* Изоляция сбоев (отдельное сохранение данных и метаданных с CRC-верификацией);
* Средства выявления повреждений и их автоматической корректировки (проверка по контрольным суммам осуществляется при каждом чтении блока, если выявлено расхождение осуществляется попытка прочитать повреждённый блок с другого диска, после чего осуществляется корректировка повреждённого блока);
* Поддержка операции фоновой перепроверки всего содержимого ФС (вычисляются и сверяются контрольные суммы для всех блоков). Для запуска проверки следует выполнить:
# btrfs scrub start /mnt/MYFILES
* Перестроение RAID при замене или добавлении новых дисков. Отличительной чертой Btrfs является то, что в перестроении участвуют только занятые блоки, что существенно сокращает время выполнения операции.
* В настоящее время в Btrfs нет встроенной возможности хранения информации в зашифрованном виде, но обеспечить шифрование можно путем создания ФС поверх шифрованных разделов, созданным при помощи подсистем dm_crypt и LUKS.
++ Использование сжатия данных.
Для оптимизации расходования дискового пространства при хранении хорошо сжимаемых данных можно использовать встроенные в Btrfs механизмы сжатия. Поддерживается сжатие методами Lempel-Ziv-Oberhumer (LZO) или zlib (в разработке поддержка Snappy и LZ4). Включить сжатие можно после создания ФС, на этапе монтирования, при этом сжиматься будут только новые данные.
Монтируем раздел с включением сжатия:
# mount -o compress=lzo /dev/sdb /mnt/MYFILES
Сжатие можно включить и для отдельного подраздела:
# btrfs subvolume create /mnt/MYFILES/mysubvol
# mount -o compress=lzo,subvol=mysubvol /dev/sdb /mnt/MYSUBVOL
++ Снапшоты и клонирование.
В рамках снапшота может быть сделан активный срез состояния ФС в заданный момент времени. В дальнейшем, используя средства миграции данный, сохранённый снапшот можно восстановить на другой машине. Кроме задействования дополнительных метаданных снапшон не приводит к дополнительному расходованию дискового пространства - физически хранится одна копия данных.
Создадим снапшот для ранее созданных данных:
# 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
URL: http://www.oracle.com/technetwork/articles/servers-storage-a...
Обсуждается: http://www.opennet.me/tips/info/2710.shtml