我有三个驱动器(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
问题:
- 有没有什么数据是不是存储在多个磁盘上?那么,换句话来说,如果一个磁盘发生故障,是否会丢失任何数据呢?如果是这样,我怎样才能将这个挥之不去的“单一”存储数据强制到 RAID1 中?
- 假设“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 常见问题解答)