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

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

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

btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt

现在平衡已完成,但它仍然在原始驱动器上以“single”和“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

问题:

  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

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

答案1

在 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

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

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

btrfs balance start -dusage=0 -musage=0 /mnt/btrfs

(看btrfs 常见问题解答

相关内容