步骤 1:创建容量为 4x 3G = 6G 的 BTRFS RAID1 卷:

步骤 1:创建容量为 4x 3G = 6G 的 BTRFS RAID1 卷:

我对 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 的开发人员是否专门为其磁盘站操作系统创建了它。

答案1

是的,当您用更大的驱动器替换 btrfs 时,容量会增加。但请确保您始终有备份!虽然 RAID0/1 代码不像 btrfs 中的 RAID5/6 代码那样有缺陷(截至 2016 年 7 月),但您的设备替换不会是第一个出现严重错误的设备。

答案2

它应该可以像您描述的那样工作。但是,可能需要执行额外的步骤。

例如,如果你在 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 步(替代方法):移除驱动器(旧方法,不推荐)

在添加 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

使用添加/删除时,无需手动增加卷。

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


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

相关内容