没有合适的资源?快使用搜索试试~ 我知道了~
ZFS 是由 SUN 公司的 Jeff Bonwick 和 Matthew Ahrens 大神于 2001 年领导设计开发,并在 2004 年 2 月 14 日发布的集合了文件系统处理逻辑和卷管理器功能的文件系统。
资源推荐
资源详情
资源评论
ZFS 文件系统
1. ZFS 介绍
1.1
ZFS 发展史
ZFS 是由 SUN 公司的 Jeff Bonwick 和 Matthew Ahrens 大神于 2001 年领导
设计开发,并在 2004 年 2 月 14 日发布的集合了文件系统处理逻辑和卷管理器
功能的文件系统。ZFS 的全拼是 Zettabyte File System,Zetta 是一个数量单位,
1ZB = 1024EB = 1048576 PB,而 facebook 目前最大的单个 HDFS 集群中存储了
100PB 的 log 数据。当然单台服务器不可能也不会存储这么多数据,这从一个
侧面说明了 zfs 的存储容量从实际使用中来说是没有上限的。zfs 不是类似于
hdfs 的分布式文件系统或者 lustre 之类的集群文件系统,通常可以用来作
HDFS 和 lustre 的后端存储文件系统使用。
SUN 公司从 2008 年开始组织并支持开源 open solaris 项目,ZFS 是其中一
个重要的组成部分,随着 oracle 公司收购了 sun,并于 2010 年停止了 open
solaris 的开发工作,原先的 ZFS 核心开发者们也逐步的离开了 oracle,他们中
的一部份人继续着 ZFS 的开发,参与或者组成了 Joyent、Nexenta、Delphix 等
以 opensolaris 或 ZFS 为蓝本的公司,他们的 oracle 个人 blog 也随着离开 oracle
停止更新或者无法访问,而 open solaris 的社区也将在 2013 年 3 月 24 日关闭,
届时我们将失去学习一个学习目前最为先进的商业操作系统的途径,,作为软
件设计中的一项杰作,ZFS 值得我们深入的学习,包括它斟酌权衡的设计,令
人赞叹的细节实现和追求完美的态度,在接下来的文章中将为各位读者一一说
明和展现。
1.2
ZFS 特性
将 ZFS 称为文件系统有点名不副实,因为它在传统意义上不仅仅是个文件系
统。ZFS 将逻辑卷管理器的概念与功能丰富的和可大规模扩展的文件系统结合
起来。让我们开始先探索一些 ZFS 所基于的原则。
- 首先,ZFS 使用池存储模型,而不是传统的基于卷的模型。这意味着 ZFS
视存储为可根据需要动态分配(和缩减)的共享池。这优于传统模型,在传
统模型中,文件系统位于卷上,使用独立卷管理器来管理这些资产。
- ZFS 内嵌入的是重要功能集(如快照、即写即拷克隆、连续完整性检查和
通过 RAID-Z 的数据保护)的实现。
- 更进一步,可以在 ZFS 卷的顶端使用您自己最喜爱的文件系统(如 ext4)
这意味着您可以获得那些 ZFS 的功能,如独立文件系统中的快照(该文件系统
可能并不直接支持它们)。
但是 ZFS 不只是组成有用文件系统的功能集合。相反,它是构建出色文件系
统的集成和补充功能的集合。让我们来看看其中的一些功能,然后再看看它们
的一些实际应用。ZFS 作为一个划时代的文件系统,被移植到了多个 OS 平台
上,它具有的特性主要如下:
1. 接近于无限的存储空间
ZFS 合并了卷管理功能来提取底层物理存储设备到文件系统。ZFS 对存储池(称
为 zpools)进行操作,而不是直接查看物理块设备,存储池构建自虚拟驱动器,
可由驱动器或驱动器的一部分物理地进行表示。
ZFS 针对若干磁盘组成的集合抽象出了 zpool 的概念,而文件系统则是活动
的,每个文件系统实例可以从 zpool 中分配空间,zpool 的大小可以动态变化,
在空间不足的时候可以动态添加磁盘,在空间充足的时候也可以通过移动数据
的办法抽调出磁盘。ZFS 的一些理论极限如下:对于任意 ZFS 文件系统实例,
支持 248 个快照,支持 248 个文件,单个文件系统实例最大 16EB,单个文件最
大 16EB,单个 zpool 最大 128ZB,每个 zpool 最多支持 264 个设备等等。
2. COW 事务模型
COW 是 Copy On Write 的缩写,是指在对数据进行修改时并不是直接原地修
改,而是拷贝一份新的与修改的内容合并。
使用
COW
的一个例子就是
Unix
的
fork
函数实现,通常
fork
的过程中子进程需要拷贝父进程的页表等虚拟内存信
息,而如果子进程对拷贝的页表修改较少这样的拷贝工作就会带来额外的负
担,因此
fork
的时候子进程不拷贝父进程的页表等信息,而是与其父进程共
享,在修改的时候拷贝出一份新的进行修改,在此处
COW
的主要功能是减少
额外的
copy
带来的负担。
对于文件系统而言,COW 是实现快照等功能的基
础,通过保留每个快照的时刻的数据而重定向新修改的数据,可以保证快照时
刻的完整数据。对于通常的文件系统,例如 ext3/4,xfs 等,写入是 modify in
place 的,这样的好处是可以保证在顺序写入后修改时磁盘上的数据的连续性,
而劣势在于修改的时候面对宕机断电等意外情况,必须保证任意时刻的数据是
合法的,因此 ext3/4 和 xfs 均引入了日志机制(ext3 使用到了 JBD),在写入数据
的时候记入额外的信息来保障数据可以恢复,随之带来的则是一次数据的写入
可能会引发若干次的日志写入操作,而日志的存储区通常与数据存储区是分开
的,这就带来了磁盘额外的 seek 操作,影响性能。ZFS 和 Btrfs 等文件系统采
取了另外一种处理办法,即对所有的数据修改均采用 COW 的办法,这样可以
保证磁盘上的数据时刻均是完整的,不必记录额外的日志,这里有一个关于各
种使用 COW 文件系统的性能对比,采用 COW 的劣势在于处理随机写后顺序
读取的情况,对于 modify in place 的文件系统,数据在磁盘上仍是连续存储
的,而 ZFS 则由于 COW 机制,随机更新的数据已经散落在磁盘上的各处,后
续的顺序读取则不必要的引入了多余的 seek 操作。
事务模型(Transactional Model)是从关系型数据库中借鉴而来的概念,对文
件系统而言指的是保证一组操作的原子性,即要么成功,要么失败,不存在中
间状态,并且各个 transaction 之间是隔离的,互不影响。ext3/4,xfs 的日志实
现和 ZFS/BTRFS 的实现均采用了事务的模型,关于 ZFS 的实现将在后文中说
明,此处需要注意的是,即便使用了事务模型,也不一定能保证用户数据逻辑
上的完整性,因为只有用户接触到的最上层应用才能确保数据逻辑上的完成
性。对于数据库而言是用户接触的最上层应用,而文件系统通常是作为其他应
剩余16页未读,继续阅读
资源评论
茶博士_38043550
- 粉丝: 26
- 资源: 35
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- c语言文件读写操作代码.txt
- Java 8+ 函数式编程速查表.zip
- raw文件如何打开-摄影领域的RAW文件处理与编辑解决方案
- Java 8 字符串操作库 .zip
- Java 8 功能.zip
- Java , JavaFX , Kotlin 游戏库(引擎).zip
- IPinfo API 的官方 Java 库(IP 地理位置和其他类型的 IP 数据).zip
- IntelliJ IDEA 针对 Square 的 Java 和 Android 项目的代码样式设置 .zip
- Gradle,Maven 插件将 Java 应用程序打包为原生 Windows、MacOS 或 Linux 可执行文件并为其创建安装程序 .zip
- Google Maps API Web 服务的 Java 客户端库.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功