Filer 由控制器機頭和磁盤子系統(tǒng)組成。機頭通過光纖通道接口連接磁盤SAN 子系統(tǒng),通過網絡接口提供數據到應用服務器,機頭的接口數量通過PCI 插卡擴充。磁盤子系統(tǒng)由可以堆疊的磁盤柜組成。
Filer 的基本軟件結構如下圖(圖5-57)所示,一些緊密耦合的處理模塊處理NFS,CIFS, 和 HTTP 請求。一個請求從下方的網絡驅動開始,經過網絡協(xié)議層和文件系統(tǒng),向上到達磁盤I/O ,當文件系統(tǒng)完成了請求,它把請求送回網絡。這些模塊建立在一個簡練的real-time 內核上,提供產生進程,內存分配,消息傳遞和中斷等基本處理。
網絡層支持TCP/IP,與UNIX 系統(tǒng)相比,為Filer 的文件服務進行了優(yōu)化,以增加Filer文件系統(tǒng)通訊的效率。
WAFL., Filer 的文件系統(tǒng),是專門為通過網絡提供文件服務而設計的,而且與Filer的RAID 配合設計,解決常規(guī)操作系統(tǒng)由于RAID 而引起的性能問題。
圖 5-57 Filter 基本結構
15.4.3.3 WAFL – Write Anywhere File Layout
Filer 文件系統(tǒng)是經過重新設計的,而不采用常規(guī)文件系統(tǒng),是為了達到三個主要目標:
文件系統(tǒng)應當和RAID 高效協(xié)同
文件系統(tǒng)可以在新增磁盤時動態(tài)擴充
文件系統(tǒng)無需進行費時的一致性檢驗
而且,由此產生了支持Snapshot 的要求。
在一些方面WAFL 的磁盤格式與其他UNIX 文件系統(tǒng)類似,例如, Berkeley Fast File System 和 IBM TransArc Episode file system。.其中:
WAFL 是基于塊的,使用連續(xù)的4KB block
WAFL 使用 inode 來描述文件
目錄是特殊格式的文件
WAFL 利用文件保存元數據(meta-data),數據存儲的控制信息,WAFL 的三個最重要的元數據,分別是inode file (包括所有的inodes), 空閑磁盤塊的位圖文件,空閑inode 的位圖文件。將元數據以文件方式組織,可以將元數據塊寫到磁盤的任何位置,這就是WAFL(任意寫文件系統(tǒng))名稱的來源。由于沒有特定數據寫入特定磁盤區(qū)(例如0 磁道)的要求,WAFL 可以完全控制其寫操作的空間分配策略。Windows 和UNIX 的FFS 文件系統(tǒng)卻不是這樣的。
WAFL 利用了這種靈活性優(yōu)化Filer 的RAID 的寫操作性能,在IO 中write 優(yōu)化的文件系統(tǒng)是十分重要的,因為寫操作必須更新到磁盤或者NVRAM(不掉電內存),而讀可以在UNIX/Window 用戶和服務器的內存里進行Cache 緩存。一般 UNIX 和Windows 服務器的寫操作數通常有5 到10 倍的讀操作數。
15.4.3.4 Snapshot 介紹
Snapshot 功能是WAFL 的隨意寫帶來的另一個功能。Snapshot ,也叫“快照”,是文件系統(tǒng)在線的(隨時可以訪問),只讀的“拷貝”, Snapshot 只需幾秒鐘就可以生成,如果文件未被改變或刪除就不占額外空間,或者說只有當文件系統(tǒng)的變化,變化部分會寫入新的磁盤空間,這時,快照消費額外空間。
快照可以用于在線備份,并且使用戶可以自己進行文件恢復操作。簡化了備份到磁帶的作業(yè)。由于快照是整個文件系統(tǒng)的只讀的拷貝,是當前文件系統(tǒng)的具備自身一致性的備份,所以無需關機或使當前文件系統(tǒng)離線,系統(tǒng)管理員可以將快照備份到磁帶機上。
圖5-58 Snapshot 的生成
上圖(a)示意了一個簡化的文件系統(tǒng),一個指針指向文件對應的磁盤塊,(b)示意通過指針結構的復制生成了快照,(c)示意當塊C 被修改,修改后的值存入新塊,C’,當前文件系統(tǒng)指向C’,而快照仍保存了文件系統(tǒng)在拍快照時的狀況。
WAFL 通過復制指針數據生成新的快照,由于該結構只有128Byte 大小,而且沒有數據磁盤塊需要復制或者移動, 除非當前文件系統(tǒng)的數據發(fā)生變化,快照步需要占用額外的磁盤空間,而且快照可以即時生成。
Filer 可以為每個文件系統(tǒng)在線保留255 個版本的快照。可以手動生成或刪除快照,也可以根據用戶定義的日程自動生成和刪除。Snapshot 占用的空間取決于用戶數據變化的頻率,可以通過指定快照占用空間的大小。一般17%的額外空間就可以保留整個文件系統(tǒng)的多個版本的快照。
用戶訪問快照的方式
文件系統(tǒng)的每個目錄都含有一個特殊的子目錄,表示快照,通過對它的訪問,用戶可以得到以前的數據。假如用戶以外刪除了名為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 的目錄是隱藏的只讀目錄,這樣平常的操作不會受影響,而且不會被修改。