对于 Btrfs,如何在单个分区上转换为 DUP =3 或 >3?

对于 Btrfs,如何在单个分区上转换为 DUP =3 或 >3?

问题指的是:

  • 基于 Debian 的 Linux,内核 >=5.1
  • 明确也适用于仅具有一个硬盘或 SSD、仅具有一个 Btrfs 分区的系统

关于可能的实施的提示: “是否可以在单个设备上对数据和元数据使用 DUP?如果可以,我是否能够指定超过 1 个数据副本?”

有关 Btrfs 下支持的最低配置文件的信息:

DUP=1 的配置示例:

将具有单个硬盘和单个分区的现有系统的元数据从 DUP=2 转换为 DUP=1:

btrfs balance start -mconvert=single / # convert metadata
btrfs balance start -dconvert=single / # convert data

DUP=2 的配置示例:

将具有单个硬盘和单个分区的现有系统的元数据从 DUP=1 转换为 DUP=2:

btrfs balance start -mconvert=dup / # convert metadata
btrfs balance start -dconvert=dup / # convert data

它不要求需要多个硬盘或多个分区的解决方案,如下所示:

将没有冗余的“single”转换为具有数据和元数据冗余的 RAID1,如下所示:

btrfs balance start -mconvert=raid1 /

将没有冗余的“单一”转换为 RAID1c3 或 RAID1c4

...

答案1

Btrfs 目前不提供 aDUP=3DUP>3配置文件。列出了支持的配置文件这里

毫无疑问,DUP 的空间效率为 50%。那么您就没有 DUP3(这意味着 33% 的效率)。

最接近的 DUP3 是 RAID1c3,但它需要 3 个不同的块设备。

(如果您不信任链接的页面,请使用man mkfs.btrfs)。

答案2

如果您无法对磁盘重新分区,可以使用多种选项从单个分区获取 3 个相同大小的块设备,然后将其与 btrfs 和配置文件一起使用raid1c3。选项:

  • LVM:使当前分区成为新 LVM 卷组的唯一 PV,并在其上创建 3 个相同大小的卷。使用这些卷创建带有raid1c3配置文件的新 btrfs 文件系统。

  • mdadm:创建一个 mdadm 设备,例如,从带有、或mode 和 options 的/dev/md0分区,然后对设备进行分区并从嵌套分区创建一个 btrfs 文件系统,例如、和。linearraid0raid1-n 1 --force/dev/md0p1/dev/md0p2/dev/md0p3

  • bcache:使用分区作为后备设备创建一个bcache设备(没有缓存运行也可以)并在bcache设备上创建分区;在新分区上创建一个 btrfs 文件系统,例如 /dev/bcache0p1/dev/bcache0p2并且/dev/bcache0p3(为了使分区设备文件出现,我上次尝试此操作时必须发出命令;它们应该在下次重新启动时自动出现)

建议进行备份,并且 mdadm 和 bcache 选项可能需要将数据临时存储在其他位置,即创建 mdadm 或 bcache 设备具有破坏性。对于 LVM 选项,您可以缩小当前的 btrfs 文件系统并按照我的回答“manual lvmify”进行操作https://superuser.com/questions/493481/fastest-way-to-convert-an-ext4-formatted-disk-to-lvm-with-ext4-on-it将分区转换为逻辑卷。 (接受的答案使用包含收缩步骤的工具,但它设置的尺寸对于您的目的而言不够小。)

如果您的分区位于具有内部重复数据删除功能的 SSD 上,您可能需要添加 LUKS 层,以便 SSD 看到每个副本的不同数据,并被迫单独存储每个副本。尽管如此,写入每个副本的时间可能意味着副本最终位于同一存储块中,并且所有副本同时失败的概率可能高于预期。

调整raid1c4上述建议以创建 4 个设备而不是 3 个。

相关内容