linux – 大型媒体存储和ZFS或BTRFS
作者:互联网
我有一台服务器,在一个8TB WD硬盘上有大约6TB的媒体文件.
在我提出问题之前,我可能应该提供一些背景知识.
这些文件在BTRFS上持续了几个星期,但是在一个不相关的硬件问题和随后的操作系统重建之后,我意外地破坏了磁盘和磁盘.不得不从备份中恢复文件,所以我决定用它作为尝试ZFS的机会.
我想使用zfs的主要原因是它能够保持数据完整性.在我转移到btrfs(现在是zfs)之前,我在ext4上有这些文件,并且在驱动器开发出一个bitrot问题后,我有一堆文件被静默地损坏了.
所以,在将数据重新加载到zfs之后,几周之后就可以了,直到今天早上我注意到磁盘被无情地鞭打了.
经过一番探索之后,我发现zfs以586K / s的快速速度“擦洗”了它.按照这个速度,它永远不会完成!
现在,这个过程的一部分是我对ZFS更加熟悉,所以如果我在这里误解了一些内容,请告诉我,但我认为数据完整性需要擦洗,因为整个数据集存储在一个物理磁盘上?
如果这是正确的话,如果我要购买更多磁盘并使用某种形式的raidz,鞭打问题是否会得到解决?
如果是这样,解决这个问题的最佳方法是什么?
1)购买2 x 4TB磁盘并使用非冗余条带化? (最便宜)
2)购买3 x 4TB磁盘并使用冗余条带? (更贵)
3)购买第二个8TB磁盘并镜像它? (最贵的)
请记住,我并不需要冗余的选项2& 3(可用性)&我更感兴趣的是维护数据(完整性),而不会让磁盘不断地进行擦洗.
系统细节:
intel i3 6100T
16Gb RAM
8TB WD Red
Ubuntu 16.04(在单独的SSD上)
关闭zfs压缩和重复数据删除(它们最初打开但我已关闭它们)
谢谢阅读
解决方法:
I believe that the scrub is needed for data integrity purposes because the whole dataset is stored on a single physical disk?
只有在您不能访问该数据集中的所有重要文件的数据集时,才需要ZFS清理,以便ZFS的常规文件检查机制能够足够快地发现问题.如果您选择每周擦洗一次,但您的正常使用模式每天读取或修改所有重要数据块,则清理是多余的.
对于像你这样的情况,有些文件可能多年没有被访问,但是当它们最终被访问时需要在那里,定期擦洗确实是个好主意.
现在,已经说过,所有使用单磁盘池的清理都是标记文件,其中已损坏的块无法访问.这是正确的:如果ZFS在这样的文件中检测到单个位错误,它将拒绝让您读取整个文件. ZFS只提供它知道没有损坏的数据.
这就是为什么要使用带有一定量冗余存储空间的ZFS的原因(如果可能的话).如果你给ZFS一个镜像使用,那么两个镜像中的同一个块必须被破坏才能获得相同的结果.
ZFS仍然允许您从单磁盘池上的这种情况手动恢复:从备份还原该文件. (希望也是类似的校验和,所以你知道你正在恢复文件的未损坏版本.)因为ZFS是一个copy-on-write文件系统,恢复的文件存储在未使用的数据块中,旧的版本被删除,包括其损坏的数据块(多个).
will the flogging problem be solved if I were to buy more disks and use some form of raidz?
如果池空闲,则擦除将与读取整个池的时间大致相同.对于这么大的磁盘,我希望它需要8到24小时.
如果花费的时间比这长得多,那么游泳池一定不能空闲.如果您认为池是空闲的,那么您可能有一些后台任务经常中断擦除,从而阻止ZFS快速完成其低优先级后台清理作业.
我感觉这是某种家庭媒体服务器,所以尝试这个实验:在你上床睡觉之前启动擦洗,将机器关闭到单用户模式,然后运行这个命令:
# watch -n 120 zpool status
记下擦洗所需的时间,然后上床睡觉.当你在N小时睡眠后早上起床时,看看是否已经超过或小于N小时.我怀疑它会比N减少多一点,因为现在系统除了擦除磁盘外别无他法.
在这种情况下,您需要找出在多用户模式下运行的后台进程会使ZFS的弯曲处于摇摆状态,从而阻止它完成大量工作.
至于你的实际问题,不,购买更多的磁盘不会让磨砂更快.它只会让ZFS有更多机会自动从数据损坏事件中恢复.无论你给它多少个磁盘,ZFS仍然必须读取磁盘上的所有数据块以进行擦除,而今天的多TB磁盘需要花费数小时.
注意:添加磁盘也会降低整个池的MTBF,但这是一个权衡:从前期和长期花费更多的钱来从错误中恢复,而不必诉诸备份. ZFS不是备份,但是通过冗余存储,它可以减少您需要返回文件备份的次数.
(备份不仅可以防止存储介质故障:意外删除,恶意软件,异地灾难恢复等.您仍然需要使用ZFS进行备份.)
Buy 2 x 4TB disks and use non-redundant striping? (cheapest)
这是MTBF的一半,除了速度之外没有任何优势.只在您可以承受丢失整个游泳池的游泳池上这样做.
Buy 3 x 4TB disks and use redundant stripe? (more expensive)
鉴于在现代多TB池中更换驱动器可能需要数小时,我建议至少使用双冗余,这意味着您需要四个磁盘和raidz2.使用简单的双向镜像,如果一个磁盘发生故障,如果通过直接更换坏磁盘来修复它,则没有冗余.在等待替换到达时,您也没有冗余. (如果你手头已经有了替换件,那么你已经在游泳池中备用了它,对吗?对吗?)
只有一个有限的例外,即当您的存储系统中有一个空闲插槽时,ZFS镜像允许您将替换添加到N路镜像,暂时使其成为N单向镜像.然后,ZFS重建过程能够对坏磁盘上的好块进行检查,以检查您认为仍然良好的磁盘上的任何坏块.但这仅适用于提供软错误的磁盘.如果磁盘发生故障,您将恢复N-1冗余,如果N为2,则不会产生冗余.
Buy a second 8TB disk and mirror it? (most expensive)
在您选择的三个选项中,因为通过镜像集扩展ZFS池是最简单的选择.它为您提供了轻松移动到3向镜像的选项,而在不重建整个池的情况下无法从raidz1移动到raidz2.
I don’t really require the redundancy of options 2 & 3 (availability) & I am more interested in maintaining the data (integrity)
除非您对备份有100%的信心,否则这似乎是没有区别的区别.如果您的备份有可能因为您的备份已经有所改变,或者您没有备份所需的一个文件,那么您的不可用数据的剩余完整性为零.
坦率地说,我建议使用另一个冗余ZFS池备份冗余ZFS池,否则您如何信任备份?
是的,它变得昂贵.现在,您可以决定将8TB的东西连接到计算机上有多糟糕.
标签:linux,ubuntu,zfs 来源: https://codeday.me/bug/20190816/1668693.html