btrfs 通過更換磁碟(而不是添加磁碟!)來增加 raid 容量
我對 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 版。未來版本的行為可能會有所不同。