Использование Btrfs на нескольких устройствах

Материал из Btrfs Wiki

Перевод: Алексей Федорчук, 2009 год
Оригинал

От переводчика: это перевод одной из статей с Btrfs Wiki. Не смотря на свой преклонный, масштабах времени развития современных файловых систем (точнее, хранилищ данных), материал этот в своей фактографический части представляет не только исторический интерес. Но может использоваться и на практике.

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

Если в наличии есть только одно устройство, то метаданные будут дублироваться на нём же.

Текущее состояние

При использовании Btrfs устройства можно добавлять и удалалять «на лету». Добавление устройств посредством mkfs со временем дает возможность использовать RAID разных уровней.

С помощью btrfs можно создавать массивы raid0, raid1, raid10, и дублировать их метаданные. По прочтении блоков, проверке их контрольных сумм и обнаружении ошибок btrfs попытается считать их с альтернативной копии.

Создание ФС на нескольких дисках
Команда mkfs.btrfs может воспринимать более одного устройства как аргументы командной строки. Это даёт возможность конфигураций RAID-массива для данных и метаданных. Доступен выбор между raid0, raid1, raid10 и единичным устройством. Выбор единичного устройства означает, что никакое дублирование метаданных не выполняется, что предпочтительно при использовании аппаратного RAID.

Для создания raid10 требуется не меньше четырёх устройств.

# Создание файловой системы поверх четырёх дисков
mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde

# Расщепление метаданных без зеркалирования
mkfs.btrfs -m raid0 /dev/sdb /dev/sdc

# Использование raid10 как для данных, так и для метаданных
mkfs.btrfs -m raid10 -d raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde

# Без дублирования метаданных на единичном устройстве
mkfs.btrfs -m single /dev/sdb

После создания многодисковой файловой системы, любое входящее в неё устройство может быть смонтировано отдельно:

mkfs.btrfs /dev/sdb /dev/sdc /dev/sde
mount /dev/sde /mnt

После рестарта системы или перезагрузки модуля btrfs, нужно использовать команду

btrfsctl -a

для обнаружения всех многодисковых файловых систем на данной машине (см. ниже).
Поиск многодисковых файловых систем и вывод их списка
Команда btrfsctl -a используется для просмотра всех блочных устройства в каталоге /dev и поиска томов Btrfs. Это требуется после загрузки модуля btrfs, если он запускается на файловой системе, состоящей из более чем одного устройства.

# Просмотр всех устройств
btrfsctl -a

# Просмотр единичного устройства
btrfsctl -A /dev/sdb

Команда btrfs-show выводит информацию обо всех файловых системах Btrfs на данной машине.
Добавление новых устройств
Команда btrfs-show даёт список всех файловых систем btrfs и устройств, которые они включают.

Команда btrfs-vol может использоваться для добавления новых устройств к смонтированной файловой системе и для балансировки нагрузки (рестриппинга) экстентов между всеми наличными устройствами. Например:

mkfs.btrfs /dev/sdb
mount /dev/sdb /mnt
# Добавление устройства
btrfs-vol -a /dev/sdc /mnt

В /mnt у нас есть теперь файловая система на двух устройствах, но все метаданные и данные всё еще хранятся на /dev/sdb. Файловая система должна быть сбалансирована, чтобы раскидать (существующие) файлы на все устройства.

btrfs-vol -b /mnt

Операция балансировки займет некоторое время. При этом считываются все существующие данные и метаданные файловой системы и перезаписываются с учётом нового устройства.
Удаление устройств
Команда btrfs-vol может также применяться для удаления устройств «на лету». Она перераспределяет все экстенты, используемые на подлежащем удалению устройстве, на другие устройства файловой системы. Например:

mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde
mount /dev/sdb /mnt
# Перераспределение данных по файловой системе
btrfs-vol -r /dev/sdc /mnt

Замена сбойных устройств
Команда btrfs-vol из приведённого выше примера может применяться для удаления сбойного устройства, если его суперблок ещё может быть считан. Если же устройство вышло из строя полностью или суперблок разрушен, то файловая система будет перемонтирована в деградировавшем режиме:

mkfs.btrfs -m raid1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
#
# если устройство sdd разрушено или удалено,
# используется -o degraded для
# принудительного монтирования
# с игнорирование отсутствующего устройства
#
mount -o degraded /dev/sdb /mnt
#
# 'missing' заменяет имя файла устройства
#
btrfs-vol -r missing /mnt

Команда btrfs-vol -r missing предписывает btrfs удалить первое устройство, указанное в метаданных файловой системы, но не первое в порядке монтирования её.

Добавить комментарий