ZFS 是 SUN Microsystem 为其服务器开发的文件系统,2005发行,2009 年开源,是第一个 128 位文件系统。
一、传统文件系统缺点
- 数据完整性(data integrity)不能够保证,系统崩溃导致数据丢失
- 系统管理困难
- 传统的卷管理缺陷(固定大小,视卷管理为块设备)
- 容量限制
卷管理(volume manager)一定程度上虚拟化了下层的存储,但还是对应着指定的逻辑地址范围。(Volume manager do virtualize the underlying storage to some degree,but in the end,still assigned to some particular range of blocks of logical storage device.)
卷管理(volume manager)向上提供一个逻辑块级设备,但这样就破坏了块之间依赖关系,而没有利用上层的语义信息。(In general, the volume manager can’t make any optimizations based on knowledge of higher-level semantics.)
卷管理(volume manager)使得容量增大、缩小困难,现有的许多文件系统都采用了自己的卷管理,改进了文件系统和卷管理之间的块级接口。
二、ZFS 文件系统设计目标
- 数据完整性保证(data integrity guarantee)
- 易管理(simple administration)
- 大容量(immense capacity)
为达到以上目标,ZFS 在设计实现时具有以下特点:
- 池存储(pooled storage)
- 校验磁盘上所有数据(checksumming all on-disk data)
- 事务性写时备份更新(transactional copy-on-write update)
- 基于对象的存储模型(objected-based stroage model)
三、ZFS 文件系统特点
简单管理:The overall goal is to allow the administrator to state his or her intent。
池存储:实现如内存一样,采用虚拟地址进行动态的内存分配。多文件系统(这里文件系统指的类似于 linux 可挂载的文件系统,而不是类似于 ZFS 的意思)应该共享一个存储池。多个文件系统共享一个存储池要优于一个大的文件系统这是因为可以把错误隔离在单个文件系统,并易于管理、挂载和备份。
动态的文件系统容量:在文件系统创立的时候就要预测到它以后需要的最大容量明显不实际,文件系统应该能够自动增大、缩小。
磁盘数据一致性:Repair after booting isn’t acceptable approach to consistency.
大容量: first 128bit file system in the world.
错误检测和更正:读时检测校验和,写时更新校验和。需要指出的是校验和并不会带来额外开销,因为校验和是保存在数据块的父节点上。
四、ZFS 纵向结构
ZFS 由七部分组成,分别是 SPA(Storage Pool Allocator)、DSL(Data and Snopshot Layer)、DMU(Data Management Layer)、ZAP(ZFS Attribute Processor)、ZPL(ZFS POSIX Layer)、ZIL(ZFS Intent Log)、ZVOL(ZFS Volume),负责上下层数据交付的有 SPA、DMU、ZPL 三层,和传统文件系统比较如图所示:
由下到上,设备驱动为 SPA 提供块设备接口,SPA 处理块分配和 I/O,向上提供虚拟地址,明确分配的空闲块,DMU 将虚拟块转化为对象为 ZPL 提供其接口,ZPL在对象上应用 POSIX 文件系统,对系统调用提供操作。
SPA
SPA 不同于 Volume Manager 提供向上的逻辑块设备,而是能够类似 C 语言中的malloc 和 free 一样分配和释放块。这样的好处有三点:1、允许动态的添加和移除设备;2、简化管理;3、No limit(SPA doesnot present itself as a logical block device.Instead, it presents itself as an interface to allocate and free virtually addressed blocks DVAs.)在 SPA 中有两个重要概念:checksum 和 vdev。
vdev(虚拟设备 virtual device)有逻辑虚拟设备和物理虚拟设备,物理虚拟设备是对物理设备的抽象,逻辑虚拟设备是物理虚拟设备的一个集合。所有虚拟设备如下图构成一个树形结构,叶子节点为物理虚拟设备,深度为一的节点(即 root 直接孩子节点)为 top-level 节点,each top-level vdev is created with a single command using a simple nested description language。SPA allocates blocks in a round-rabin fashion from the top-level vdevs, A storage pool with multiple top-level vdevs allows the SPA to use dynamic striping to increase bandwith.
checksum(校验和)用于检验数据块的完整性,ZFS 内所有的数据块都保存了块校验值,块校验值保存在其父节点上,读取块时检验数据块的校验值,写入块时更新校验值。所有块的根节点为 uberblock,uberblock 是自校验的。需要指出的是,所有的块构成一个树结构,所有的叶子节点都是数据节点 dnode,所有的非叶子节点是 index node,保存地址块的指针、元数据和校验和。将校验保存在父节点的好处就是不用额外在一个新的地方读取校验值。
DMU Data Management Unit
- DMU consumes blocks from the SPA and exports objects.
- Objects live within the context of a particular dataset.
- DMU keeps the on-disk data consistent at all time by treat all blocks as copy-on-write.
ZFS POSIX Layer
ZPL uses the DMU’s object-based transactional interface to store all of its data and metadata.
五、Design tradoff
- Trade some amount of perfermance in order to checksum all on-disk data.
- One tradeoff we didnot make: sacrificing simplicity of implement for features.
论文地址:The Zettabyte file system
wiki 百科:WIKI ZFS
不全啊?!
恩,不是完整的,后面有些不是很理解就没有写下去了
怎么不找个常用的文件系统研究下?看看能不能改进,找到改进之处就可以写篇好文章!
太阳微系统公司是家很牛叉的公司,JAVA程序设计语言、Solaris操作系统、SPARC处理器……这些软件和硬件都是它的作品。令人感慨的是,这么牛叉的公司也摆脱不了被收购的命运!
ZFS 作为新一代文件系统具有很好的特性,之所以不常用是因为没有开源,所以应用和研究都不多
ntfs也没有开源,但应用却极广。进入本世纪以来,人们发现,sun的solaris服务器相对于linux服务器而言,找不到什么优势,而前者成本却比后者高很多。linux的发展壮大,给sun的业务带来沉重打击,是导致sun最终被收购的重要原因,也是其文件系统应用不多的原因。