将 btrfs 设备添加到 raid1 阵列,增加总大小

AF7*_*AF7 3 raid1 raid10 btrfs

我有一个 btrfs 阵列,它由 raid 1 中的两个 2TB 磁盘组成。我的空间不足,我想添加两个闲置的 3TB 磁盘。最终设置将是 2x2TB+2x3TB 驱动器。一个驱动器故障冗余对我来说就足够了(数据也备份到了其他地方)。

我不确定如何继续:btrfs wiki清楚地说明了如何添加新设备,但我不确定这最终会如何看待可用磁盘空间。我会得到:

  1. 2TB 空间,4 倍冗余或
  2. 4TB 空间,2x 冗余或
  3. 还有什么?

根据一些研究(例如这个答案),我认为结果应该是 2,这就是我想要的。这样对吗?

另一种可能性是我切换到 raid 10 设置,如果这对不同大小的磁盘是可能的。如果这是可取的,我应该如何在不临时将数据托管在外部存储上的情况下这样做?

poi*_*ige 5

2TB 空间,4 倍冗余或

来自官方维基的引用详细解释了它:

“…… 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。