BTRFS单数据FS还是条带化的?

cra*_*orm 6 raid0 btrfs

更新

所以经过长时间研究官方文档,我发现btrfs以每个1Gb为单位的块来分配空间,并且在使用单一模式时,这些块被分配在当前未分配空间最多的磁盘上。因此,数据在不同磁盘之间进行条带化,正如我所见,丢失一个磁盘将导致大于 1Gb 的文件完全丢失。

我的结论是,使用单一模式相对于 raid0(也受 btrfs 支持)的唯一好处是可以使用不同大小的磁盘。还有其他想法吗?


原帖

因此,我使用以下命令创建了一个由 3 个数据模式为 Single 的设备组成的 btrfs 文件系统:

sudo mkfs.btrfs -f -d single /dev/sdb7 /dev/sdb8 /dev/sdb9
Run Code Online (Sandbox Code Playgroud)

然后我将 fs 安装到文件夹 nonRaid 并使用创建了一个 10G 文件

fallocate -l 10G nonRaid/example
Run Code Online (Sandbox Code Playgroud)

我理解使用 raid0 和 single 之间的区别是,在我的情况下,raid0 会将数据条带化到 3 个设备上,而使用 single 模式,数据不会被条带化,而是像 NTFS 一样作为整个块保存在磁盘上。我的理解正确吗?

如果是这样,如何解释当使用

btrfs filesystem usage nonRaid/
Run Code Online (Sandbox Code Playgroud)

它向我显示以下输出:

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  <---
Run Code Online (Sandbox Code Playgroud)

10G 数据分布在 3 个设备上,但不像使用 raid0 那样均匀。btrfs 不支持一个接一个填满整个磁盘的模式吗?因为这种条带化仍然意味着,如果 /dev/sdb8 发生不可恢复的故障,我整个文件系统的全部数据都会消失 - 对吗?

小智 5

我知道这是一个有点老的问题,尽管我在同一轨道的研究中发现了它。Hugo Mills 在 btrfs-kernel 邮件列表 ( https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg44523.html ) 上提供了相当详尽的解释。

太长;博士;btrfs 将文件存储在 1GB 块中,并将它们平均分配给每个驱动器上的可用空间。因此,“对于大小相同的设备,前 1 GiB 将在第一台设备上运行,第二个 1 GiB 将在第二台设备上运行,依此类推。”