Btrfs:3台以上设备上的RAID 1


10

我目前有一个Btrfs分区,其中包含四个设备:三个3 TB驱动器和一个4 TB驱动器。数据和元数据是RAID 10,所以我有6 TB的可用空间,几乎已满。我曾预计Btrfs中对RAID 5的支持将在我的存储空间用尽时成熟,但是显然这不是优先事项。

我的问题是:有没有理由比RAID 1更喜欢RAID 10?我知道当前硬件上的真实RAID 1应该为我提供3 TB的可用空间,每个块有4个副本,但是Btrfs显然不会这样。从Btrfs常见问题解答

btrfs首先将所有设备组合到一个存储池中,然后在创建文件数据时复制这些块。RAID-1当前定义为“不同设备上所有数据的2个副本”。这与MD-RAID和dmraid不同,因为它们可以为n个设备精确复制n个副本。在三个1 TB设备上的btrfs RAID-1中,我们获得了1.5 TB的可用数据。因为每个块仅复制到2个设备,所以写给定的块仅需要精确地将2个设备写入。只能从一个阅读。

从Jens Erat的Stack Overflow来看:

Btrfs按块分配数据(及其RAID 1副本),因此可以很好地处理不同大小的硬盘。您将收到所有硬盘的总和,然后除以2 –无需考虑如何将它们成对放置。

如果一个以上的磁盘发生故障,则始终有丢失数据的危险:RAID 1无法同时处理两个磁盘的丢失。在上面给出的示例中,如果错误的两个磁盘消失了,您总是会丢失数据。

这是否意味着由于4 TB驱动器,从RAID 10到RAID 1的重新平衡将为我额外提供500 GB的数据(6.5 TB而不是6 TB)?我是否有理由坚持使用RAID 10?


1
BTRFS RAID-5实际上(尽管仍在试验中)相当稳定,甚至许多典型的数据恢复方案都可以在当前版本中工作(不会崩溃)。您可能应该不时进行清理以确保数据仍然正确,但是值得一试。可以从RAID-1(0)转换为RAID-5。
basic6 2015年

@ basic6很高兴知道,谢谢。我研究,不久前,发现scrubreplace支持已添加为3.19,但人们还抱怨缺乏设备故障警报。我确实为每周的磨砂和每周/每月的SMART自检设置了cron,因此我应该能够抓住这些问题。我会尝试的。
米克尔2015年

定期(每周或每月)清理很重要,如果清理失败并由于无法从驱动器读取而导致错误,则会增加错误计数。使用来检查错误计数dev stats,这可能是另一个cronjob
basic6

Answers:


5

是的,您将获得额外的500 GB。请注意,确定btrfs中的可用空间仍然很困难。另外:看一下btrfs磁盘使用率计算器

关于第二个问题:您的阵列可能会失去一些性能。自然,两种RAID配置上的数据同样安全。考虑性能时,您可以查看以下基准:kernel.orgphoronix.com

您是否已经尝试转换为RAID 1?如果是这样:您的发现是什么?


1
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,一旦您拥有足够的声誉,就可以在任何帖子中发表评论
DavidPostill

但是,为回答您的问题,我确实进行了转换,结果似乎与我的期望相符。Btrfs在指示实际可用磁盘空间方面做得很差,但是您可以从输出中看到btrfs fi sh4 TB驱动器上的多余空间已被利用,并且(2.83 + 1.93 + 1.93 + 1.95)/2~=4.30如预期的那样。我最近遇到了驱动器故障,并成功重建,没有数据丢失,因此我可以直接确认冗余是否完好。
米克尔2015年

抱歉,我的回复不清楚@david。我试图回答原始帖子的最后两行中的两个问题。另外,我指出了一系列不确定性(这似乎是btrfs固有的),并提供了我的参考资料。确实,我还向作者提出了一个问题,以便其他人也许可以从他的发现中学习。出于您已经解释的原因,我在答案内进行了此操作。下次我回答有关堆栈交换的问题时,我将考虑您的评论。
劳拉

可能不是最确定的答案,但是我的结果表明您的假设是正确的,因此我接受。不过,我不确定您是否对性能差异发表评论。硬件RAID 1 vs 10当然是正确的,但是我不确定Btrfs是否会从RAID 10看到性能上的提升。此外,这里所说的RAID 1仍然分布在多个设备上,因此它比RAID 10更类似于RAID 10。真正的RAID1。如果在转换之前先阅读您的答复,我会在基准测试之前和之后进行测试,但是我不会再花一周的时间将阵列转换为RAID 10再转换回来。
米克尔

好了,此页面显示了RAID 10相对于RAID 1的边际优势,最重要的是基准已使用7年。
Mikkel

0

不要使用btrfs raid 5或6来实现漏洞,请运行zfs。

使用raid10,您将获得更快的速度。

最佳方法是在4TB驱动器上创建3TB分区(确保所有3个磁盘的大小完全相同),然后将其合并到RAID6中,该RAID10将具有6 TB的可用空间。将4 TB驱动器上的额外1 TB用于/ boot(如果要使用efistub并避免使用grub或任何其他会使启动速度更快的引导加载程序,则无论如何都必须是vfat),交换(可以使用相当大的一个,最好是一个小的zram交换(4 gb可以在32 gb ram上正常工作,2 gb应该可以在16 gb上正常工作,如果值得的话,如果idd少于16,则无论如何都应该升级)首先使用zstd使用优先级(将优先级设置为最高),并使用与内核/线程一样多的压缩流...

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.