【 在 intron (内含子) 的大作中提到: 】
: 其实多个存储设备来紧密耦合地协同工作,
: 对于系统的稳定性是非常不利的。
ZFS 只是提供了这种可能,并没有要求用户必须这样用吧。实际应用中,我们往往会
使用一些特别的分配方法来降低单个硬件出现问题导致整个系统不可用的风险,例如
将存储池的每行设计为分散在不同 JBOD 上,以及使用多通道连接方式(使用两个HBA
卡来连接同一个 JBOD 或背板,每个硬盘上使用来自两个不同背板的接线),等等。
硬件本身也可以有相当多的冗余,在这个基础上,还可以使用多个不同的服务器来做
冗余,等等。
相比传统的文件系统,ZFS有许多优点。首先是它提供了端到端的校验机制,传统的
文件系统依赖存储本身的可靠性:例如,如果文件系统创建在 RAID 上,则 RAID 说
什么就是什么,而实际上 RAID 对于数据块只有两种状态:可以拿出数据和不能拿出
数据,至于后面的磁盘上的数据到底是什么,哪份坏了,传统文件系统是没办法知道的。
端到端校验使得ZFS有能力知道数据与当时写到磁盘上的状态是一样的。当磁盘出现问题
时,ZFS能够根据这些数据判断如何正确地修复问题。ZFS的元数据会保存多份,即使是
单盘系统,由于数据校验的存在,ZFS也还是有相当多的机会能够找到哪份是好的,并据
此给用户返回正确的结果。传统文件系统完全不具备这些能力,并且依赖 fsck 这样的工
具做事后补救。我本人在8、9年前在 fsck 方面做过相当多的工作,确实 fsck 可以修复
相当多的问题,但是在存储发生问题时,实际上 fsck 可以做的事情相当有限,许多时候
它只能将块重新保存成文件,然后留待系统管理员去进行处理,这显然是不够的。
ZFS 的另一个优势是它不覆写数据(在需要修改数据时,ZFS 的策略是写时复制 Copy
on Write)。这个特性对于机械磁盘来说非常重要,因为在发生故障时,机械磁盘很可能
将扇区之前的内容改写成你无法预知的样子。由于有端到端校验,ZFS 能够识别这类问题,
在最差情况下,它能够回退到这个写事务之前的事务:是的,这样还是会导致数据丢失,
但是传统文件系统上也是会丢失数据的,而 ZFS 丢弃的数据是最新写入的数据,而传统
文件系统由于不会避免覆写,因此你很难知道到底什么数据丢掉了。
ZFS 的这个特性还有一个(好的)副作用是避免了 RAID 控制器在 RAID-5 等模式中的写
洞问题(write hole)。由于磁盘的写入操作可能不能保证在同时完成,因此有可能出现
一个RAID条带上的数据不一致的问题。传统文件系统或RAID卡可能必须丢弃整个条带的数
据(注意,由于覆写,被丢弃的条带可能包含之前写入的其他数据),或者在更糟糕的情
况下,很可能无法检测出发生了这样的情况。ZFS 的写时复制和端到端数据检验则可以避
免发生这些情况。
其他特性比如管理方便(不必在一开始确定文件系统的容量)、快照、压缩、增量复制等
等其实都是其次了。
--
[m[1;34m※ 来源:・水木社区 newsmth.net・[FROM: 24.5.244.*][m