btrfs通过replace磁盘来增加RAID容量(而不是增加磁盘!)

我对btrfs的新function感到非常兴奋,并且想开始testing它。 在开始之前,我想问问btrfs是否支持通过更大的磁盘replace磁盘来增加RAID容量(而不是增加额外的磁盘)。 示例:由8个2TB驱动器组成的RAID10的容量为8 TB。 然后,每个2TB驱动器被6TB驱动器取代。 每次更换磁盘后,执行重build/重新平衡。 我想知道,如果在最后的磁盘更换和重新平衡后,容量从8TB跳到24TB?

互联网上有一些关于它的讲座,但没有百分之百的声明,如“是的,重新平衡之后,容量就会增加!”。 https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices#Adding_new_devices

来自Synology的NAS设备支持我正在问的function: https : //www.synology.com/en-global/knowledgebase/DSM/help/DSM/StorageManager/volume_diskgroup_expand_replace_disk但是,我不确定,如果这function是btrfs的本地特性,或者Synology的开发人员特别为其磁盘操作系统创build的。

是的,当您将驱动器更换为更大容量时,容量将会增加。 但要确保你总是有备份! 虽然RAID0 / 1代码几乎不像btrfs中的RAID5 / 6代码(截至07/2016),但您的设备更换不会是第一个出错的。

它应该像你所描述的那样工作。 但是,可能需要额外的步骤。

例如,如果将4个驱动器分别安装在raid1configuration中,则每个驱动器的容量为6 GB。 使用4 GB驱动器replace其中两个驱动器应该为您提供7 GB的容量( btrfs磁盘使用率计算器 )。

步骤1:创build4倍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:用4G驱动器replace2个3G驱动器(第3和第4个驱动器):

 # 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。

它需要resize,以使用所有可用的空间(平衡不会有帮助)。 它需要在每个已被replace的设备上resize,所以在设备#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步(替代):删除驱动器(旧的方式,不推荐)

添加replace命令之前,replace驱动器唯一的解决方法是添加一个新的驱动器,并删除旧的。 但是,这可能需要更多的时间。 它的缺点是会留下一个空洞,即被删除的设备ID将不再使用,设备ID不再匹配它们在RAIDarrays中的相应位置。

 # 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 

使用添加/删除时,不需要手动增大音量。

请注意,在使用添加/删除时,RAIDarrays中的第三个驱动器的索引为5,而不是3,当您需要根据机架中的插槽识别驱动器时,这可能会造成混淆。


这是BTRFS版本4.4。 未来版本可能会有不同的performance。