使用 btrfs RAID10 的可用空间比预期的多吗?

使用 btrfs RAID10 的可用空间比预期的多吗?

我刚刚在我的 Ubuntu 14.04 机器中第一次使用以下命令创建了 btrfs RAID10 阵列:

mkfs.btrfs -d raid10 -m raid10 /dev/sda /dev/sdb /dev/sdc /dev/sdd

我的 4 块硬盘每块都是 2TB。在 RAID10 下,我原本预计总共可用空间约为 3.6TB。然而,不知为何,我看到总共可用空间为 7.3TB(请参阅/dev/sda下文):

Filesystem      Size  Used Avail Use% Mounted on
/dev/sde1        42G  1.7G   38G   5% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            7.8G   12K  7.8G   1% /dev
tmpfs           1.6G  1.2M  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            7.9G     0  7.9G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sda        7.3T   13G  7.3T   1% /mnt/tmp

这是意外的行为吗?

其他信息:

bofh@stronghold:~$ sudo btrfs fi show
Label: none  uuid: a3a65325-0184-46d8-bef7-7ed066c9e320
    Total devices 4 FS bytes used 29.14GiB
    devid    1 size 1.82TiB used 16.03GiB path /dev/sda
    devid    2 size 1.82TiB used 16.01GiB path /dev/sdb
    devid    3 size 1.82TiB used 16.01GiB path /dev/sdc
    devid    4 size 1.82TiB used 16.01GiB path /dev/sdd

当我尝试列出我正在使用的 RAID 类型时,我看到“RAID10”和“单个”

bofh@stronghold:~$ sudo btrfs fi df /mnt/tmp
Data, RAID10: total=52.00GiB, used=48.77GiB
Data, single: total=8.00MiB, used=0.00
System, RAID10: total=16.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, RAID10: total=2.00GiB, used=64.12MiB
Metadata, single: total=8.00MiB, used=0.00

另一件相当奇怪的事情是 btrfs 设备扫描没有显示任何结果:

bofh@stronghold:~$ sudo btrfs device scan
Scanning for Btrfs filesystems
bofh@stronghold:~$ 

我正在使用刚刚安装的 Ubuntu 14.04 服务器并运行了 dist-upgrade。

任何建议都值得赞赏!

答案1

我看到总共可用空间为 7.3TB

没错。

简短的回答是,您看到的是可用于放置镜像副本的原始空间,因此将其分成两半即可获得预期的 3.6 TB。

使用 btrfs 计算磁盘可用空间非常容易让人困惑。官方 btrfs FAQ 有一个问题为什么计算自由空间很困难在 btrfs 中。

btrfs 文件系统可以包含具有不同 raid 级别的文件块。有些文件可能没有镜像副本(“单个”或“raid0”),而其他文件则有镜像副本(“raid1”)。

您实际上现在就在文件系统中拥有它。

当我尝试列出我正在使用的 RAID 类型时,我看到“RAID10”和“单个”

这说明您的文件系统中有一小部分数据未镜像(“单个”)。您需要执行 btrfs 平衡来修复此问题。我建议执行以下操作:

btrfs 平衡启动 -dconvert=raid1,profiles=single -mconvert=raid1,profiles=single -sconvert=raid1,profiles=single --force /mnt/tmp

这会将单副本数据转换为镜像,包括文件数据、元数据和系统数据(d、m 和 s)。“profiles”参数将使其仅影响当前单副本的数据。

相关内容