ZFS

维基百科,自由的百科全书
跳转至: 导航搜索
ZFS
开发者 Sun Microsystems
全称 ZFS
发布 2005年11月 (OpenSolaris)
结构
目录内容 可扩展哈希表
限制
最大文件尺寸 264字节(16 Exabytes)
最大文件数量 248
最长文件名 255字节
最大卷容量 264字节(16 exabytes)
功能
岔流 是(称作扩展文件属性
属性 POSIX
文件系统权限 POSIX、NFSv4 ACLs
透明压缩
透明加密
操作系统支持 见下

ZFS源自于Sun MicrosystemsSolaris操作系统开发的文件系统。ZFS是一个具有高存储容量、文件系统与卷管理概念整合、崭新的磁盘逻辑结构的轻量级文件系统,同时也是一个便捷的存储池管理系统。ZFS是一个使用通用开发与散布许可证授权的开源项目。

历史[编辑]

ZFS的设计与开发由Sun公司的Jeff Bonwick所领导的一支团队完成。最早宣布于2004年9月14日,[1]於2005年10月31日并入了Solaris开发的主干源代码。[2]并在2005年11月16日作为OpenSolaris build 27的一部分发布。Sun在OpenSolaris社区开张1年后的2006年六月,将ZFS整合进了Solaris 10 6/06版本更新。[3]

ZFS的命名來源發想於"Zettabyte File System"的首字母缩写。[4] 但 ZFS 本身並不具備任何的縮寫意涵,只是作者想闡述做為一個具備高擴充容量檔案系統且還有支援許多延伸功能的一個產品。

存储池[编辑]

不同于传统文件系统需要驻留于单独设备或者需要一个卷管理系统去使用一个以上的设备,ZFS建立在虚拟的,被称为“zpools”的存储池之上(存储池最早在AdvFS實現[5],並且加到後來的Btrfs)。每个存储池由若干虚拟设备(virtual devices,vdevs)组成。这些虚拟设备可以是原始磁盘,也可能是一个RAID1镜像设备,或是非标准RAID等级的多磁盘组。于是zpool上的文件系统可以使用这些虚拟设备的总存储容量。

可以使用磁盘限额以及设置磁盘预留空间来限制存储池中单个文件系统所占用的空间。

容量[编辑]

ZFS是一个128位的文件系统,这意味着它能存储1800亿亿(18.4 × 1018)倍于当前64位文件系统的数据。ZFS的设计如此超前以至于这个极限就当前现实实际可能永远无法遇到。项目领导Bonwick曾说:“要填满一个128位的文件系统,将耗尽地球上所有存储设备。除非你拥有煮沸整个海洋的能量,不然你不可能将其填满。(Populating 128-bit file systems would exceed the quantum limits of earth-based storage. You couldn't fill a 128-bit storage pool without boiling the oceans.)”[1]

以下是ZFS的一些理论极限:

  • 248—任意文件系统的快照数量(2 × 1014
  • 248—任何单独文件系统的文件数(2 × 1014
  • 16 exabytes (264 byte)—文件系统最大尺寸
  • 16 exabytes (264 byte)—最大单个文件尺寸
  • 16 exabytes (264 byte)—最大属性大小
  • 128 Zettabytes (278 byte)—最大zpool大小
  • 256—单个文件的属性数量(受ZFS文件数量的约束,实际为248
  • 256—单个目录的文件数(受ZFS文件数量的约束,实际为248
  • 264—单一zpool的设备数
  • 264—系统的zpools数量
  • 264—单一zpool的文件系统数量

作为对这些数字的感性认识,假设每秒钟创建1,000个新文件,达到ZFS文件数极限需要大约9,000年。

在辩解填满ZFS与煮沸海洋的关系时,Bonwick写到:

尽管我们都希望摩尔定律永远延续,但是量子力学给定了任何物理设备上计算速率(computation rate)与信息量的理论极限。举例而言,一个质量为1公斤,体积为1的物体,每秒至多在1031信息 上进行1051次运算[6]。一个完全的128位存储池将包含2128个块= 2137字节= 2140位;应此,保存这些数据位至少需要(2140位) / (1031位/公斤) = 1360亿公斤的物质。

写时拷贝事务模型[编辑]

ZFS使用一种写时拷贝事务模型技术。所有文件系统中的块指针都包括256位的能在读时被重新校验的关于目标块的校验和。含有活动数据的块从来不被覆盖;而是分配一个新块,并把修改过的数据写在新块上。所有与该块相关的元数据块都被重新读、分配和重写。为了减少该过程的开销,多次读写更新被归纳为一个事件组,并且在必要的时候使用日志来同步写操作。

利用写时拷贝使ZFS的快照和事物功能的实现变得更简单和自然,快照功能更灵活。缺点是,COW使碎片化问题更加严重,对于顺序写生成的大文件,如果以后随机的对其中的一部分进行了更改,那么这个文件在硬盘上的物理地址就变得不再连续,未来的顺序读会变得性能比较差。

快照与克隆[编辑]

ZFS使用写时拷贝技术的一个优势在于,写新数据时,包含旧数据的块被保留着,提供了一个可以被保留的文件系统的快照版本。由于ZFS在读写操作中已经存储了所有构建快照的数据,所以快照的建立非常快。而且由于任何文件的修改都是在文件系统和它的快照之间共享的,所以ZFS的快照也是空间优化的。

可写快照("克隆")也可以被创建。结果就是两个独立的文件系统共享一些列的块。当任何一个克隆版本的文件系统被改变时,新的数据块为了反映这些改变而创建,但是不管有多少克隆版本的存在,未改变的块仍然在其他的克隆版本中共享。

动态条带化[编辑]

ZFS能动态条带化所有设备以最大化吞吐量。当额外的设备被加入到zpool中的时候,条带宽度会自动扩展以包含这些设备。这使得存储池中的所有磁盘都被用到,同时负载被平摊到所有的磁盘上。

可变块尺寸[编辑]

ZFS使用可变大小的块,最大可至128KB。现有的代码允许管理员调整最大块大小,这在大块效果不好的时候有用。未来也许能做到自动调整适合工作量的块大小。[需要引用]

ZFS的可变大小的块与BtrFS和Ext4的extent不同。在ZFS中,在一个文件中所有数据块的逻辑长度必须是相同的,不同文件之间的块大小可以不同,因此ZFS可以用直接映射(direct map)的方式(同ufs/ffs/ext2/ext3)来来搜索间接块的数据指针数组(blkptr)。BtrFS和Ext4的extent方式在同一个文件中每个数据快的大小都可以不相同,因此需要用B+ Tree或者类B Tree的方式来组织间接块的数据。

虽然直接映射方式比B+ Tree的查找速度快,但是这种方式的缺点也非常明显,如:元数据开销过大、顺序IO的大文件性能不好、删除比较慢等等,因此在现代文件系统中映射方式逐渐被extent变长块取代。

如果数据压缩(LZJB)被启用,可变块大小需要被用到。如果一个数据块可被压缩至一个更小的数据块,则小的数据块将使用更少的存储和提高吞吐量(代价是增加CPU压缩和解压缩的负担)。

轻量化文件系统创建[编辑]

在ZFS中,存储池中文件系统的操作相比传统文件系统的卷管理更加便捷。创建ZFS文件系统或者改变一个ZFS文件系统的大小接近于传统技术中的管理目录而非管理卷。

储存管理[编辑]

限制[编辑]

ZFS的最新beta版已支持透明加密。[7]

专利争端[编辑]

NetApp指控Sun的ZFS文件系统侵犯了它WAFL的七项专利,Sun反诉NetApp侵犯了12项专利,其中包括NFS协议等。后来专利争端以和解告终。

对其支持的操作系统[编辑]

参见[编辑]

參考文獻[编辑]

  1. ^ 1.0 1.1 ZFS: the last word in file systems. Sun Microsystems. September 14 2004 [2006-04-30]. 
  2. ^ Jeff Bonwick. ZFS: The Last Word in Filesystems. Jeff Bonwick's Blog. October 31, 2005 [2006-04-30]. 
  3. ^ Sun Celebrates Successful One-Year Anniversary of OpenSolaris. Sun Microsystems. June 20 2006. 
  4. ^ Jeff Bonwick. You say zeta, I say zetta. Jeff Bonwick's Blog. 2006-05-04 [2006-09-08]. 
  5. ^ AdvFS內部設計文件 (AdvFS Design Docs). SourceForge.net. 
  6. ^ Seth Lloyd, "Ultimate physical limits to computation(计算的终极物理限制)." Nature 406, 1047-1054 (2000)]
  7. ^ OpenSolaris Project: ZFS on disk encryption support. OpenSolaris Project. [2006-12-13]. 
  8. ^ 1.1 What about the licensing issue?. [November 18, 2010]. 

外部連結[编辑]