Nas数据存储:ZFS
- 数据存储
- 5天前
- 25热度
- 0评论
1、什么是zfs文件系统
ZFS文件系统的英文名称为Zettabyte File System,也叫动态文件系统(Dynamic File System),是第一个128位文件系统。最初是由Sun公司为Solaris 10操作系统开发的文件系统。作为OpenSolaris开源计划的一部分,ZFS于2005年11月发布,被Sun称为是终极文件系统,经历了 10 年的活跃开发。而最新的开发将全面开放,并重新命名为 OpenZFS。
ZFS具有三个主要涉及目标
- 数据完整性
所有数据都包括数据的校验和。写入数据时,将计算并写入校验和。以后再读回该数据时,将再次计算校验和。如果校验和不匹配,则检测到数据错误。 当数据冗余可用时,ZFS将尝试自动更正错误。 - 池存储
将物理存储设备添加到池中,并从该共享池中分配存储空间。所有文件系统都可以使用空间,可以通过向池中添加新的存储设备来增加空间。 - 性能
多种缓存机制可提高性能。ARC是基于内存的高级读取缓存。可以在L2ARC中添加基于磁盘的第二级读取缓存 ,并在ZIL中提供基于磁盘的同步写入缓存 。
ZFS与其他文件系统有什么不同?
ZFS可以基于多块磁盘上创建文件系统。
- 传统文件系统一次只能在单个磁盘上创建。如果有两个磁盘,则必须创建两个单独的文件系统。在传统的硬件RAID中在配置中,通过为操作系统提供由多个物理磁盘提供的空间组成的单个逻辑磁盘,可以避免此问题,操作系统在其上面放置了文件系统。即使在像GEOM提供的软件RAID解决方案 的情况下, 位于RAID转换之上的UFS文件系统也认为它正在处理单个设备。
- ZFS的卷管理器和文件系统的组合解决了这个问题,并允许创建许多共享可用存储池的文件系统。ZFS的最大优势之一对磁盘物理布局的了解,当将其他磁盘添加到池中时,现有文件系统可以自动增长。然后,此新空间可用于所有文件系统。
2、ZFS文件系统的特性(优点)
- 存储池
- 写时拷贝 copy-on-write
- 快照
- 自动修复数据
- RAID-Z
- 最大单个文件大小为 16 EB(1 EB = 1024 PB)
- 最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储
2.1、存储池
ZFS结合了文件系统和卷管理器特性,与其他文件系统不同,ZFS可以创建跨越一系列硬盘或池的文件系统,还可以通过添加硬盘来增大池的存储容量,ZFS可以进行分区和格式化。
2.2、写时拷贝
与传统文件系统不同,当在ZFS上覆盖数据时,新数据将被写入不同的块,而不是原地覆盖,仅在完成写入后,才更新元数据以指向新位置,如果发生大体量写入发送断电或系统崩溃,文件的整个原始内容仍然可用,并且不完整的写入将被丢弃,这也意味这意外关闭后,ZFS不需要运行fsck来检查和修复文件系统。
2.3、快照
写时复制使得 ZFS 有了另一个特性: 快照(snapshots)。ZFS 使用快照来跟踪文件系统中的更改。 快照 包含文件系统的原始版本(文件系统的一个只读版本),实时文件系统则包含了自从快照创建之后的任何更改。没有使用额外的空间。因为新数据将会写到实时文件系统新分配的块上。如果一个文件被删除了,那么它在快照中的索引也会被删除。所以,快照主要是用来跟踪文件的更改,而不是文件的增加和创建。
快照可以挂载成只读的,以用来恢复一个文件的过去版本。实时文件系统也可以回滚到之前的快照。回滚之后,自从快照创建之后的所有更改将会丢失。
2.4、自动修复数据
当向 ZFS 写入新数据时,会创建该数据的校验和允许将文件系统分叉为新的数据集。在读取数据的时候,使用校验和进行验证。如果前后校验和不匹配,那么就说明检测到了错误,然后,ZFS 会尝试从任何的冗余(RAID-Z或镜像)中恢复数据,验证命令为scrub。
当然,它不是万能的,修复小错误没问题。
2.5、重复数据删除
checksums的使用使得检测重复数据成为可能,通过重复数据删除,可增加现有相同块的参考计数,从而节省存储空间,为了检测重复块,重复数据删除表(DDT)被保留在内存中,该表包含了唯一的校验和,写入数据时,将计数校验和并将其与表进行比较,如果匹配,就使用该块,但DDT会消耗内存,一般1TB重复数据删除需要5-6GB的内存,影响性能,所以可以使用L2ARC存储DDT,从而提供中间地带,还有不考虑内存和磁盘的话,可以考虑压缩来解决空格键,从而无需额外的内存。
2.6、RAIDZ
ZFS不需要任何额外软件或硬件就可以处理RAID,这个就是RAID-Z,RAID-Z是RAID-5的一个变种,不过它克服了RAID-5的写漏洞。也就是说你在写文件过程中,突然断电了。要么写成功,要么什么都没做,不会出现文件损坏的情况。
RAID-Z使用了可变宽的RAID条带技术,因此所有的写都是全条带写入。
RAID-Z有三个级别RAID-Z1、RAID-Z2、RAID-Z3。
- RAIDZ1:与RAID5类似,一重机构校验,至少需要三块磁盘;
- RAIDZ2:与RAID6类似,双重奇偶校验,至少需要四个磁盘;
- RAIDZ3:ZFS特有的,三重奇偶校验,至少需要5个磁盘;
RAIDZ的奇偶校验代价比较昂贵,为了获得更好的阵列性能,对与RAIDZ-1来说,3、5、9个磁盘比较合适,4、6、10、18对于RAIDZ-2比较合适,而RAIDZ-3则应该是5、7、11、19个磁盘最佳。
3、ZFS的需求(缺点)
3.1、需要较大的ECC内存
为了保障计算一致性,需要ECC内存。
ZFS使用主机内存做热数据缓存,可大可小,小了数据命中率低,数据从磁盘读取,慢一点而已。推荐配置为1G/1T配置内存,参数可以配置。
如果开启dedup的话,就需要较大的内存。
3.2、不能单盘恢复数据。
这个很关键,万一出点意外,恢复数据比较麻烦,单独一个硬盘拿下来挂载在操作系统上无法读取数据,因为硬盘上存储的是条带数据(数据片段)。这个给恢复(抢救)数据带来了难度和成本。
3.3、扩容困难
不能增加硬盘个数(你需要一开始就应该想好你需要几盘位,然后用小盘占坑)。如果你已经有3块2T的硬盘组成raidz,扩容有三个方案:
- 新加3块2T,组一个新的raidz,然后把两个raidz合并起来……问题是,家用机哪有那么些个sata口子呢?
- 买3块3T盘,一个一个的替换原来的2T盘。每次替换一个,都要等它重新分配完数据再替换下一个。
- 把原先的RAIDZ数据全拷出来,阵列删掉,加硬盘,再新建一个RAIDZ,再把数据再拷回去……问题是,你哪有那么大的临时存储(移动硬盘?)
3.4、ZFS需要直接控制磁盘
如果与RAID控制器一起使用,要将控制器置于HBA模式
3.5、RAID Level不能随意切换
RAID Z1无法简单变成RAID Z2 Z3等。这个倒是关系不大,反正传统的raid也没法切换