我在 Ubuntu 16.04 上有一个带有 3 个磁盘的 Btrfs raid1。然而,似乎只有 2 个磁盘被使用,而不是全部 3 个。我应该如何解决这个问题?
root@one:~# btrfs fi sh
Label: none uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
Total devices 3 FS bytes used 54.77GiB
devid 1 size 2.73TiB used 56.03GiB path /dev/sda2
devid 2 size 2.73TiB used 56.03GiB path /dev/sdc2
devid 3 size 2.59TiB used 0.00B path /dev/sdb3
我尝试运行转换过滤器,但 /dev/sdb3 仍然没有被使用。
root@one:~# btrfs balance start -dconvert=raid1 -mconvert=raid1 /top/raid/
Done, had to relocate 112 out of 112 chunks
root@one:~# btrfs fi df /top/raid/
Data, RAID1: total=55.00GiB, used=54.40GiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=373.06MiB
GlobalReserve, single: total=128.00MiB, used=0.00B
起初,Ubuntu服务器安装时只有1个磁盘。然后我添加了一个磁盘并转换为raid1。然后我添加了第三个磁盘/dev/sdb3并再次尝试平衡。第三个磁盘未被使用。
root@one:~# btrfs --version
btrfs-progs v4.4
我可以很好地挂载 /dev/sdb3 。
root@one:~# mount /dev/sdb3 /mnt
root@one:~# ll /mnt
total 16
drwxr-xr-x 1 root root 74 Apr 13 09:37 ./
drwxr-xr-x 1 root root 200 Apr 12 21:19 ../
drwxr-xr-x 1 root root 200 Apr 12 21:19 @/
drwxr-xr-x 1 root root 152 Apr 12 15:31 @home/
drwxrwx--t 1 root root 36 Apr 13 09:38 @samba/
root@one:~# btr fi sh
Label: none uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
Total devices 3 FS bytes used 54.82GiB
devid 1 size 2.73TiB used 56.03GiB path /dev/sda2
devid 2 size 2.73TiB used 56.03GiB path /dev/sdc2
devid 3 size 2.59TiB used 0.00B path /dev/sdb3
答案1
编辑:
注意:btrfs 常见问题解答正如 @jeff-schaller 评论的那样(强调我的),陈述如下:
btrfs 支持 RAID-0、RAID-1 和 RAID-10。从 Linux 3.9 开始,btrfs 还支持 RAID-5 和 RAID-6,尽管该代码仍处于实验阶段。
btrfs 首先将所有设备组合到一个存储池中,然后在创建文件数据时复制这些块。 RAID-1 目前定义为“不同设备上所有数据的 2 个副本“。这与 MD-RAID 和 dmraid 不同,因为它们为 n 个设备制作了 n 个副本。在 btrfs RAID-1 中三台 1 TB 设备,我们获得 1.5 TB 的可用数据。因为每个块仅复制到 2 个设备,写入给定块仅需要写入 2 个设备;阅读只能从一本开始。
RAID-0 的定义类似,条带分布在尽可能多的设备上。 3 × 1 TB 设备可产生 3 TB 可用空间,但根本不提供冗余。
RAID-10 是建立在这些定义之上的。每个条带都准确地划分为 2 个 RAID-1 集,并且这些 RAID-1 集恰好写入 2 个设备(因此最少 4 个设备)。具有 6 × 1 TB 设备的 btrfs RAID-10 卷将产生 3 TB 可用空间,其中包含所有数据的 2 个副本。
目前我手头没有足够大的驱动器来测试这一点,但我的猜测很简单,因为您有相对较大的驱动器,所以 btrfs 只是选择将数据写入到目前为止的前两个驱动器。我预计随着更多数据写入驱动器,这种情况将来会发生变化。
如果您对我对较小驱动器的测试感兴趣:
我在具有单个 SATA 驱动器的虚拟机中安装了 Ubuntu Server 16.04 LTS,并将操作系统安装在单个 btrfs 分区上。
然后我添加了另一个 SATA 驱动器,对其进行分区,运行btrfs device add /dev/sdb1 /
,然后在转换为 raid1 时平衡它btrfs balance start -dconvert=raid1 -mconvert=raid1 /
我对设备 /dev/sdc1 重复了一遍。对我来说结果是一样的 - 我有一个跨越三个驱动器的 btrfs。我还分配了一个 2GiB 文件,确实可以从所有三个磁盘访问它。我的btrfs fi sh
显示如下:
Label: none uuid: cdfe192c-36da-4a3c-bc1a-74137abbb190
Total devices 3 FS bytes used 3.07GiB
devid 1 size 10.00GiB used 5.25GiB path /dev/sda1
devid 2 size 10.00GiB used 5.03GiB path /dev/sdb1
devid 3 size 8.00GiB used 2.28GiB path /dev/sdc1
你是如何调用 mkfs.btrfs 的?你的 btrfs-progs 版本是什么?
# btrfs --version
btrfs-progs v4.4
我无法重现你的情况。如果您尝试挂载 /dev/sdb3 会发生什么?
如果您有虚拟机或备用磁盘可以进行分区,请创建 3 个分区并尝试以下操作。
我创建了一个 Ubuntu 16.04 VM,并将 /dev/vda 分为三个分区,每个分区 2GiB。
# mkfs.btrfs -d raid1 -m raid1 /dev/vda{1..3}
Label: (null)
UUID: 0d6278f7-8830-4a73-a72f-0069cc560aaf
Node size: 16384
Sector size: 4096
Filesystem size: 6.00GiB
Block group profiles:
Data: RAID1 315.12MiB
Metadata: RAID1 315.12MiB
System: RAID1 12.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 3
Devices:
ID SIZE PATH
1 2.00GiB /dev/vda1
2 2.00GiB /dev/vda2
3 2.00GiB /dev/vda3
# btrfs fi sh
Label: none uuid: 0d6278f7-8830-4a73-a72f-0069cc560aaf
Total devices 3 FS bytes used 112.00KiB
devid 1 size 2.00GiB used 614.25MiB path /dev/vda1
devid 2 size 2.00GiB used 315.12MiB path /dev/vda2
devid 3 size 2.00GiB used 315.12MiB path /dev/vda3
尝试安装 /dev/vda1,向其写入文件,然后安装 /dev/vda2 或 /dev/vda3 并检查该文件是否存在(肯定应该存在)。
PS:我首先在 Arch 上使用 btrfs-progs 版本 4.10.2 进行了尝试,得到了相同的结果,但我认为 Ubuntu 16.04 可能附带了一个可能表现不同的旧版本。结果它随 v4.4 一起发布,但在文件系统创建和镜像等方面似乎表现相同。
答案2
该卷现在正在使用所有磁盘。我想拉班的猜测应该是正确的。由于前两个磁盘比第三个磁盘大,“btrfs 只是选择将数据写入到目前为止的前两个驱动器”。
root@one:~# btrfs fi sh
Label: none uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
Total devices 3 FS bytes used 151.00GiB
devid 1 size 2.73TiB used 148.03GiB path /dev/sda2
devid 2 size 2.73TiB used 148.03GiB path /dev/sdc2
devid 3 size 2.59TiB used 8.00GiB path /dev/sdb3
root@one:~# btrfs dev usage /
/dev/sda2, ID: 1
Device size: 2.73TiB
Data,RAID1: 147.00GiB
Metadata,RAID1: 1.00GiB
System,RAID1: 32.00MiB
Unallocated: 2.58TiB
/dev/sdb3, ID: 3
Device size: 2.59TiB
Data,RAID1: 8.00GiB
Unallocated: 2.58TiB
/dev/sdc2, ID: 2
Device size: 2.73TiB
Data,RAID1: 147.00GiB
Metadata,RAID1: 1.00GiB
System,RAID1: 32.00MiB
Unallocated: 2.58TiB