ZFS 作为本地存储有意义吗?

ZFS 作为本地存储有意义吗?

我读过有关 ZFS 的文章,一度想过在我的计算机上使用它,但是在阅读它的内存要求后我又重新考虑了。

使用 ZFS 作为本地存储是否有意义,或者这对于用作存储的服务器来说更有意义?(即使对于有其他用途的服务器来说,这似乎有点小题大做)。

答案1

ZFS 对内存的要求不是特别高。

正如评论中指出的那样,某些特征ZFS(特别是重复数据删除,还有 L2ARC)需要一定量的内存才能发挥作用。

但是,除非您有需要使用它们的特定用例,否则您不太可能使用这些功能。

ZFS 及其第一层 ARC(自适应替换缓存)并不比其他文件系统和缓存占用更多​​的内存。由于使用而不是例如最近最少使用缓存算法,在某些工作负载下它能够更有效地利用可用的缓存RAM。

什么是 ZFS要求是 ECC RAM。这在服务器上很常见,但在个人系统上很少见(许多低端英特尔 CPU 甚至不支持 ECC RAM)。此要求源于 ZFS 的自我修复特性,因为RAM 问题可能会破坏您的数据在运行 ZFS 时。ZFS 中没有代码来检查这一点,可能部分是因为似乎没有 100% 确定的方法可以通过软件来判断系统是否使用 ECC RAM。

ZFS 是否有意义取决于您要做什么,就像 NTFS 是否有意义也取决于您要做什么一样。不过,ZFS 确实提供了其他文件系统很少或根本没有的几个功能,这些功能在某些情况下非常有用。一些其中包括:

  • 保证端到端数据完整性。您可以确信,如果某次读取成功,它将返回最初写入该位置的相同数据。这意味着不存在静默数据损坏;您要么恢复数据,要么收到 I/O 错误。
  • 文件系统感知的条带化和冗余。普通 RAID 控制器将整个存储设备视为一大堆块,根本不了解磁盘上的任何数据结构。由于 ZFS 结合了卷管理和文件系统,因此它能够在出现错误时做出更明智的决策。它还具有“最重要的优先”重新同步方案,这意味着在发生故障后,对文件系统功能至关重要的数据将首先重新同步,而不太重要的数据则需要等待,无论数据存储在磁盘上的哪个位置。
  • 分层缓存。例如,您可以使用 RAM ARC,辅以快速 SSD L2ARC,并将大量数据存储在旋转 HDD 上。对于可以以合理的准确度估计工作数据集的工作负载,这可以以相对较低的成本提供巨大的 I/O 性能改进,而且肯定不需要全部使用 SSD。
  • 几乎免费的文件系统。使用 ZFS,创建“文件系统”与在大多数当代文件系统中创建目录几乎没有什么区别。文件系统可以有不同的配额,包括最大配额和保证配额。因此,使用 ZFS,通常建议将文件系统用作管理边界;例如,在大型服务器上,每个用户的主目录可以是其自己的文件系统。这样可以将目录树的各个部分彼此隔离,而无需创建单独的常规分区和文件系统所带来的开销。例如,我使用文件系统来分离我的电子邮件存档(每年)或照片(每月)。
  • 几乎免费的快照。我不知道有多少次,我能够回到几个小时前的文件状态,这让我避免了一些尴尬的错误。备份提供了类似的功能(并且仍然需要,因为任何 RAID 都不是备份),但快照更容易获得。在 ZFS 中,快照本身只需要几千字节的元数据存储,而不管相关文件系统中的数据量有多少,并且不会带来明显的性能损失。

仅因为您使用了 ZFS,就不需要使用其中任何一个。但它们就在那里,如果你想启用它们,通常只需一个命令即可。

那么,这些是否“矫枉过正”呢?这实际上很大程度上取决于你想做什么。我在家用系统上运行 ZFS(带 ECC RAM)。大多数情况下,它一直在安静地运行,不会发出比任何其他文件系统更多的噪音(可能更少),但它实际上至少一次让我免于数据损坏(清理发现了一些出现问题的扇区,并且自动且悄无声息地修复数据无需我干预。我个人认为我保存这些数据是有原因的,而这个原因很可能是我想稍后参考数据。现在考虑一下宇宙讨厌你的数据

随着存储容量不断增加,误码率(每个介质类别)也基本保持不变,I/O 错误不会减少。看看我首选的经销商,Seagate 和 HGST 都提供 8 TB 硬盘,价格虽然高,但不算过高,肯定在个人承受范围内。这大约是 6.4×10^13 位。误码率为 10^-14,甚至一次完整的媒体读取过程统计上极有可能遇到 I/O 问题,导致整个 (4 KiB) 扇区无法读取。(当我们达到 10 TB HDD 时,统计显示一次全盘读取将遇到至少一个无法读取的扇区)有研究表明未被发现读取错误发生的频率比我们愿意承认的要高得多,尽管我没有现成的链接,但硬盘制造商在改进磁盘 ECC 算法方面付出了巨大的努力。NTFS、ext4、UFS+、HFS+ 等现代文件系统还没有准备好处理这种情况。

这就是 ZFS 和 Btrfs 等文件系统想要填补的空白。

相关内容