Назад | Перейти на главную страницу

btrfs увеличивает емкость рейда за счет замены дисков (а не добавления дисков!)

Я очень взволнован новыми функциями btrfs и хотел бы начать его тестировать. Прежде чем начать, я хотел бы спросить, поддерживает ли btrfs увеличение емкости рейдов. путем замены дисков на более крупныене добавляя дополнительные диски). Пример: RAID10, состоящий из 8 дисков по 2 ТБ, дает емкость 8 ТБ. Затем каждый диск емкостью 2 ТБ заменяется диском на 6 ТБ. После каждой замены диска выполняется восстановление / балансировка. Интересно, а если после последней замены диска и ребалансировки емкость скачет с 8ТБ до 24ТБ?

В Интернете есть лекция об этом, но нет стопроцентного утверждения типа «да, после ребалансировки емкость увеличивается!». https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices#Adding_new_devices

Устройства NAS от Synology поддерживают именно ту функцию, о которой я спрашиваю: https://www.synology.com/en-global/knowledgebase/DSM/help/DSM/StorageManager/volume_diskgroup_expand_replace_disk Но я не уверен, является ли эта функция встроенной функцией btrfs или разработчики из Synology создали ее специально для своей операционной системы дисковых станций.

Он должен работать так, как вы это описали. Однако может потребоваться дополнительный шаг.

Например, если вы поместите 4 диска по 3 ГБ каждый в конфигурацию raid1, вы получите емкость 6 ГБ. Замена двух из этих дисков на диски 4 ГБ должен даст вам 7 ГБ емкости (калькулятор использования диска btrfs).

Шаг 1. Создайте том BTRFS RAID1 с емкостью 4x 3G = 6G:

# mkfs.btrfs -f -draid1 -mraid1 /dev/sdb /dev/sdc /dev/sdd /dev/sde >/dev/null 
# mount /dev/sdb BTRFS/
# btrfs fi show BTRFS/
Label: none  uuid: e6dc6a95-ae5e-49c4-bded-77001b445ac7
    Total devices 4 FS bytes used 192.00KiB
    devid    1 size 3.00GiB used 331.12MiB path /dev/sdb
    devid    2 size 3.00GiB used 0.00B path /dev/sdc
    devid    3 size 3.00GiB used 0.00B path /dev/sdd
    devid    4 size 3.00GiB used 0.00B path /dev/sde

# parted -s /dev/sdb print | grep Disk
Disk /dev/sdb: 3221MB
Disk Flags: 
# parted -s /dev/sdc print | grep Disk
Disk /dev/sdc: 3221MB
Disk Flags: 
# parted -s /dev/sdd print | grep Disk
Disk /dev/sdd: 3221MB
Disk Flags: 
# parted -s /dev/sde print | grep Disk
Disk /dev/sde: 3221MB
Disk Flags: 
# df -h BTRFS/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        6.0G   17M  5.3G   1% /mnt/BTRFS
# btrfs fi df BTRFS/
Data, RAID1: total=1.00GiB, used=320.00KiB
Data, single: total=1.00GiB, used=0.00B
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=256.00MiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B

Шаг 2. Замените 2 диска 3G (3-й и 4-й) на диски 4G:

# parted -s /dev/sdf print | grep Disk
Disk /dev/sdf: 4295MB
Disk Flags: 
# parted -s /dev/sdg print | grep Disk
Disk /dev/sdg: 4295MB
Disk Flags: 
# btrfs replace start -f 3 /dev/sdf BTRFS/
# btrfs replace start -f 4 /dev/sdg BTRFS/
# btrfs fi show BTRFS/
Label: none  uuid: e6dc6a95-ae5e-49c4-bded-77001b445ac7
    Total devices 4 FS bytes used 512.00KiB
    devid    1 size 3.00GiB used 1.28GiB path /dev/sdb
    devid    2 size 3.00GiB used 1.25GiB path /dev/sdc
    devid    3 size 3.00GiB used 1.06GiB path /dev/sdf
    devid    4 size 3.00GiB used 544.00MiB path /dev/sdg

# df -h BTRFS/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        6.0G   17M  5.2G   1% /mnt/BTRFS

Файловая система RAID1 должна иметь емкость 7 ГБ, но она имеет только 6 ГБ.

Решение

Его необходимо изменить, чтобы использовать все доступное пространство (баланс не поможет). Его размер необходимо изменить на каждом устройстве, которое было заменено, например на устройствах №3 и №4.

# df -h BTRFS/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        6.0G   17M  5.8G   1% /mnt/BTRFS
# btrfs fi show BTRFS/
Label: none  uuid: e71b4996-5f7c-4b08-b8d8-87163430b643
    Total devices 4 FS bytes used 448.00KiB
    devid    1 size 3.00GiB used 1.00GiB path /dev/sdb
    devid    2 size 3.00GiB used 1.00GiB path /dev/sdc
    devid    3 size 3.00GiB used 288.00MiB path /dev/sdf
    devid    4 size 3.00GiB used 288.00MiB path /dev/sdg

# btrfs fi resize 3:max BTRFS/
Resize 'BTRFS/' of '3:max'
# btrfs fi resize 4:max BTRFS/
Resize 'BTRFS/' of '4:max'
# df -h BTRFS/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        7.0G   17M  6.8G   1% /mnt/BTRFS

Файловая система теперь имеет ожидаемую емкость 7 ГБ.

Шаг 2 (альтернативный): удалите диски (старый способ, не рекомендуется)

До добавления команды замены единственным обходным путем для замены дисков было добавление нового диска и удаление старого. Однако это может занять больше времени. И у него есть недостаток, заключающийся в том, что он оставит у вас отверстие для девида, то есть идентификатор удаленного устройства больше не будет использоваться, а идентификаторы устройств больше не будут соответствовать их соответствующей позиции в массиве рейдов.

# df -h BTRFS/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        6.0G   17M  5.3G   1% /mnt/BTRFS
# btrfs dev add -f /dev/sdf BTRFS/
# btrfs dev add -f /dev/sdg BTRFS/
# btrfs fi show BTRFS/
Label: none  uuid: ac40a98a-ac3b-4563-9ec9-6135332e5cdc
    Total devices 6 FS bytes used 448.00KiB
    devid    1 size 3.00GiB used 1.03GiB path /dev/sdb
    devid    2 size 3.00GiB used 1.25GiB path /dev/sdc
    devid    3 size 3.00GiB used 1.03GiB path /dev/sdd
    devid    4 size 3.00GiB used 256.00MiB path /dev/sde
    devid    5 size 4.00GiB used 0.00B path /dev/sdf
    devid    6 size 4.00GiB used 0.00B path /dev/sdg

# btrfs dev rem /dev/sdd BTRFS/
# btrfs dev rem /dev/sde BTRFS/
# df -h BTRFS/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        7.0G   17M  6.8G   1% /mnt/BTRFS
# btrfs fi show BTRFS/
Label: none  uuid: efc5d80a-54c6-4bb9-ba8f-f9d392415d3f
    Total devices 4 FS bytes used 640.00KiB
    devid    1 size 3.00GiB used 1.00GiB path /dev/sdb
    devid    2 size 3.00GiB used 1.00GiB path /dev/sdc
    devid    5 size 4.00GiB used 1.03GiB path /dev/sdf
    devid    6 size 4.00GiB used 1.03GiB path /dev/sdg

При использовании добавления / удаления нет необходимости увеличивать объем вручную.

Обратите внимание, что при использовании добавления / удаления третий диск в массиве raid имеет индекс 5 вместо 3, что может сбивать с толку, когда вам нужно идентифицировать диск на основе его слота в вашей стойке.


Это BTRFS версии 4.4. Будущие версии могут вести себя иначе.

Да, емкость увеличится в btrfs при замене дисков на более крупные. Но убедитесь, что у вас всегда есть резервные копии! Хотя код RAID0 / 1 и близко не так глючит, как код RAID5 / 6 в btrfs (по состоянию на 07/2016), замена вашего устройства не будет первой ошибкой.