Solaris 10:使用ZFS的十条理由( 二 )


还有一种潜在威胁 数据的可能是来自于硬件设备的问题 , 比如磁 盘 , RAID卡的硬件问题或者驱动bug 。现有文件系统通常遇到这个问题 , 往往只是简单的把错误数据直接交给上层应用 , 通常我们把这个问题称作Silent Data Corruption 。而在ZFS中 , 对所有数据不管是用户数据还是文件系统自身的metadata数 据都进行256位的Checksum(校 验) , 当ZFS在提交数据时会进行校验 , 彻底杜绝这种Silent Data Corruption情况 。
5.提供优异性能和扩展性
和传统File SystemVolume ManagerStorage架构不同 , ZFS则是直接基于存储设备提供所有的功能 , 因此有自己独有的创新特性 , 性能自然非比寻常 。
Dynamic Striping vs. Static Striping
由于ZFS是基于COW和一个全局动态的ZFS Pool , 任何一次写 操作 , 都是对一块新数据块(Block)的一次写操作 。ZFS从ZFS Pool中动态挑选出一个最优的设备 , 并且以一个transaction(事 务)线性写入 , 充分有效地利用了现有设备的带宽 , 我们把这个特性称为Dynamic Striping 。而相对应的Static Striping则是传统文件系统所使用的方式 , Static Striping需要管理员预先对这组Stripe进行正确地计算人为 设置 , 而且如果加入新的设备则需要再次人为的计算和设置 , 更为严重的是如果人为计算错误 , 则会直接影响系统的性能 。而在使用Dynamic Striping这种特性之后 , 我们根本不需要人为介入 , ZFS会自动调整 , 智能的为你 提供最佳的设备 , 最快的操作方式 。
支持多种大小的数据块(Multiple Block Size)
ZFS支持多种大小的数据块定义 , 从512字节到1M字节 。和传统文件系统往往都是固定大小数据块不同 , ZFS则是可以动态的根据不同 大小的文件进行计算 , 动态的选择最佳的数据块 。
因为不同大小数据 块 , 直接影响到实际使用硬盘容量和读取速度 。如果使用较小的数据块 , 存储文件所导致的碎片则较少 , 读写小文件更快一些 , 但是会导致需要创建更多的metadata , 读写大文件则会更费时 。如果使用较大的数据块 , 使用的metadata较少 , 更利于读写大文件 , 但是会导致更多的碎片 。ZFS根据实际调查现有文件使 用的情况 , 分析出一个选择数据块大小的算法 , 动态的根据实际文件大小确定最佳的数据块 。所以ZFS是 非常智能的 , 在不需要系统管理员介入 , 就可以得到一个自我调优的结果 。当然ZFS也支持用户对单个文件或者整个文件系统 所使用的数据块大小的自定义设置 。
智能预读取(Intelligent Prefetch)
多数的操作系统都 有这种将数据预先读取的功能 , 而ZFS则是建立在文件系统上直接提供的一种更加智能的数据预读取功能 。它不仅可以智能地识别出多种读取模式 , 进 行提前读取数据 , 而且可以对每个读取数据流进行这种预读取智能识别 , 这个对许多流媒体提供者来说是件非常好的事情 。
在扩展性上 , 和现有文件系统多是基于一个受限的静态模型不同 , ZFS是采用ZFS Pool这个动态概念 , 它的metadata也是动态 , 并且读写操作都是可并行的 , 并且具有优先级概念 , 所以即使在大数据量 , 多设备的情况下仍可以保证性能的线性增长 。
6.自我修复功能
ZFS Mirror 和 RAID-Z
传统的硬盘Mirror及RAID 4 , RAID 5阵列方式都会遇到前面提到过的问题:Silent Data Corruption 。如果发生了某块硬盘物理问题导致数据错误 , 现有的Mirror , 包括RAID 4 , RAID 5阵列会默默地把这个错误数据提交给上层应用 。如果这个错误发生在Metadata中 , 则会直接导致系统的Panic 。而且还有一种更为严重的情况是:在RAID 4和RAID 5阵列中 , 如果系统正在计算Parity数值 , 并再次写入新数据和新Parity值的时候发生断电 , 那么整个阵列的所有存储的数据都毫无意义了 。

推荐阅读