首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

最后一代文件系统-ZFS

ZFS 在创建之初,就被设计为最后一代文件系统。在大多数文件系统都是 64 位的时候,ZFS 创建者决定直接跳到 128 位。这意味着 ZFS “提供了 32 位或 64 位系统容量的 160 亿倍”。

当谈到 ZFS 功能和安装时,其实说的是 OpenZFS。自从 Oracle 停止对 OpenSolaris 更新代码之后[1],ZFS(由 Oracle 开发)和 OpenZFS 遵循了不同的路径

ZFS 是一个先进的文件系统。因此,它有一些有趣的特性。比如:

存储池

写时拷贝

快照

数据完整性验证和自动修复

RAID-Z

最大单个文件大小为 16 EB(1 EB = 1024 PB)

最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储

如果想开箱即用地使用 ZFS,则需要安装 FreeBSD或使用 illumos

内核的操作系统。illumos是 OpenSolaris 内核的一个分支。事实上,对 ZFS 的支持是一些有经验的 Linux 用户选择 BSD的主要原因之一。

如果想在 Linux 上试用 ZFS,可以将其用作存储文件系统。最近,Ubuntu 19.10 引入了在根目录上开箱即用安装 ZFS 的功能

以下是ZFS支持者认为ZFS具备的十大最佳功能特性:

1、元数据校验和确保数据完整性

数据完整性在ZFS中具有非常高的重要性,也是很多ZFS功能的前决条件。

ZFS文件系统采用了256位校验和,当向磁盘写入数据的时候,校验和就会被作为元数据与它相关的数据分开保存。与普通的磁盘块校验和不同的是,这种校验和可以检测出错位写、误读取和误写入、DMA奇偶错误、驱动器bug、意外过量写入以及常见的物理存储的衰减(bit rot)。

2、写时才拷贝

ZFS文件系统是使用多项技术来确保数据在磁盘上的连续性,其中就包括写时才拷贝(Copy on Write),也就是当数据发生变更的时候它并不会过量写入----它总是在指针指向变更数据之前被写入到一个新块和校验和中。旧的数据可能被保存下来,在发生变更的过程中创建文件系统的快照。利用ZFS的文件写入是交易型的操作----要么将所有数据写入到磁盘,要么什么都不写入。

3、利用Time Slider的数据快照

OpenSolaris的最新版本展示了ZFS利用TimeSlider小型图形应用所实现的强大快照功能。可以通过配置设定对ZFS文件系统进行常规的快照操作----每15分钟,或者每小时等等。这种快照占用容量很小,而且很高效,因为它只保存与之前快照的变量。

TimeSlider提供了对文件系统(或者一个家庭文件夹)的查看功能,而且有一个可以沿着时间线返回到更早快照时间的滑块。当这些完成之后就会呈现特定快照时间的文件系统或者文件夹内容。如果想要恢复一份被错误过量写入的文件,或者在升级失败之后还原系统的话,你只需要将滑块滚回合适的快照时间就可以了。

4、数据存储池

ZFS利用可用的存储驱动器将他们聚合成为一个被称为zpool的资源池。这个资源池可以使用脚本、镜像或者某种RAID针对容量、I/O性能或者冗余性进行优化。如果需要更多存储的话,只需要向zpool中添加更多存储就行了----ZFS检测到新添加的容量并开始自动使用、均衡I/O和最大限度提高吞吐量。

5、RAIDZ和RAIDZ2

众所周知,RAID 5有一个重大缺陷----RAID5 Write Hole。RAID 5在写数据的时候,是分为两步的,首先将数据写到磁盘阵列上,然后将该stripe上数据的校验码记录到阵列上,如果在刚写完数据的时候,系统断电,那么该数据对应的校验码就没有机会再恢复了。如果接下来磁盘发生故障,RAID重建流程就会出现错误数据。唯一的解决方案就是,如果整个stripe发生过量写入,那么就会生成一个正确的奇偶块。

RAIDZ通过使用一个不同宽度的条带来解决这个问题,这样每次写入实际上是一个完全的条带写入。再加上ZFS的写入时才拷贝特性,这些就完全消除了RAID 5的Write Hole缺陷。RAIDZ2也是同理,但是可以使用双奇偶允许阵列中丢失两个磁盘。

安装一个RAIDZ(或者RAIDZ2)阵列非常简单,只需要发布一条命令。

6、固态盘混合存储池

存储池中可以通过添加高性能固态盘变成一个混合存储池。当这些固态盘被作为高性能缓存磁盘的时候,ZFS就会用其保留频繁访问数据以提高性能。另外ZFS还采用了L2 ARC技术来写入那些不需要立即保存的数据,在时间和资源允许的情况下,这些数据会被慢慢迁移到传统的更永久性的硬盘驱动器中。

7、容量

ZFS是128位的文件系统,也就是说理论上它可以保存256千万亿ZB(1ZB=10亿TB)。实际中,它的容量远远超过所需范围,至少就可预见的未来来说。

8、数据清理

ZFS可以清理一个存储池中的所有数据,根据相应的校验和检查每个数据来验证其完整性,检测任何潜在的数据损毁,修复可能存在的任何错误。

当数据被冗余保存起来的时候----保存在镜像或者RAID型阵列中----它可以修复检测出任何潜在的损坏数据,而且无需管理员的干预。因为数据损坏是被记录下来的,所以ZFS可以通过导致数据不恰当保存在硬盘中的内存模块(或者其他硬件)检测出来。

数据清理的I/O优先级是很低的,因为这个流程对系统性能的影响非常小。

9、简单且有效的管理

使用ZFS命令,就相当于你使用了一种简短而有效的命令来管理系统。例如,一个5磁盘RAIDZ阵列可以设置采用单命令:

zpool create poolname raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0

ZFS更侧重于存储池的管理,在ZFS里面叫做zpool。ZFS会将若干存储设备的存储空间集中在一个池内,然后再分出相应的虚拟设备对上层的操作系统显示为磁盘或者卷。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Om33zZyxrUX-50ZuimrOC78Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券