摘要:智能網絡磁盤(Intelligent Network Disk,IND)存儲系統被定義為以數據為中心的,由多個同構型的智能化、微型化、網絡化存儲單元IND組成的新型網絡存儲系統。文章從IND的特性出發,對FAT文件系統進行分析研究,設計了一種精簡的、能滿足IND需要的、基于FAT24的類FAT文件系統INDFS(IND File System)。
關鍵詞:存儲系統;IND;嵌入式系統;文件系統;FAT24
引言
全球信息化,帶來了數據量的爆炸式增長和數據流的急速膨脹,刺激了計算機網絡技術的快速發展,也推動了網絡存儲技術的發展。從DAS、NAS到SAN和IP-SAN,存儲架構實現了以服務器為中心到以數據為中心的轉化。
DAS存儲設備寄生在相應的服務器里,完全以服務器為中心;所有的客戶請求和響應、控制流和數據流都必須經過服務器,服務器成為I/O的瓶頸。基于將控制流和數據流分開的思想,NAS將存儲器直接連到網絡上,不再掛在服務器后端,服務器僅起控制管理的作用,從而減輕了服務器的工作負載,使系統的整體性能得到提高;但隨著文件請求增加到一定程度,服務器的性能會顯著地下降,而且服務器的存在必然會有單點故障問題。SAN提供了數據塊傳輸、可伸縮的虛擬存儲和遠程備份,但由于其昂貴的價格,只有小部分的高端應用采用SANt2J。我們嘗試用智能化、網絡化、微型化的存儲單元建立一種以數據為中心的較低成本的存儲體系,即本文要研究的智能網絡磁盤(Intelligent Network Disk,IND)存儲系統。
1、關子智能網絡磁盤IND及其文件系統INDFS
智能網絡磁盤IND存儲單元是具有IDE接口、高速以太網接口的嵌入式系統。該系統裝有嵌入式實時操作系統,運行分布式、智能化的存儲管理軟件,掛接廉價的IDE大容量硬盤,所有直接接入網絡的存儲單元形成一個邏輯上完全為一體的,能實現快速存取的、具有數據容錯和負載均衡功能的文件服務器集群。由IND作為基本單元組成的存儲系統就是IND存儲系統,其存儲體系結構見圖1所示,IND單元結構如圖2所示。
存儲系統提供網絡數據和文件服務,其中操作系統的選擇和文件系統的定制是至關重要的。鑒于IND被定義為一個精簡的較低成本的嵌入式系統,我們為IND選擇了由Micriμm公司提供的,性能優良、源碼公開、科研免費的實時操作系統內核uC/OS-II。Micriμm公司還提供了uC/FS,供uC/OS-II用戶擴展文件系統用。uC/FS是一種基于FA732的類FAT文件系統,但需要付費。考慮到本系統的特點和進行科學研究的需要,我們決定開發自己的文件系統。該文件系統應該具有以下特性:能夠存取當前流行的大容量IDE硬盤;可以實現多層次文件目錄結構;能可靠快速訪問磁盤文件;能兼容FAT文件系統;結構精簡,能有效地利用嵌入式系統有限的系統資源。這樣一種用于IND的文件系統筆者稱之為INDFS。
2、基于FAT24的INDFS的提出
考慮到INDFS要能兼容FAT文件系統,筆者提出了一種基于24位FAT表(FAT24)的INDFS。
2.1關于FAT文件系統
FAT文件系統的基礎是FAT(File Allocation Table,文件分配表),它在管理磁盤時,將邏輯盤的數據區劃分為一個個簇(Cluster),作為磁盤文件分配的基本單位。簇由2n個連續的扇區組成,簇的大小一般依據磁盤的容量和FAT的類型而定。表1列出了不同容量下FAT32邏輯盤卷簇的大小和數目。簇依次編號,即得簇號。將簇號作為紀錄編號,簇的狀態作為紀錄內容,組成一個反映整個磁盤簇分配和占用情況的一維表格,即FAT表。使用12位編號,即得FAT12,同理可得到FAT16、FAT32。某文件在磁盤上的存儲分配情況反映在FAT表中是一個簇號單向鏈表,訪問該文件只需記住文件存儲的首簇號即可。而目錄被視為特殊文件,目錄表中保存了各文件或下一級目錄的首簇號。當加載某個邏輯磁盤時,其FAT表也被載入內存,某一文件目錄表在訪問時也被載入內存,這樣可以非常方便地實現對磁盤文件目錄的讀寫。FAT文件系統就是這樣一個以FAT為基礎的、支持多級文件目錄的文件系統。
2.2 FAT12、FAT16不適于IND大容量硬盤
FAT12是為容量僅為幾百K的軟磁盤提出來的,FAT16也只能管理最大2GB的硬盤分區,現主要用于存儲容量較小的可移動存儲媒介。它們不能滿足IND所使用的當前流行的大容量IDE硬盤的要求。
2.3 FAT32存在巨大的信息冗余不適于資源受限的IND
(1)FAT32存在巨大的信息冗余
通過對不同容量的FAT卷的分析可知,32位FAT表有巨大的信息冗佘。表1所示為不同容量的邏輯硬盤使用WIN98或WIN2000,WINXP格式化成FAT32卷后的簇容量及簇數目。
從表1可看出,隨著硬盤容量的劇增,簇也變大,而簇數目卻保持在220221之間,即使卷容量為128GB時,簇數目也僅為222。222個簇,意味著只需要22個二進制位就可表達了,而32位FAT表最多可以表達222簇,以每簇4KB計,就可以映射16TB的卷。事實上,FAT32僅用了28位表示簇號(高4位為0),即便如此,相對于22位仍有巨大信息冗余。
(2)在資源有限的嵌入式系統,FAT32難以發揮其優越性
FAT32比較FA716有很多的優越性,它能支持更大容量的硬盤,比FAT16能有效地利用磁盤空間。但是FAT32占用的系統資源要多得多。一方面,32位FAT表與16位FAT表即使有同樣數目的簇,FAT32表的大小也是FAT16表的兩倍;另一方面,簇數的增多,也會使FAT32變得龐大。若使用全部的32位表示簇,最多簇數目為232,僅FAT表就將達到4*232=16GB。我們不敢想象將16GB的FAT表讀入內存,也不敢想象在16GB的FAT表中搜索FAT表項。這樣,我們對FAT32在運用過程中僅使用28位表示簇,在表1中使簇數目保持在220-222之間就容易理解了。由此可見,FAT32的性能沒有得到最大程度地發揮,尤其在系統資源較為緊張時。既然這樣,我們為什么不把FAT的位數降低呢?
2.4建立基于24位FAT表的INDFS
通過上述對FAT文件系統及FAT卷簇數目的分析,我們受到了啟發:應該建立基于24位FAT表(FAT24)的INDFS。
FAT24與FAT12、FAT16、FAT32相對應,就是用24個二進制位表示簇序號,將邏輯磁盤中所有簇的存儲分配情況映射到一個以簇號作為紀錄號的一維表中,形成FAT24表。INDFS可以被設計成一個以FAT24為基礎的類FAT文件系統。該文件系統能較好地滿足INDFS的功能特性。
(1)基于FA724的INDFS易于實現與FAT文件系統的兼容。由于INDFS源于FAT文件系統,且都以FAT為基礎,因此易于實現與FAT16、FAT32的兼容。
(2)基于FAT24的INDFS能滿足IND對大容量硬盤管理的需求。若以每簇16KB計,使用22位表示簇,則可映射16*222=64GB的卷,使用多個卷,物理磁盤容量則可達128GB以上。IND使用廉價的、流行的IDE接口硬盤,這些硬盤的存儲容量一般也是在80GB-200GB左右,更多容量的存儲需求可通過使用多個IND來解決。
(3)基于FAT24的INDFS比FAT32結構精簡,能有效地利用系統資源,適于IND之類的嵌入式系統。FAT表降低8位,僅FAT表大小就可縮減四分之一,與之相關聯的文件目錄表、文件操作等數據結構都要簡化,因此從總體上可以較大幅度地降低內存等系統資源的占用。雖然,基于FAT24的INDFS,面對32位系統架構,算法設計略復雜些,但對于IND這樣一個資源受限的嵌入式系統來說,內存的節約在性能上的提升應該是主要的。
3、基于FAT24的INDFS的設計
基于FA724的INDFS的設計包括邏輯結構設計、主要數據結構描述和基本算法設計。
3.1 INDFS的邏輯結構設計
在uC/OS-II操作系統的調度下,INDFS承上支持智能化網絡存取應用軟件或其他存儲管理應用程序,啟下通過存儲設備驅動程序管理大容量存儲設備(這里是IDE硬盤),完成文件的存取工作。其邏輯結構可以用圖3來表示。
在圖3中,虛線框內為INDFS的基本結構。其中文件管理和目錄管理兩大模塊為上層提供所有與操作文件和目錄相關的函數(API),文件目錄表管理和文件分配表管理兩個模塊維護著INDFS兩個最基本的也是最重要數據結構:文件目錄表FDT和文件分配表FAT,邏輯磁盤模塊是INDFS的載體,它定義了邏輯磁盤的基本參數,使INDFS可以管理多個邏輯盤,高速緩存(CATHE)用于提高讀寫磁盤的速度。此外,格式化實用程序完成]HDFS磁盤卷的初始化工作,底層驅動程序實現INDFS與]DE大容量存儲設備的通訊。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文