我有一块 8TB 和两块 4TB 磁盘。我想知道我是否能够使用 8+4+4 磁盘创建 8TB raid?
我尝试过这个sudo mkfs.btrfs -f -m raid1 -d raid1 /dev/sdc1 /dev/sdd1 /dev/cdb1
但是这只能创建 4TB 的磁盘阵列。
从我的角度来看,从技术上来说,应该可以从两个 4TB 磁盘创建 8TB 条带,然后创建 8TB 镜像。这可以用btrfs
工具实现吗?
我有一块 8TB 和两块 4TB 磁盘。我想知道我是否能够使用 8+4+4 磁盘创建 8TB raid?
我尝试过这个sudo mkfs.btrfs -f -m raid1 -d raid1 /dev/sdc1 /dev/sdd1 /dev/cdb1
但是这只能创建 4TB 的磁盘阵列。
从我的角度来看,从技术上来说,应该可以从两个 4TB 磁盘创建 8TB 条带,然后创建 8TB 镜像。这可以用btrfs
工具实现吗?
是的,但 btrfs 的工作方式恰恰相反。它的“raid1”不是所有磁盘的镜像 - 它专门存储两个数据副本,每个“块”单独选择磁盘 - 如果我没记错的话,每个磁盘的大小为 1GB。
因此,如果您创建一个 3 磁盘“raid1”阵列,您将自动具有此行为,但不进行条带化:相反,一些块将在磁盘 1 和磁盘 2 之间镜像,一些块将在磁盘 1 和磁盘 3 之间镜像。
我相信 Btrfs 块分配优先考虑具有最多可用空间的磁盘,因此您不应该遇到大多数数据在磁盘 2 和 3 之间镜像而较大的磁盘保持未使用的情况,但
btrfs balance
如果确实发生这种情况,应该能够提供帮助。类似地,“raid1c3”恰好请求三个副本,并且可能对元数据有用。
小磁盘(如果我没记错的话,低于 1GB)可能只有一个这样的块 - 混合数据/元数据块 - 并且由于镜像是在块级别完成的,这可以解释为什么微小的 3 磁盘阵列不能按预期工作。
一种方法是将大磁盘分成两部分,并使用您已有的任何工具将第一个分区与一个较小的磁盘配对,将第二个分区与另一个较小的磁盘配对。
如果您选择使用
mdadm
配对来将空间“融合”为单个 8TB 实体,则可以在其上使用 LVM。或者,您可以从一开始就使用 LVM 和 LVM RAID。这意味着,您可以为每个 LV 选择一种分配模式:一些可能是双向镜像,一些是三向镜像,一些是 RAID5,一些只是条带化。我从未在生产中使用过它,我无法判断这种方法与以前的变体相比是否会产生更高或更低的维护开销。
看一下
bcachefs
,它的行为似乎正是您想要的。它会努力保持所有设备的填充百分比相同,并且能够容纳 8TB 的数据(不压缩),同时始终尝试使用最不繁忙的设备进行任何 I/O。有一个警告,在您的情况下,空间报告将显示 16 TB,但由于数据将被镜像,它将占用其大小两倍的空间,并且在不同的设备上,这里没有什么魔法或惊喜。虽然它仍处于开发阶段,但镜像功能被认为是稳定的。此外,在线清理(扫描、检查和修复)已经出现在 bcachefs 树中,因此它被拉入 vanilla Linux 只是时间问题,我预计这将在大约四个月内发生。