Новости из Блогов Использование расширенных возможностей Btrfs

Discussion in 'Мировые новости. Обсуждения.' started by d3l3t3, 23 Aug 2012.

  1. d3l3t3

    d3l3t3 Banned

    Joined:
    3 Dec 2010
    Messages:
    1,771
    Likes Received:
    98
    Reputations:
    10
    как создания отказоустойчивых конфигураций, опции для обеспечения целостности
    данных, хранение данных в сжатом виде, снапшоты.

    Создадим тестовый раздел Btrfs на диске /dev/sdb:

    Code:
       # 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

    Примонтируем созданный раздел:

    Code:
       # mount /dev/sdb /mnt
    Создадим подраздел и скопируем на него тестовые файлы:

    Code:
       # cd /mnt
       # btrfs subvolume create MYFILES
    
       # cp myfile* /mnt/MYFILES
    
       # ls /mnt/MYFILES
       myfile1
       myfile2
       myfile3
    Удалим один из файлов:

    Code:
       # rm /mnt/MYFILES/myfile2
    
       # ls /mnt/MYFILES
       myfile1
       myfile3
    Если файлов очень много, то удалять их командой "rm -rf" достаточно долгий и
    ресурсоёмкий процесс. В этом случае проще воспользоваться командой удаления подраздела:


    Code:
       # btrfs subvolume delete MYFILES
    При этом важно понимать, что удалить можно только отдельно созданные
    подразделы. Подраздел, создаваемый по умолчанию при форматировании ФС, удалению
    не подлежит.


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

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

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


    Code:
       # 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 (зеркало) из двух дисков:

    Code:
       # 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 (зеркало на двух склеенных дисках):

    Code:
       # 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" для данных. Например,
    можно использовать смешанные схемы:


    Code:
       # mkfs.btrfs -m raid1 -d raid10 /dev/sdf /dev/sdg /dev/sdh /dev/sdi
    Обеспечение целостности данных.

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

    * Хранение контрольных сумм для проверки блоков данных и метаданных;

    * Изоляция сбоев (отдельное сохранение данных и метаданных с CRC-верификацией);

    * Средства выявления повреждений и их автоматической корректировки (проверка по
    контрольным суммам осуществляется при каждом чтении блока, если выявлено
    расхождение осуществляется попытка прочитать повреждённый блок с другого диска,
    после чего осуществляется корректировка повреждённого блока);

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

    Code:
       # btrfs scrub start /mnt/MYFILES
    * Перестроение RAID при замене или добавлении новых дисков. Отличительной
    чертой Btrfs является то, что в перестроении участвуют только занятые блоки,
    что существенно сокращает время выполнения операции.

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

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

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

    Монтируем раздел с включением сжатия:

    Code:
       # mount -o compress=lzo /dev/sdb /mnt/MYFILES
    Сжатие можно включить и для отдельного подраздела:

    Code:
       # btrfs subvolume create /mnt/MYFILES/mysubvol
    
       # mount -o compress=lzo,subvol=mysubvol /dev/sdb /mnt/MYSUBVOL

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

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

    Создадим снапшот для ранее созданных данных:

    Code:
        # ls /mnt/MYFILES
        myfile1
        myfile2
    
        # btrfs subvolume snapshot /mnt/MYFILES /mnt/SNAPSHOT
    
        # ls /mnt/SNAPSHOT
        myfile1
        myfile2

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

    Code:
        # cp --reflink /mnt/MYFILES/myfile1 /mnt/MYFILES/myfile3
    
        # ls /mnt/MYFILES
        myfile1
        myfile2
        myfile3
    Средства дефрагментации.

    Btrfs поддерживает режим автоматической фоновой дефрагментации, активируемый
    при помощи опции монтирования "-o autodefrag". Кроме того, дефрагментацию можно
    запустить вручную:


    Code:
       # btrfs filesystem defrag /mnt

    21.08.2012
    http://opennet.ru/tips/2710_btrfs_snapshot_clone_raid_mirror_defrag.shtml