15.4.3.2 Filer 的系统结构
Filer 由控制器机头和磁盘子系统组成。机头通过光纤通道接口连接磁盘SAN 子系统,通过网络接口提供数据到应用服务器,机头的接口数量通过PCI 插卡扩充。磁盘子系统由可以堆叠的磁盘柜组成。
Filer 的基本软件结构如下图(图5-57)所示,一些紧密耦合的处理模块处理NFS,CIFS, 和 HTTP 请求。一个请求从下方的网络驱动开始,经过网络协议层和文件系统,向上到达磁盘I/O ,当文件系统完成了请求,它把请求送回网络。这些模块建立在一个简练的real-time 内核上,提供产生进程,内存分配,消息传递和中断等基本处理。
网络层支持TCP/IP,与UNIX 系统相比,为Filer 的文件服务进行了优化,以增加Filer文件系统通讯的效率。
WAFL., Filer 的文件系统,是专门为通过网络提供文件服务而设计的,而且与Filer的RAID 配合设计,解决常规操作系统由于RAID 而引起的性能问题。
图 5-57 Filter 基本结构
15.4.3.3 WAFL – Write Anywhere File Layout
Filer 文件系统是经过重新设计的,而不采用常规文件系统,是为了达到三个主要目标:
文件系统应当和RAID 高效协同
文件系统可以在新增磁盘时动态扩充
文件系统无需进行费时的一致性检验
而且,由此产生了支持Snapshot 的要求。
在一些方面WAFL 的磁盘格式与其他UNIX 文件系统类似,例如, Berkeley Fast File System 和 IBM TransArc Episode file system。.其中:
WAFL 是基于块的,使用连续的4KB block
WAFL 使用 inode 来描述文件
目录是特殊格式的文件
WAFL 利用文件保存元数据(meta-data),数据存储的控制信息,WAFL 的三个最重要的元数据,分别是inode file (包括所有的inodes), 空闲磁盘块的位图文件,空闲inode 的位图文件。将元数据以文件方式组织,可以将元数据块写到磁盘的任何位置,这就是WAFL(任意写文件系统)名称的来源。由于没有特定数据写入特定磁盘区(例如0 磁道)的要求,WAFL 可以完全控制其写操作的空间分配策略。Windows 和UNIX 的FFS 文件系统却不是这样的。
WAFL 利用了这种灵活性优化Filer 的RAID 的写操作性能,在IO 中write 优化的文件系统是十分重要的,因为写操作必须更新到磁盘或者NVRAM(不掉电内存),而读可以在UNIX/Window 用户和服务器的内存里进行Cache 缓存。一般 UNIX 和Windows 服务器的写操作数通常有5 到10 倍的读操作数。
15.4.3.4 Snapshot 介绍
Snapshot 功能是WAFL 的随意写带来的另一个功能。Snapshot ,也叫“快照”,是文件系统在线的(随时可以访问),只读的“拷贝”, Snapshot 只需几秒钟就可以生成,如果文件未被改变或删除就不占额外空间,或者说只有当文件系统的变化,变化部分会写入新的磁盘空间,这时,快照消费额外空间。
快照可以用于在线备份,并且使用户可以自己进行文件恢复操作。简化了备份到磁带的作业。由于快照是整个文件系统的只读的拷贝,是当前文件系统的具备自身一致性的备份,所以无需关机或使当前文件系统离线,系统管理员可以将快照备份到磁带机上。
图5-58 Snapshot 的生成
上图(a)示意了一个简化的文件系统,一个指针指向文件对应的磁盘块,(b)示意通过指针结构的复制生成了快照,(c)示意当块C 被修改,修改后的值存入新块,C’,当前文件系统指向C’,而快照仍保存了文件系统在拍快照时的状况。
WAFL 通过复制指针数据生成新的快照,由于该结构只有128Byte 大小,而且没有数据磁盘块需要复制或者移动, 除非当前文件系统的数据发生变化,快照步需要占用额外的磁盘空间,而且快照可以即时生成。
Filer 可以为每个文件系统在线保留255 个版本的快照。可以手动生成或删除快照,也可以根据用户定义的日程自动生成和删除。Snapshot 占用的空间取决于用户数据变化的频率,可以通过指定快照占用空间的大小。一般17%的额外空间就可以保留整个文件系统的多个版本的快照。
用户访问快照的方式
文件系统的每个目录都含有一个特殊的子目录,表示快照,通过对它的访问,用户可以得到以前的数据。假如用户以外删除了名为foo 的文件,希望从快照里把它恢复出来,下面例子现实如何在UNIX/NFS 下察看以前的文件并进行恢复。
% ls -lu .Snapshot/*/foo
-rw-r–r– 1 hitz 16787 Jun 16 15:00 .Snapshot/hourly.0/foo
-rw-r–r– 1 hitz 16744 Jun 16 12:00 .Snapshot/hourly.1/foo
-rw-r–r– 1 hitz 16811 Jun 16 10:00 .Snapshot/hourly.2/foo
三个Snapshot 中含有文件 foo。 -u 选项通知ls 命令列出foo 文件的生成时间,也就是拍快照的时间。如果要恢复,只需要将要恢复的文件copy 回来到foo 所在得目录就可以了。
% cp .snapshot/hourly.0/foo .
Snapshot 的目录是隐藏的只读目录,这样平常的操作不会受影响,而且不会被修改。