具有不同大小磁盘的多设备BTRFS文件系统


14

我有一个由一个500GB磁盘组成的现有BTRFS文件系统,我刚刚购买了一个2TB磁盘以增加家庭服务器的存储容量,并且我想将新磁盘添加到现有文件系统中。根据我的阅读,似乎没有BTRFS安装程序可以处理不同大小的磁盘而不会浪费较大磁盘和较小磁盘之间的大小差异,但是我是BTRFS的新手,所以我可能错过了一些东西,因此是否有安装程序那可以让我在文件系统中合并两个磁盘而又不浪费空间?


您如何处理基础磁盘?使用LVM?
安迪·史密斯

@ Andy,btrfs处理LVM / RAID样式的多个磁盘,请选中此项
OneOfOne 2010年

糟糕...我的坏。为此加油;-)
安迪·史密斯

Answers:


4

Btrfs可以对数据和元数据使用不同的raid级别:

默认值(即使是一个磁盘)的默认值是raid1(用于元数据(目录等))和raid0(用于数据)。

如果您没有进行更改,那么添加第二张光盘并进行重新平衡可能没有问题。因为只有元数据会被复制到两张光盘上(您可以使用来查看元数据的大小btrfs filesystem df /)。请注意,如果您的任何一个磁盘都发生故障,则会丢失数据。

因为2tb磁盘比500g大得多,所以如果添加新的磁盘然后删除旧的磁盘,则可能会给您带来更好的赔率(一个特定驱动器发生故障的可能性比任何一个驱动器的损失都小得多失败)。

如果您计划以后使用RAID阵列(具有更多类似大小的驱动器),则可能希望使用raid1在新驱动器上为数据和元数据重新创建文件系统,然后将所有内容复制过来。然后,当您有更多钱时,再购买第二个2TB驱动器。

ps:在单个驱动器上使用raid1意味着数据将存储在一个驱动器上的两个位置(以防止损坏),并会减少您的存储空间(这对于元数据而言确实是个好主意)。

pss:认真地说,不要试图不要将raid1用于元数据。psss:btrfs非常有可能获得动态更改突袭等级的能力。


我个人计划在btrfs具有raid5和raid6支持的情况下重新创建btrfs fs / arrays / what-do-i-call-this。
Arthur Ulfeldt 2010年

12

这取决于您对多设备Btrfs文件系统的数据块使用什么配置文件。

  • 当使用RAID0(数据块的默认值)时,每个磁盘只能装满阵列中最小磁盘的容量。

  • 当对数据块使用“单个”配置文件时,每个磁盘都将被填满。例如mkfs.btrfs -d single /dev/sda /dev/sdb

我有一个具有2TB和3TB磁盘的文件服务器。它从USB闪存驱动器启动Ubuntu 12.10。首先,我创建了不带-d single选项的Btrfs文件系统:

mkfs.btrfs /dev/sda /dev/sdb

结果是我只能存储大约4TB(3.45二进制TB文件数据)。

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

请注意used 1.82TB3TB驱动器的。

然后,我使用“ balance”命令将数据块从RAID0转换为“单个”配置文件:

btrfs balance start -dconvert=single /mnt/btrfs1

平衡4TB数据花费了很长时间(大约30小时)。但完成后,我可以使用完整的5TB(4.36二进制TB文件数据)。

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1

2

我在Ubuntu中使用了多个带有btrfs的设备,并且运行良好。请记住,btrfs实际上并未实现标准RAID级别。它实现了可选的条带化和镜像,但不是真正的RAID。


1

可以在btrfs中组合不同大小的驱动器。
但是目前btrfs不能很好地处理ENOSPC(设备上没有剩余空间)。

例如,我在RAID0(条纹)阵列中安装了3个驱动器。1x500GB,1x250GB,1x160GB。
您假设您将拥有800-900GB的磁盘空间。

df -h表明:
/ dev / sdf 848G 615G 234G 73%/ media / btrfs

但是我无法在阵列上存储更多数据。(没有剩余空间)

btrfs filesystem df /media/btrfs向我展示了这一点:
数据:总计= 612.51GB,已使用= 612.51GB
元数据:总计= 1.62GB,已使用= 990.73MB
系统:总计= 12.00MB,已使用= 48.00KB

即使重新平衡也无济于事。

在邮件列表上,我看到了这种调用:
最小驱动器的大小*阵列中驱动器的数量
(尽管我还有更多空间:612GB而不是160GB * 3 = 480GB)

因此,在当前的开发状态下,即使btrfs在一个数组中支持不同大小,您也将无法使用所有空间。

我正在使用具有2.6.35-22通用内核的Ubuntu 10.10。


我认为它永远不会支持您想要的内容,至少直到它在每个文件/每个目录的基础上支持不同的RAID级别为止。对于raid0(条带化),要求btrfs在所有3个设备上保持每个文件大小相等。如果它允许您使用一台设备的全部500GB容量,怎么办?如果您不是使用“ raid0”而是使用“ single”(不确定发布时此选项是否可用),则btrfs不会尝试在任何地方复制文件,而是让您在所有设备上使用所有空间。但是对于RAID级别,这没有任何意义:您正试图违反RAID级别的定义。
bobpaul

没关系,我错了。btrfs raid0 / 1仅将条带/镜像条带化至其他1个设备,而不是所有设备,因此1TB + 500GB + 500GB的raid0和raid1的性能与1TB + 1TB的性能完全一样(至少从Linux 3.0起)。在Linux 3.0之前,它具有您描述的问题。
bobpaul

1

更新:以下答案是在Linux 3.0发布之前编写的。Linux 3.0包含准循环补丁。

进行数据镜像或分条时,需要在具有可用空间的另一台设备上分配第二个镜像或条带块。BTRFS以循环方式将块分配给设备,如果您拥有不同大小的设备,这可能会导致空间丢失。

管道中有一个准循环机制补丁可以对此进行改进。当然,如果您有500GB和2TB磁盘,仍然不可能将不同设备上的所有块配对。该补丁程序更适合于1 x 1TB + 2 x 500GB之类的情况,其中每个小磁盘都应该使用大磁盘而不是其他小磁盘进行镜像/剥离。

在您的情况下,我只将“单”模式用于您的数据(mkfs.btrfs -d single)。块不是在那种模式下配对的,所以我认为使用不同大小的设备不会有问题。我还没有测试过。


0

此问题仅适用于Gotchas页面中的btrfs-raid1设置:

  • 分配是循环进行的。如果您在由不匹配的驱动器(不同大小的卷)组成的卷上执行raid1策略,则较小的卷可能会填满,同时在单个最大的驱动器上留有大量空间。可以验证这是一个问题,如果有任何差异“DF”和“的btrfs文件系统DF [挂载点]” AND 如果后者命令还示出了“用过的”“总”和都对“数据”线相同的。重新平衡可以缓解此问题。(2.6.33)
    • 如果您的音量确实以这种方式填满,则重新平衡可能会迅速导致ENOSPC(“设备上没有剩余错误错误”)。您可能必须删除一个相对较大的文件才能解决此僵局,然后重新平衡会成功。(2.6.33)
    • 重新平衡可能会导致很长时间内迅速占用大量CPU。(2.6.34和2.6.35)

抱歉,请您重复一遍,但是我要添加新设备,因此请确保。所有来源都检查了RAID0的状态,表明磁盘需要具有相同的大小(例如,freebsd geom doc:“ RAID0条带中的每个磁盘都必须具有相同的大小,因为I / O请求被交错读取或写入到并行的多个磁盘。”)。您可以确认它与Btrfs兼容吗?
fokenrute

很抱歉,我没有确认的多设备btrfs,但是对于raid0 + btrfs具有相同的设备大小,我找不到任何信息,但是,如果您有足够的时间,请将新磁盘拆分为1tb / 1tb,将旧磁盘备份到分区之一,附加空的1tb,如果可以,则附加第二分区。
OneOfOne 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.