我有一个 btrfs 阵列,由 raid 1 中的两个 2TB 磁盘组成。我的空间不足,我想添加两个闲置的 3TB 磁盘。最终设置将是 2x2TB+2x3TB 驱动器。一个驱动器故障冗余对我来说已经足够了(数据也在其他地方备份)。
我不确定如何继续:btrfs 维基清楚地说明了如何添加新设备,但我不确定这在可用磁盘空间方面最终会是什么样子。我最终会得到:
- 2TB 空间,具有 4 倍冗余或
- 4TB 空间,具有 2 倍冗余或
- 还有别的吗?
根据一些研究(例如这答案)我认为结果应该是 2,这正是我想要的。这样正确吗?
另一种可能性是,如果可以使用不同大小的磁盘,我可以选择切换到 raid 10 设置。如果建议这样做,我应该如何做,而不将数据暂时托管在外部存储上?
答案1
2TB 空间,具有 4 倍冗余或
官方 wiki 中对此进行了详细的解释:
“… btrfs 首先将所有设备组合成一个存储池,然后在创建文件数据时复制块。
RAID-1 目前定义为“所有数据在不同设备上的 2 个副本”。
这与 MD-RAID 和 dmraid 不同……”
— 仅限 2 份。
另一种可能性是,如果可以使用不同大小的磁盘,我会切换到 raid 10 设置。
再次阅读同一来源:“...
RAID-10 是建立在这些定义之上的。
每个条带被分成 2 个 RAID-1 组,这些 RAID-1 组被写入 2 个设备(因此至少 4 个设备)。具有 6 × 1 TB 设备的 btrfs RAID-10 卷将产生 3 TB 可用空间,其中包含所有数据的 2 个副本。……”
如果不将数据暂时托管在外部存储器上,我该怎么做?
“转换”段落中也解释了这一切 —btrfs balance
重新开始一个挂载点,并指定所需的数据和元数据配置文件。简单调整他们的示例,它就变成了这样:
btrfs balance start -dconvert=raid10 -mconvert=raid10 /…mntPoint…
我认为在将两个新磁盘添加到该池后,中间就没有必要了balance
——添加本身不会重新平衡,只有新写入的数据才会使用额外的设备。因此,这很简单:添加并开始平衡您喜欢的任何布局。
结论
理论上你会得到最好的结果,因为“btrfs 首先将所有设备合并到一个存储池中“
实践
使用尺寸小得多的环回设备等设置来测试这一切会非常简单。
警告
尽管 Btrfs 已经相当成熟,但我听说与非 RAID 模式相比,多设备支持仍然不够强大。我建议首先在环回设备上尝试上述转换即使成功了,至少也要将最重要的数据备份到其他地方。
此外,表达我自己的观点,我会说我更喜欢将这样的设置转换为传统的 LVM-2 而不是 LSR(Linux 软件 RAID 又名 MD),这样您就可以创建逻辑子卷以供以后与 Btrfs 或任何其他所需的 FS 一起使用。