更新
因此,在对官方文档进行了长时间的研究后,我发现 btrfs 以 1Gb 为单位分配空间,当使用单一模式时,这些块会分配在当前未分配空间最多的磁盘上。因此,数据会在不同的磁盘之间进行条带化,在我看来,丢失一个磁盘将导致大于 1Gb 的文件完全丢失。
我的结论是,使用单一模式而非 raid0(btrfs 也支持)的唯一好处是可以使用不同大小的磁盘。还有其他想法吗?
原始帖子
因此我使用以下命令创建了一个由 3 个设备组成的具有单一数据模式的 btrfs 文件系统:
sudo mkfs.btrfs -f -d single /dev/sdb7 /dev/sdb8 /dev/sdb9
然后我将 fs 挂载到 nonRaid 文件夹并使用创建了一个 10G 文件
fallocate -l 10G nonRaid/example
我理解使用 raid0 和 single 之间的区别是,在我的情况下,raid0 会将数据条带化到 3 个设备上,而使用 single 模式时,数据不会被条带化,而是像 NTFS 那样作为整个块保存在磁盘上。我理解正确吗?
如果是这样,如何解释使用
btrfs filesystem usage nonRaid/
它显示了以下输出:
Overall:
Device size: 59.98GiB
Device allocated: 13.02GiB
Device unallocated: 46.96GiB
Device missing: 0.00B
Used: 10.05GiB
Free (estimated): 47.91GiB (min: 24.43GiB)
Data ratio: 1.00
Metadata ratio: 2.00
Global reserve: 16.00MiB (used: 0.00B)
Data,single: Size:11.01GiB, Used:10.05GiB
/dev/sdb7 3.01GiB <---
/dev/sdb8 5.00GiB <---
/dev/sdb9 3.00GiB <---
10G 数据分布在 3 个设备上,但不如使用 raid0 那样均匀。btrfs 不支持一个接一个地填满整个磁盘的模式吗?因为这种条带化仍然意味着,如果 /dev/sdb8 等不可恢复地发生故障,整个文件系统的所有数据都会消失 - 对吗?
答案1
我知道这是一个有点老的问题,尽管我在研究同一轨道时发现了它。Hugo Mills 在 btrfs-kernel 邮件列表中给出了一个相当详尽的解释 (https://www.mail-archive.com/[电子邮件保护]/msg44523.html)。
tl;dr; btrfs 将文件存储在 1GB 的块中,并将它们平均分配给每个驱动器上的可用空间。因此,“对于大小相等的设备,第一个 1 GiB 将放在第一个设备上,第二个 1 GiB 将放在第二个设备上,依此类推。”