什么是 ZFS?
ZFS 的命名来源发想于"Zettabyte File System"的首字母缩写。但 ZFS 本身并不具备任何的缩写意涵,主要阐述做为一个具备高扩充容量文件系统且还有支持许多延伸功能的一个产品。的确,将 ZFS 称为文件系统有点名不副实,因为它在传统意义上不仅仅是个文件系统。ZFS 将逻辑卷管理器的概念与功能丰富的和可大规模扩展的文件系统结合起来。
ZFS 是由 Sun 公司的 Jeff Bonwick 和 Mattew Ahrens 所领导的一支团队所设计和开发的。它的发展始于 2001 年, 并于 2004 年正式宣布。在 2005 年它被集成了入 Solaris 的主要树干并且作为 OpenSolaris 的一部分发布。它具有许多非常好的功能, 使其适合企业级服务器。特别是, 它旨在保护数据完整性, 并对快照、复制、压缩和重复消除等方面提供了内置支持。
Azure 存储 + ZFS
Azure 存储服务会自动复制你的数据,帮助防范意外硬件故障,确保数据随时可用。默认一个区域中保留 3 个副本。地域冗余选项可在数百公里外的区域额外创建 3 个副本,进一步提高可靠性并实现灾难恢复。地域冗余备份可读访问选项,可将数据可用性进一步提高至 99.99%。
ZFS 本身也提供众多数据保护的方案,这里有了 Azure 存储,您也不需要再担心这一点了。虽然数据保护提供了在故障时重新生成数据的能力,但是这并不涉及处于第一位的数据的有效性。ZFS 通过为写入的每个块的元数据生成 32 位校验和(或 256 位散列)解决了此问题。并且 ZFS 的可变快大小的功能可帮助您更好地来压缩数据。
那咱这就拿上个月介绍地网盘做个简单案例吧。
简单案例
勤快的组员们想着好东西要分享,把使用 Seafile 搭建私人网盘做成了 Azure 资源管理器模板方便一键部署 – ubuntu-netdisk-setup。 该模板中使用 Ubuntu 16.04 虚拟机并配备 ZFS 作为数据盘来保证数据的完整性。不同于传统文件系统需要驻留于单独设备或者需要一个卷管理系统去使用一个以上的设备,ZFS 创建在虚拟的,被称为“zpools”的存储池之上。每个存储池可以由若干虚拟设备(virtual devices,vdevs)组成。
# Create seafile-data with the help of ZFS
# -------------------------------------------
zpool create -f ${ZPOOL_NAME} /dev/sdc
zpool set cachefile=/etc/zfs/zpool.cache ${ZPOOL_NAME}
zfs create ${ZPOOL_NAME}/${ZFS_DATASET}
zfs set compression=gzip ${ZPOOL_NAME}/${ZFS_DATASET}
详情参见 github 上相应的 Azure 资源管理器所调用的脚本。
高级功能
为了提高文件系统的读写性能,ZFS 提供了两种高效的机制:缓存 L2ARC(Level 2 Adjustable Replacement Cache)和日志 ZIL (ZFS intent log)。在物理机上,我们可以将少量的高速磁盘(如 SSD)添加到存储池中,同时使用普通磁盘作为主要存储介质,从而以较低的价格达到接近完全使用高速磁盘的效果。在 Azure 环境中,我们也可以采用类似的方法,将 VM 上的临时磁盘设置为 L2ARC(重启后清空也无影响),创建一块较小的 SSD 设备作为 ZIL,而将主要的存储设备设置成普通磁盘,这样配置的性能还是很不错的。
更好的阅读体验,可以
点击这里。