为什么 btrfs 允许使用不匹配的驱动器创建 raid1?

Fab*_*ndl 5 raid mirror btrfs raid1

我正在创建一个 btrfs 使用

sudo mkfs.btrfs -m raid1 -d raid1 <small-disk> <large-disk> or
sudo mkfs.btrfs -m raid1 -d raid1 <large-disk> <small-disk>
Run Code Online (Sandbox Code Playgroud)

它创建了大小为两个磁盘/分区总和的 fs,但是

 btrfs fi df <mountpoint>
Run Code Online (Sandbox Code Playgroud)

为我提供数据、系统和元数据的 RAID1

这怎么可能是正确的?

有没有像 mdadm 那样的方法

cat /proc/mdstat
Run Code Online (Sandbox Code Playgroud)

看看 btrfs 在做什么并确保我的 raid1 是安全的?这不是非常重要的数据,因此可以使用 btrfs,但我也不想丢失它。

Fab*_*ndl 9

我通过在邮件列表上询问找到了答案。

btrfs 不按卷执行 RAID,而是按块执行。文件系统在 (pe) 1GB 块中保留“原始”空间。使用 raid1 初始化 fs 意味着每次尝试分配块时,它都会尝试在另一台设备上分配该块的副本。

这种架构允许混合大小的设备,其未来的功能可能包括每个文件的 raid 级别。

当前df显示设备上的可用原始空间量,这是所有设备大小的总和。假设块大小为 1GB,因此仅将 5MB 文件写入 raid1-btrfs 将减少 2GB 的原始空间。这就是为什么 btrfs 包含btrfs fi df为您提供实际用法的命令。这可能会在未来进行调整,以更准确地显示正在发生的事情。