问题指的是:
- 基于 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=3
或DUP>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 文件系统,例如、和。linear
raid0
raid1
-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 个。