BTRFS 余额已完成,但仍显示以“单一”模式存储的数据

pro*_*s91 3 filesystems raid btrfs

我有三个驱动器(8TB、4TB、3TB)。最初,我在 8TB 驱动器上创建了一个 btrfs 分区并将我的所有数据复制到那里。我使用 btrfs 设备添加添加了 4TB 和 3TB 驱动器,然后运行了平衡转换:

btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
Run Code Online (Sandbox Code Playgroud)

现在平衡已经完成,但它仍然在原始驱动器上以“单一”和“DUP”模式显示一些数据。这是来自的输出btrfs fi usage /mnt/btrfs

Overall:
    Device size:          13.37TiB
    Device allocated:          4.62TiB
    Device unallocated:        8.75TiB
    Device missing:          0.00B
    Used:              4.60TiB
    Free (estimated):          4.98TiB  (min: 4.38TiB)
    Data ratio:               1.76
    Metadata ratio:           2.00
    Global reserve:      512.00MiB  (used: 0.00B)

Data,single: Size:645.00GiB, Used:645.00GiB
   /dev/mapper/8TB   645.00GiB

Data,RAID1: Size:1.98TiB, Used:1.98TiB
   /dev/mapper/3TB   551.00GiB
   /dev/mapper/4TB     1.44TiB
   /dev/mapper/8TB     1.98TiB

Metadata,RAID1: Size:8.00GiB, Used:3.84GiB
   /dev/mapper/4TB     8.00GiB
   /dev/mapper/8TB     8.00GiB

Metadata,DUP: Size:7.00GiB, Used:6.41GiB
   /dev/mapper/8TB    14.00GiB

System,DUP: Size:8.00MiB, Used:400.00KiB
   /dev/mapper/8TB    16.00MiB

Unallocated:
   /dev/mapper/3TB     2.19TiB
   /dev/mapper/4TB     2.19TiB
   /dev/mapper/Seagate_Archive_8TB-btrfs       4.37TiB
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是否有任何数据存储在多个磁盘上?那么,换句话说,如果一个磁盘发生故障,是否会丢失任何数据?如果是这样,我如何将这个挥之不去的“单一”存储数据强制转换为 RAID1?
  2. 假设“single”和“DUP”数据存储是不必要的,现在一切都已转换为raid,有没有办法清除它们?

编辑:这是一些系统信息:

uname -a 
Linux 4.8.0-0.bpo.2-amd64 #1 SMP Debian 4.8.11-1~bpo8+1 (2016-12-14) x86_64 GNU/Linux
btrfs --version
btrfs-progs v4.9
Run Code Online (Sandbox Code Playgroud)

我还应该提到这台计算机在平衡期间重新启动,当它恢复时,我根本无法安装 btrfs 卷(它会挂起)。我尝试了许多不同的挂载参数(skip-param、recovery),唯一可行的方法是将它挂载为只读(使用-o ro)。在经历了很多挫折之后,我用 Antergos live USB 启动,它有最新的内核和 btrfs progs,它安装没有问题。我暂停了自动启动的平衡操作,然后重新启动到 Debian,它安装没有问题,所以我再次恢复了平衡。

pro*_*s91 7

在 btrfs irc 用户的帮助下,我能够回答问题 (1)。这似乎与重新启动和不成功的挂载尝试无关(仍然不确定那是怎么回事)。相反,作为“单一”存储的 645GB 数据似乎是在启动 raid1 转换后添加到 btrfs 卷的数据。因此,btrfs fi usage在假设所有数据在转换后存储为 raid1 之前检查输出似乎是一种很好的做法。此外,“软”过滤器将允许您重新平衡未根据目标配置文件存储的数据,例如我运行:

btrfs balance start --bg -mconvert=raid1,soft /mnt/btrfs
btrfs balance start --bg -dconvert=raid1,soft /mnt/btrfs
Run Code Online (Sandbox Code Playgroud)

(根据用户在 btrfs irc 论坛上的建议,先对元数据进行平衡,然后对数据进行平衡),这是将剩余数据转换为 raid1 的过程。

此外,要回答问题 (2),答案是在 raid1 文件系统中可能会出现一些“单个”块,但它们的使用率应该为 0。如果发生这种情况,您可以通过运行来清理它们

btrfs balance start -dusage=0 -musage=0 /mnt/btrfs
Run Code Online (Sandbox Code Playgroud)

(请参阅btrfs 常见问题解答