Raid

btrfs 通過更換磁碟(而不是添加磁碟!)來增加 raid 容量

  • January 26, 2017

我對 btrfs 的新功能感到非常興奮,並想開始對其進行測試。在開始之前,我想問一下 btrfs 是否支持通過用更大的磁碟替換磁碟(而不是添加額外的磁碟)來增加 RAID 容量。範例:由 8 個 2TB 驅動器組成的 RAID10 導致容量為 8 TB。然後,每個 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 的開發人員專門為他們的磁碟站作業系統創建了它。

是的,當您用更大的驅動器替換驅動器時,容量會在 btrfs 中增長。但請確保您始終有備份!雖然 RAID0/1 程式碼不像 btrfs 中的 RAID5/6 程式碼那樣有缺陷(截至 2016 年 7 月),但您的設備更換不會是第一個出現嚴重錯誤的設備。

它應該像你描述的那樣工作。但是,可能需要額外的步驟。

例如,如果您在 raid1 配置中放置 4 個每個 3 GB 的驅動器,您最終將獲得 6 GB 的容量。用 4 GB 驅動器替換其中兩個驅動器應該會給您 7 GB 的容量(btrfs 磁碟使用計算器)。

第 1 步:創建 4x 3G = 6G 容量的 BTRFS RAID1 卷:

# 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

文件系統現在的預期容量為 7 GB。

第 2 步(替代):移除驅動器(舊方式,不推薦)

在添加替換命令之前,更換驅動器的唯一解決方法是添加新驅動器並移除舊驅動器。但是,這可能需要更多時間。它的缺點是它會給你留下一個漏洞,即,被移除的設備的 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

使用添加/刪除時,無需手動增加卷。

請注意,當使用添加/刪除時,RAID 陣列中的第 3 個驅動器的索引為 5 而不是 3,當您需要根據機架中的插槽辨識驅動器時,這可能會造成混淆。


這是 BTRFS 4.4 版。未來版本的行為可能會有所不同。

引用自:https://serverfault.com/questions/782054