众所周知IBM的NAS产品OEM自NetApp,而NetApp除了IBM,也与其他厂商保持了紧密地合作关系。可以说尽管我们现在在淡化NAS和SAN的区别,但NAS产品仍然是存储系统中,较为独特的产品类别。
NetApp的核心技术就是其文件系统-WAFL,该项技术有其长处:优势之一就是具有跨越各种协议的能力,无论是基于块的协议,还是基于文件的协议,无论是光纤通道还是iSCSI。NetApp还被认为是快照技术的先驱,快照技术也是WAFL系统的一部分。随后我们也会介绍到。
但NetApp的技术弱势则是:对于纯粹的块访问设备来说,有两个性能上的限制,第一,块必须按照进入或者出去的顺序通过文件系统层;第二,随着系统的增大,日志也持续增长,导致随着系统的增长,系统可能会崩溃。因此NetApp总给人无法担当关键业务应用的印象。
不管怎样,WAFL仍然是存储领域较具特色的技术之一,下面让我们来详细了解WAFL。
什么是WAFL?
WAFL是“Write Anywhere File Layout”,是专为NAS系统而设计的。,即“任意位置写入文件布局”的缩写。WAFL文件系统和Filer的整合式RAID管理采用一体化设计,以避免大多数带有RAID管理机制的文件系统所固有的性能问题。
WAFL采用有电池保护的NVRAM(非易失性内存)来担任其日志,并藉由CONSISTENCY POINTS提供文件系统一致性的保证,在非正常断电或关机时,重新开机后可在2分钟内开始提供服务,不需要执行文件系统检查,也不用担心文件系统会损毁。WAFL结合NVRAM、RAID、Snapshot的设计难度极高,故从1992年至今仍未有其它厂商可以做到。
WAFL的主要特定及其所带来的优势
*另外还有一项技术(硬盘区块验证系统 Block-Level Checksum)正在专利申请中,故没有列入表中,其优势是保障资料读取的正确性。
WAFL作为专门为网络文件访问而优化的UNIX兼容文件系统。在某些方面,其磁盘格式类似于其它UNIX文件系统,如伯克利快速文件系统(Berkeley Fast File System,以下简称FFS)和IBM TransArc Episode文件系统,相似之处包括:WAFL是基于数据块的,使用没有片断的4KB大小数据块;WAFL使用Inodes来描述其文件;WAFL文件系统中,目录是格式特殊的文件。
WAFL的元数据文件(Meta Data)
就像IBM TransArc Episode文件系统一样,WAFL使用文件来存储元数据。它有三个最重要的元数据文件:Inode文件,包含文件系统所有的Inode;块图文件,用以识别空闲块;Inode图文件,用以识别空闲Inode。
这里采用的“图”不是“位图”的称谓。其中,每一个WAFL inode包含16个块指针,用以表明哪一个数据块属于该文件。不同于伯克利快速文件系统,一个WAFL inode的所有块指针指向的是相同层次上的数据块。这样,对于小于64KB的文件,inode使用16个块指针指向文件数据块;大于64MB的文件,inode使用块指针指向间接数据块,间接数据块再指向实际的文件数据块。较大文件的inode指向更多的间接数据块。对于十分小的文件,数据存储在inode本身。
简单的,可以把WAFL理解为数据块树型结构,在树的根部是Root inode,Root inode是用以描述inode文件的特殊inode。该inode文件包含描述系统中其它文件的inode,包括块图和inode图文件。WAFL文件系统数据块树型结构的树叶是所有文件的数据块。文件由不同的数据块组成。较大的文件在inode和实际数据块之间存在额外的间接层次。WAFL要启动的话,必须要找到该树型结构的根部,所以对于WAFL(任意位置写入文件布局)来讲,root inode是个例外,它必须处于硬盘上的固定位置以便WAFL定位。总结了下,使用文件来保存元数据的方式带来的好处有:
1.允许在硬盘上任何地方写入元数据块。与FFS类似,WAFL在其写入分配策略上有着完全的灵活性,数据块不是被永久地分配到固定的磁盘位置上。WAFL利用了这种灵活性来优化Filer的RAID性能。WAFL可以事先规划对同一RAID条带进行多重写入的时间,这样当仅仅更新RAID某一硬盘条带中某一数据块时,就不会对整个写入性能带来损耗。
2.使文件系统的增长变得十分容易。当增加新的硬盘时,Filer可以自动增加元数据文件的大小。如果系统的缺省值稍小,管理员也可以手动增加文件系统中的Inode。允许元数据块在硬盘上任何地方写入。这种方式使得SnapShot数据快照功能成为可能。要使SnapShot可以工作,WAFL必须可以把新的数据,包括元数据写入到新的硬盘空间上,而不是覆盖原有数据。如果WAFL在磁盘上固定的位置存储元数据,这项功能就不可能实现。
批次动态条带化读写算法
WAFL文件系统中采用批次动态条带化读写算法。在UNIX或者Windows文件服务器中,写入性能尤其重要,因为它必须直接面对硬盘(或非易失性内存), 而读操作尚可以面对UNIX/Windows客户端和服务器的高速缓存。这就使得UNIX或者Windows客户端和服务器的硬盘写操作要比读操作多5-10倍。
这种需求特点激发了WAFL在最初的设计中,即最大限度的发挥了写入分配策略的灵活性。WAFL文件系统中,通过批次动态条带化读写算法的三种机制,保证了这种灵活性的实现:
WAFL能把文件系统的任何数据块(除包含root inode的数据块外)写到磁盘中的任何位置上。而在FFS中,诸如inode、位图和元数据被保存在磁盘中的固定位置上,这就妨碍了文件系统写入性能。例如,对某一新近更新的文件,不能将它的数据块和inode在磁盘上的紧邻位置加以存储。而WAFL则相反,它可以在磁盘上的任何地方加以写入,从而创造性地优化了写入性能。
WAFL能把数据块按任何顺序写到磁盘中。与之对应的,FFS仅能把数据块按确定的顺序写到磁盘中,在中断之后可以通过Fsck恢复文件系统的一致性。因为WAFL文件系统的映像文件只有在写入一致点信息时才会改变,所以WAFL能按任何顺序写入数据块。
WAFL能在单一写入周期内为多个NFS操作同时分配盘空间。而FFS需要为NFS请求一一分配空间。WAFL在确定文件系统一致点之前可以收集数百个NFS请求,在一致点时刻立即为其分配空间。这种延缓分配写入空间的机制通过从应答处理的过程中去除磁盘分配时间,大大改进了NFS操作的等待时间。 对于那些在到达磁盘前即被删除的数据块而言,这种方式也避免了时间的浪费。
以上的这些特性赋予了WAFL文件系统特别灵活的写入策略。为众多写入同时分配空间的能力使其更加智能化,允许将数据块以任何顺序写入到任何地方的能力又确保了这种策略适用于多种环境。