BTRFS 将 RAID0 转换为 RAID1

jay*_*jay 6 btrfs

不知何故,我错误地创建了我的 BTRFS 文件系统,最终使用 RAID0 而不是 RAID1。但是,我只在添加 274GB 数据后才注意到这一点(我知道,真是个白痴):

Total devices 2 FS bytes used 136.12GiB
        devid    1 size 465.76GiB used 137.03GiB path /dev/sdb
        devid    2 size 465.76GiB used 137.03GiB path /dev/sdc
Run Code Online (Sandbox Code Playgroud)

我想要A的方法:确认这确实是RAID0(我确定是,但我还没有找到明确输出的命令,我想在添加数据之前检查下一次)。和 B:如果可能,将数据重新分配到 RAID1。

foo*_*oot 8

在跨多个设备创建 btrfs 文件系统时,默认使用 RAID0 存储数据,使用 RAID1 存储元数据。如果要更改此设置,您可以将参数传递给 mkfs 命令以更改数据 (-d) 和元数据 (-m) 的 RAID 级别:

mkfs.btrfs -d raid1 -m raid1 /dev/sda /dev/sdb
Run Code Online (Sandbox Code Playgroud)

要确认现有文件系统上正在使用什么 RAID 级别,您可以使用btrfs 实用程序

$ btrfs fi df /mountpoint
Data, RAID1: total=15.00GiB, used=14.65GiB
System, RAID1: total=8.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=15.59MiB
Run Code Online (Sandbox Code Playgroud)

示例输出显示了用于数据和元数据的 RAID1。运行btrfs fi usage /mountpoint将提供更多细节。

您可以通过将参数传递给balance命令,将现有文件系统转换为不同的 RAID 级别

btrfs balance start -dconvert=raid1 -mconvert=raid1 /mountpoint
Run Code Online (Sandbox Code Playgroud)

余额再次将所有数据写入文件系统,添加参数将导致数据在重写时进行转换。这可能需要一段时间,您可以运行btrfs balance status /mountpoint查看状态。完成后,您可以使用btrfs fi df. 天平期间写入的数据可能仍使用旧格式,因此可能需要第二个天平。

诸如常规df命令之类的实用程序或btrfs fi show不考虑 RAID 设置,因为这是由 btrfs 本身完成的。这些工具只显示 btrfs 在磁盘上分配的总量,他们不知道 btrfs 对数据使用什么格式。这也意味着通过 SAMBA 或其他工具共享不会考虑 RAID。有关更多信息,请参阅 btrfs 常见问题解答。


jay*_*jay 2

好吧,让这个服务器成为我彻底失败的纪念碑。

确认 RAID 配置:btrfs fi df /mountpoint

事实证明我没有犯错,当您通过 SAMBA 连接到 btrfs RAID1 fs 时,Windows 会以某种方式报告两倍的数据(以及两倍的空间)。

如果您确实犯了我认为在设置 BTRFS 文件系统时犯的错误,那么可能会有所帮助,尽管幸运的是我不必尝试它。