code学习

ZFS文件系统及Freenas介绍

一、简介

  1、什么是zfs文件系统

    ZFS文件系统的英文名称为Zettabyte File System,也叫动态文件系统(Dynamic File System),是第一个128位文件系统。最初是由Sun公司为Solaris 10操作系统开发的文件系统。作为OpenSolaris开源计划的一部分,ZFS于2005年11月发布,被Sun称为是终极文件系统,经历了 10 年的活跃开发。而最新的开发将全面开放,并重新命名为 OpenZFS。

  2、ZFS具有三个主要涉及目标

    数据完整性:所有数据都包括数据的校验和。写入数据时,将计算并写入校验和。以后再读回该数据时,将再次计算校验和。如果校验和不匹配,则检测到数据错误。 当数据冗余可用时,ZFS将尝试自动更正错误。

    池存储:将物理存储设备添加到池中,并从该共享池中分配存储空间。所有文件系统都可以使用空间,可以通过向池中添加新的存储设备来增加空间。

    性能:多种缓存机制可提高性能。 ARC是基于内存的高级读取缓存。可以在L2ARC中添加基于磁盘的第二级读取缓存 ,并在ZIL中提供基于磁盘的同步写入缓存 。

  3、ZFS与其他文件系统有什么不同那?

    ZFS与以前的任何文件系统都有显着不同,因为ZFS不仅仅是文件系统。将传统上独立的卷管理器和文件系统角色结合在一起,为ZFS提供了独特的优势。文件系统现在知道了磁盘的基础结构。传统文件系统一次只能在单个磁盘上创建。如果有两个磁盘,则必须创建两个单独的文件系统。在传统的硬件RAID中在配置中,通过为操作系统提供由多个物理磁盘提供的空间组成的单个逻辑磁盘,可以避免此问题,操作系统在其上面放置了文件系统。即使在像GEOM提供的软件RAID解决方案 的情况下, 位于RAID转换之上的UFS文件系统也认为它正在处理单个设备。 ZFS的卷管理器和文件系统的组合解决了这个问题,并允许创建许多共享可用存储池的文件系统。ZFS的最大优势之一对磁盘物理布局的了解是,当将其他磁盘添加到池中时,现有文件系统可以自动增长。然后,此新空间可用于所有文件系统。 ZFS还具有可应用于每个文件系统的许多不同属性,与创建单个文件系统相比,创建多个不同文件系统和数据集具有许多优势。  

二、ZFS特性术语

  1、ZFS特性概况

      • 存储池
      • 写时拷贝 copy-on-write
      • 快照
      • 数据完整性验证和自动修复
      • RAID-Z
      • 最大单个文件大小为 16 EB(1 EB = 1024 PB)
      • 最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储

  2、存储池

    ZFS结合了文件系统和卷管理器特性,与其他文件系统不同,ZFS可以创建跨越一系列硬盘或池的文件系统,还可以通过添加硬盘来增大池的存储容量,ZFS可以进行分区和格式化

    一个池由一个或多个vdev组成

ZFS文件系统及Freenas介绍

   3、写时复制技术

    与传统文件系统不同,当在ZFS上覆盖数据室,新数据将被写入不同的块,而不是原地覆盖,仅在完成写入后,才更新元数据以指向新位置,如果发生大体量写入发送断电或系统崩溃,文件的整个原始内容仍然可用,并且不完整的写入将被丢弃,这也意味这意外关闭后,ZFS不需要运行fsck来检查和修复文件系统。

  4、快照

    写时复制使得 ZFS 有了另一个特性: 快照(snapshots)。ZFS 使用快照来跟踪文件系统中的更改。 快照 包含文件系统的原始版本(文件系统的一个只读版本),实时文件系统则包含了自从快照创建之后的任何更改。没有使用额外的空间。因为新数据将会写到实时文件系统新分配的块上。如果一个文件被删除了,那么它在快照中的索引也会被删除。所以,快照主要是用来跟踪文件的更改,而不是文件的增加和创建。

快照可以挂载成只读的,以用来恢复一个文件的过去版本。实时文件系统也可以回滚到之前的快照。回滚之后,自从快照创建之后的所有更改将会丢失。

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

    当向 ZFS 写入新数据时,会创建该数据的校验和允许将文件系统分叉为新的数据集。在读取数据的时候,使用校验和进行验证。如果前后校验和不匹配,那么就说明检测到了错误,然后,ZFS 会尝试从任何的冗余(RAID-Z或镜像)中恢复数据,验证命令为scrub。

    6、重复数据删除

    checksums的使用使得检测重复数据成为可能,通过重复数据删除,可增加现有相同块的参考计数,从而节省存储空间,为了检测重复块,重复数据删除表(DDT)被保留在内存中,该表包含了唯一的校验和,写入数据时,将计数校验和并将其与表进行比较,如果匹配,就使用该块,但DDT会消耗内存,一般1TB重复数据删除需要5-6GB的内存,影响性能,所以可以使用L2ARC存储DDT,从而提供中间地带,还有不考虑内存和磁盘的话,可以考虑压缩来解决空格键,从而无需额外的内存。

  7、数据集

    ZFS文件系统,卷,快照或克隆的通用术语,每个数据据都有一个格式唯一的名称poolname/path@snapshot 

  8、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个磁盘;

 三、freenas介绍

  1、了解freenas

    freenas是一种免费的开源网络存储(NAS)软件设备,这意味着您可以使用freenas通过基于文件的共享协议共享数据

    支持SMB/CIFS(windows)、NFS、AFP(apple文件共享)、FTP、iscsi(块共享)

    freenas使用了ZFS(openZFS)文件来存储,管理和保护数据,ZFS提供了高级功能,例如快照可以保留文件的旧版本,增量远程备份以使数据安全地保存在另一台设备上而无需进行大量文件传输,以及智能压缩等

    freenas是使用高度安全的freeBSD操作系统,并遵循开发中的安全最佳实践

    freenas支持256位加密以防止在从系统中物理删除驱动器时读取驱动器

  2、freenas卷结构

    那么在创建存储池时,可以指定存储池结构(volume layout)也叫卷结构,如下可以选择几种结构

ZFS文件系统及Freenas介绍

     stripe:与RAID0类似,磁盘条带,至少需要一个磁盘;

     mirror:与RAID1类似,磁盘镜像,至少需要两个磁盘;

     RAIDZ1:与RAID5类似,一重机构校验,至少需要三块磁盘;

     RAIDZ2:与RAID6类似,双重奇偶校验,至少需要四个磁盘;

     RAIDZ3:ZFS特有的,三重奇偶校验,至少需要5个磁盘;

     log(ZIL):高速写缓存设备,至少需要一个专用设备,建议使用具有停电保护的SSD;

     Cache(L2ARC):高速读缓存设备,需要至少一个专用设备,建议使用具有停电保护的SSD;

     Spare:热备磁盘,当正在使用的磁盘发送故障后,Spare磁盘将马上代替此故障盘。

  2、性能对比

    strpe>mirror

    strpe>RAIDZ1>RAIDZ2>RAIDZ3

  3、数据可靠性

    mirror>stripe

    RAIDZ3>RAIDZ2>RAIDZ1>Stripe

  4、详细说明

    Stripe是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法。简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法。这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。但是,这种存储池结构没有数据冗余,一旦Stripe中的任意一块磁盘出现问题,那么Stripe中存储的所有数据都随风而去了。

    Mirror是冗余的一种类型,通过磁盘数据镜像实现数据冗余,ZFS对镜像中的磁盘数量没有限制,在Mirror中的磁盘上存储互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此Mirror可以提高读取性能。这是存储池结构中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,此时可以替换失效磁盘进行数据恢复。

    RAIDZ是ZFS提供的数据冗余方式,同时解决硬件RAID的一些固有限制,例如在硬件控制器提供警报之前随时间写入的写入漏洞和损坏数据。ZFS提供三种冗余级别,称为RAIDZ*,其中RAIDZ之后的数字表示每个vdev可丢失多少个磁盘而不丢失数据。下面是一些关于RAIDZ的官方建议:

    1. RAIDZ1拥有最大的磁盘空间,当数据以大块(128K或更多)写入和读取时,性能会很好。
    2. 与RAIDZ1相比,RAIDZ2提供更好的数据可用性和更好的平均数据丢失时间(MTTDL),而RAIDZ3更比RADIZ2安全。更多的校验镜像消耗更多的磁盘空间,但通常小型随机读取会更好。为了获得更好的性能,镜像强烈支持任何RAIDZ,特别是对于大容量,不可缓存的随机读取负载。
    3. 不建议每个vdev使用多于12个磁盘。每个vdev的建议磁盘数量介于3和9之间。如果有更多磁盘,请使用多个vdevs。
    4. 一些较早的ZFS文档建议每种类型的RAIDZ都需要一定数量的磁盘,以实现最佳性能。
    5. ZFS专为商用磁盘而设计,因此不需要RAID控制器。虽然ZFS也可以与RAID控制器一起使用,但建议将控制器置于HBA模式,以便ZFS完全控制磁盘。
    6. 当存储池容量达到90%时,ZFS会从性能切换到基于空间的优化,这对性能有很大的影响。为了获得最大写入性能并防止驱动器更换出现问题,请在池达到80%之前添加更多容量。如果在存储池中提供了iSCSI服务,建议不要让池的容量超过50%以防止碎片问题。
    7. 考虑每个vdev使用的磁盘数时,请考虑磁盘的大小以及重新同步所需的时间,即重建vdev的过程。vdev的大小越大,重新同步时间越长。在更换RAIDZ中的磁盘时,在重新同步过程完成之前,另一个磁盘可能会失效。如果故障磁盘的数量超过RAIDZ类型的每个vdev所允许的数量,则池中的数据将丢失。所以,RAIDZ1不推荐用于大小超过1TB的驱动器。
    8. 建议在创建vdev时使用相同大小的驱动器。尽管ZFS可以使用不同大小的磁盘创建vdev,但其容量将受到最小磁盘大小的限制。

引用参考:

https://www.xiangzhiren.com/archives/283

https://www.ixsystems.com/documentation/freenas/11.2-U6/intro.html

https://www.sohu.com/a/255432210_100034897

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/zfs.html

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/11646542.html

上一篇: qqq
下一篇: restController