如何创建 btrfs RAID-1 文件系统(mkfs.btrfs 中的断言错误)?

amc*_*abb 5 filesystems mkfs btrfs

我尝试按照 btrfs UseCases 说明以“降级模式”创建 btrfs RAID-1 文件系统,但遇到了致命断言错误。为什么会失败,有什么解决方法吗?

我遵循的说明位于:

https://btrfs.wiki.kernel.org/index.php/UseCases#How_can_I_create_a_RAID-1_filesystem_in_.22degraded_mode.22.3F

mkfs.btrfs和命令的输出btrfs filesystem show是:

# mkfs.btrfs -m raid1 -d raid1 /dev/sdd1 /dev/loop1

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using

failed to read /dev/sr0
adding device /dev/loop1 id 2
mkfs.btrfs: volumes.c:802: btrfs_alloc_chunk: Assertion `!(ret)' failed.
zsh: abort (core dumped)  mkfs.btrfs -m raid1 -d raid1 /dev/sdd1 /dev/loop1
# btrfs filesystem show
failed to read /dev/sr0
Label: none  uuid: 773908b8-acca-4c30-85c5-6642b06de22b
        Total devices 1 FS bytes used 28.00KB
        devid    1 size 223.13GB used 2.04GB path /dev/sda5

Label: none  uuid: 0f06f1a8-5f5f-4b92-a55c-b827bcbcc840
        Total devices 2 FS bytes used 24.00KB
        devid    2 size 2.00GB used 0.00 path /dev/loop1
        devid    1 size 1.36TB used 20.00MB path /dev/sdd1

Btrfs Btrfs v0.19
#
Run Code Online (Sandbox Code Playgroud)

编辑:

事实证明文件系统无法安装:

# mount /dev/sdd1 /mnt/big2
mount: wrong fs type, bad option, bad superblock on /dev/sdd1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
#
Run Code Online (Sandbox Code Playgroud)

那么,为什么 mkfs 失败,有什么解决方法吗?

小智 3

为了挂载降级的阵列,您必须使用degraded挂载选项:

    mount -o degraded /dev/sdd1 /mnt/big2
Run Code Online (Sandbox Code Playgroud)

我不明白你在用小loop1分区做什么。这对于安装降级阵列来说不是必需的。您正在创建一个 raid1 阵列,其中一个成员的容量为 2GB,另一个成员的容量为 1.36TB。它们之间的差异是三个数量级,您最多可以期望拥有一个 2GB 的阵列。但元数据并非无关紧要。众所周知,您无法创建小于 256MB 的 btrfs 文件系统。

通常,在创建 raid1 阵列时,阵列的两个成员应该具有相同的大小。最近的btrfs 文档已更新,可以创建非同质数组,并且具有最小数组成员的大小。但在过去,这样的数组填充最小成员的速度比天真的预期要快得多。

因此,不要创建这样的不对称数组,和/或不要使用这样小的数组成员。(最重要的是使用-o degraded