web-dev-qa-db-ja.com

btrfsは、ディスクを交換する(ディスクを追加しない)ことでRAID容量を増やします。

私はbtrfsの新機能に非常に興奮しており、それを試してみたいと思います。始める前に、btrfsがRAID容量の増加をサポートしているかどうかを尋ねたいと思いますディスクをより大きなディスクに交換することによって(そして追加しない追加のディスク)。例:8x 2TBドライブで構成されるRAID10は、8TBの容量になります。次に、各2TBドライブは6 TBドライブに置き換えられます。各ディスクの交換後に、再構築/再バランスが実行されます。最後のディスク交換と再バランスの後に容量が急上昇した場合、 8TBから24TBへ?

インターネットでいくつかの講演がありますが、「はい、リバランス後、容量が増えます!」のような100%の発言はありません。 https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices#Adding_new_devices

SynologyのNASデバイスは、私が求めている機能を正確にサポートしています: https://www.synology.com/en-global/knowledgebase/DSM/help/DSM/ StorageManager/volume_diskgroup_expand_replace_disk しかし、この機能がbtrfsのネイティブ機能なのか、Synologyの開発者が特にディスクステーションオペレーティングシステム用に作成したのかはわかりません。

4
Chris

はい、ドライブをより大きなドライブと交換すると、btrfsの容量が増加します。ただし、常にバックアップがあることを確認してください。 RAID0/1コードはbtrfsのRAID5/6コードほどバグがありませんが(2016年7月現在)、デバイスの交換が最初にひどい間違いを犯したわけではありません。

1
Gerald

あなたがそれを説明したようにそれは働くはずです。ただし、追加の手順が必要になる場合があります。

たとえば、それぞれ3 GBの4台のドライブをraid1構成に配置すると、容量は6GBになります。それらのドライブの2つを4 GBドライブに置き換えるshouldは7 GBの容量を提供します( btrfsディスク使用量計算 )。

ステップ1:4x 3G = 6G容量のBTRFSRAID1ボリュームを作成します。

# 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 GBですが、6 GBしかありません。

解決

使用可能なすべてのスペースを使用するには、サイズを変更する必要があります(バランスは役に立ちません)。交換されたすべてのデバイスでサイズを変更する必要があるため、デバイス#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

ファイルシステムの予想容量は7GBになりました。

手順2(代替):ドライブを取り外します(古い方法、推奨されません)

Replaceコマンドが追加される前は、ドライブを交換する唯一の回避策は、新しいドライブを追加して古いドライブを削除することでした。ただし、これにはさらに時間がかかる場合があります。また、個別の穴が残るという欠点があります。つまり、削除されたデバイスのIDは使用されなくなり、デバイスIDはRAIDアレイ内のそれぞれの位置と一致しなくなります。

# 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

追加/削除を使用する場合、ボリュームを手動で拡張する必要はありません。

Add/removeを使用する場合、RAIDアレイの3番目のドライブのインデックスは3ではなく5であることに注意してください。これは、ラックのスロットに基づいてドライブを識別する必要がある場合に混乱する可能性があります。


これはBTRFSバージョン4.4です。将来のバージョンでは、動作が異なる可能性があります。

3
basic6