ZFS文件系统介绍 - 基础

ZFS是SUN为Solaris开发的文件系统,号称史上最后一个文件系统。

linux系统上已经有原生ZFS移植zfsonlinux,其安装见”Debian Wheezy AMD64编译安装原生ZFS文件系统

linux虽然有btrfs文件系统可望与ZFS比肩,但btrfs是由oracle主导的,现在oracle已将ZFS纳入囊中,对btrfs会不会有所保留就不得而知了。

ZFS集文件系统、卷管理、RAID功能于一身,能提供超大容量的存储空间,几乎可以视为没有存储空间限制。ZFS分为存储池和文件系统两部分,所有的ZFS文件系统都驻留在存储池之中,zpool命令用于管理存储池,zfs命令用于管理zfs文件系统。

ZFS 是事务性文件系统,这意味着文件系统状态在磁盘上始终是一致的。文件系统绝对不会因意外断电或系统崩溃而被损坏。尽管最近写入的数据片段可能丢失,但是文件系统本身将始终是一致的。ZFS不需要fsck。

ZFS存储池最新版本为33,ZFS文件系统最新版本为5。当前zfsonlinux实现的池版本为28,文件系统版本为5。

存储池

传统的文件系统一般存在于单独的一个物理设备或者由卷管理器如lvm管理的逻辑卷之上。ZFS与之不同,ZFS文件系统建立于虚拟的存储池之上。存储池可以由整块物理磁盘、磁盘分区或者文件组成,而且可以动态增加磁盘。ZFS支持热备组件(hot spare),可以为存储池提供一个或多个备用磁盘,当池内的磁盘出现故障时,ZFS可以使用热备件自动替换出现故障的磁盘。ZFS存储池支持动态扩容,文件不用离线即可更换更大容量的磁盘。还可以为存储池提供高速缓存设备,比如使用SSD磁盘来作为存储池的缓存设备来提高IO性能。ZFS也支持单独的日志设备。

ZFS文件系统可以存取到所有设备组合起来的全部容量。

文件系统

管理ZFS文件系统类似于管理一个普通的目录。

ZFS 文件系统构建于存储池上。文件系统可以动态创建和销毁,而不需要分配或格式化任何底层磁盘空间。

条带与冗余

ZFS支持镜像和RAID-Z配置,RAID-Z又分为三种:raidz(raidz1),raidz2和raidz3。镜像mirror与传统的RAID-1类似,提供最高的冗余性,但存储容量会大打折扣。RAID-Z则在冗余、性能和存储容量之间达到平衡。单奇偶校验RAID-Z (raidz 或 raidz1) 与 RAID-5 类似,双奇偶校验 RAID-Z (raidz2) 与RAID-6类似,三奇偶校验RAID-Z(raidz3)没有传统的RAID对应物。

每个存储池都包含一个或多个虚拟设备(virtual device),简称vdev。虚拟设备是存储池的内部表示形式,用于描述物理存储器的布局以及存储池的故障特征。因此,虚拟设备表示用于创建存储池的磁盘设备或文件。一个池可以在配置的顶层具有任意数目的虚拟设备,称为顶层vdev。ZFS以条带形式将数据动态分布在所有顶层虚拟设备(vdev)上。ZFS的条带类似于传统的RAID-0,但其条带宽度是动态变化的。

快照和克隆

快照是文件系统或卷的只读副本。快照采取写时复制COW技术,在最初创建快照时并不占用额外的存储空间,只是一些指针操作,快照与原始文件系统使用相同的数据块,但当原始的文件系统发生变化时,快照继续引用旧数据块,而原始文件系统会使用新的数据块,因此快照会阻止存储空间的释放,比如原始文件系统删除了一个文件,而该文件存在于快照中,那么此文件占据的空间在快照删除之前不能被重新利用。ZFS文件系统可以回滚到之前创建的快照,具有类似时间机器的效果。

ZFS快照可以发送到远程系统,远程系统可以接收快照流并在本地生成一个新的文件系统,这个特性可以用来做数据备份。

克隆是可读写的文件系统或卷的副本,克隆只能从快照创建。克隆快照时,会在克隆和快照之间建立隐式相关性。即使克隆是在文件系统分层结构中的其他位置创建的,但只要克隆存在,就无法销毁始快照。克隆最初与原始文件系统共享相同的数据块,随着原始文件系统或克隆的变化,会创建新的块,但是未变化的数据块仍然在二者之间共享。

共享ZFS系统

ZFS仍然是单机文件系统,不能直接用于集群环境。如需要在不同系统之间共享数据,可采用NFS或SAMBA共享方式,ZFS内置支持这两种共享方式。