檔案系統結構

檔案系統結構

檔案系統是作業系統用於明確存儲設備(常見的是磁碟,也有基於NAND Flash的固態硬碟)或分區上的檔案的方法和數據結構。檔案系統是軟體系統的一部分,它的存在使得套用可以方便的使用抽象命名的數據對象和大小可變的空間。

基本概念

檔案系統是作業系統用於明確存儲設備(常見的是磁碟,也有基於NAND Flash的固態硬碟)或分區上的檔案的方法和數據結構;即在存儲設備上組織檔案的方法。作業系統中負責管理和存儲檔案信息的軟體機構稱為檔案管理系統,簡稱檔案系統。檔案系統由三部分組成:檔案系統的接口,對對象操縱和管理的軟體集合,對象及屬性。從系統角度來看,檔案系統是對檔案存儲設備的空間進行組織和分配,負責檔案存儲並對存入的檔案進行保護和檢索的系統。具體地說,它負責為用戶建立檔案,存入、讀出、修改、轉儲檔案,控制檔案的存取,當用戶不再使用時撤銷檔案等。

在計算機中,檔案系統(file system)是命名檔案及放置檔案的邏輯存儲和恢復的系統。DOS、Windows、OS/2、Macintosh和UNIX-based作業系統都有檔案系統,在此系統中檔案被放置在分等級的(樹狀)結構中的某一處。檔案被放置進目錄(Windows中的資料夾)或子目錄,在樹狀結構中你希望的位置中。

檔案系統指定命名檔案的規則。這些規則包括檔案名稱的字元數最大量,哪種字元可以使用,以及某些系統中檔案名稱後綴可以有多長。檔案系統還包括通過目錄結構找到檔案的指定路徑的格式。

NTFS

NTFS(New Technology File System)是微軟開發的具有較好容錯性和安全性的檔案系統。隨著Windows作業系統的發展,基於NT平台的Windows NT4.0己經發展到5.0,其基本檔案系統也升級為NTFS 5.0,己經全面取代了Windows 98的FAT32格式檔案系統。在核心模式檔案系統驅動程式的開發和核心相關程式的開發中,特別是不藉助W32子系統提供的檔案操作功能,而需要直接操作檔案系統的情況下,往往需要掌握NTFS檔案系統的結構。本文對NTFS檔案系統的磁碟結構、故障恢復和日誌系統進行了深入的分析。

NTFS的主要結構是卷,卷由硬碟上的邏輯分區組成。一個磁碟可能包含一個或多個卷。每個卷中又包含許多檔案。在NTFS檔案系統中,並沒有特別為檔案系統自身提供額外的空間。而將檔案系統所需的全部數據,如記錄卷的分配狀態點陣圖、檔案、目錄和系統引導程式等數據,像一般的檔案一樣儲存在硬碟上。這些系統檔案稱為元檔案(metafile),這些數據則稱為元數據(metadata)磁碟上的檔案使用簇連結在一起。一個簇的長度一定是物理扇區長度的整數倍,並總是2的幕。扇區對NTFS檔案系統是透明的,因此它不限制扇區的大小(通常是512個位元組)。簇的大小可因卷的大小而改變,一般是由NTFS格式化程式自動決定。

一個檔案在磁碟上的位置是通過主控檔案表MFT來定位的。主控檔案表MFT是NTFS中最重要的系統檔案,它是一個關係資料庫,由檔案記錄的數組組成,磁碟卷上的每一個檔案都有一個檔案記錄,當然大的檔案可能有多重記錄。MFT本身也有一條記錄自己的記錄。每個檔案記錄的長度是固定的(一般是1KB)。每個檔案由一個檔案引用號來標識,這是一個64位的數,它由檔案號(低48位)和檔案順序號(高16位)所組成。檔案號記錄著檔案的檔案記錄在MFT中的位置,檔案順序號則記錄著檔案記錄位置被重複使用的次數,即MFT檔案記錄被重複使用一次,則檔案順序號加1,這樣可以讓NTFS完成一致性檢查。MFT中的元檔案記錄的情況如圖1所示。

檔案系統結構 檔案系統結構

圖1

當目錄的屬性值存放在MFT表的基本檔案記錄中,該屬性就稱為常駐屬性(resident attribute)。對於常駐屬性,屬性值存放在屬性名的後面。如果一個目錄的屬性值太大,不能存放在一個檔案記錄中,那么NTFS將從Data區為該屬性值分配存儲空間。這些存儲空間通常稱為一個運行(run),用來存放屬性值,存儲在運行中的屬性稱為非常駐屬性(non-re sident attribute) 。MFT中的基本檔案記錄有一個指針指向大小為 2KB的運行(4KB是對應著4KB的簇尺寸),那是一個非常駐索引緩衝區,包含著下一層的目錄或檔案。採用b+樹結構儲存目錄信息,可以以很快的速度對目錄進行查詢,並且不需要去讀檔案自身的檔案記錄。在存儲大量的小檔案時,NTFS檔案系統能節約存儲空間,訪問速度也比較快的主要原因即在此。MFT中的目錄結構情況如圖2所示 。

檔案系統結構 檔案系統結構

圖2

Linux

Linux系統的一個重要的特徵就是支持多種不同的檔案系統,如:EXT,FAT,EXT2,EXT3,SYSV等。目前,Linux主要使用的檔案系統是EXT2和EXT3檔案系統,也是Linux用戶最常用的檔案系統。各種Linux的系統發布都將EXT2作為作業系統的基礎。EXT2檔案系統支持標準UNIX檔案類型:普通檔案、目錄檔案、特別檔案和符號連結。

EXT2磁碟布局

EXT2和其他邏輯塊檔案一樣,由邏輯塊序列組成,根據用途劃分,這些邏輯塊通常有:引導塊、超級塊、mode區及數據區等。

EXT2將其所占的邏輯分區劃分為塊組,由一個引導塊和其他塊組組成,每個塊組又由超級塊、組描述符表、塊點陣圖、索引節點點陣圖、索引節點表、數據區構成,如圖3所示。

檔案系統結構 檔案系統結構

圖3

每個塊中保存的這些信息是有關EXT2檔案系統的備份信息。當某個塊組的超級塊或mode受損時,這些信息可以用來恢復檔案系統。

檔案的目錄結構

Linux系統的目錄結構採用了將檔案名稱與檔案描述信息分開的方法。檔案目錄由檔案名稱和該檔案的索引節點號構成,一個目錄項共占16B。其中,檔案名稱占14個位元組,索引節點號(或索引節點指針)占2個位元組。因此,1 KB的盤塊中可以存放64(1K/16)個目錄項,這樣就節省了系統查找及訪問檔案的時間。在一個共有640個FCB的檔案目錄中查找一個檔案時,平均只需啟動磁碟5次,因此大大減少了系統開銷。如表1所示為一個檔案目錄的實例。

檔案系統結構 檔案系統結構

表1

一個檔案的磁碟索引節點占64個位元組,主要包括檔案標識符、檔案存取許可權、檔案物理地址、檔案長度、檔案連線係數、檔案存取時間等一些檔案的重要信息。

檔案的物理結構

Linux系統檔案的物理結構採用混合索引方式,對分配給檔案的磁碟塊進行管理。在Linux檔案系統的索引節點中存在一項i.addr[14],用於存放該檔案的磁碟塊號。如圖4所示為Linux系統的混合索引檔案結構。

檔案系統結構 檔案系統結構

圖4

Linux系統檔案實現了按名查找。通過檔案名稱訪問檔案的過程如下:通過檔案名稱查找檔案目錄,找到該檔案的索引結點號;通過索引結點號查找索引節點區,找到該檔案的索引點;根據索引結點中提供a. addr,找到該檔案在磁碟的相應的塊號序列;根據塊號,找到檔案內容。

由於Linux系統的EXT2檔案系統採用了合理巧妙的檔案系統結構,以及目錄結構,使得該檔案系統多項性能得到最佳化。採用EXT2系統,能夠大大改善磁碟I/O速度,提高I/O組織的靈活性及編程效率。因此,EXT2檔案系統為開發嵌入式系統及實時套用系統提供了廣泛的基礎和手段。

FAT檔案系統與NTFS檔案系統目錄的比較:FAT檔案系統直接以檔案控制塊作為檔案目錄,這樣檔案系統目錄相應較大,查詢速度較慢。以索引結點作為檔案目錄,對於一些小的檔案系統是可以的,但是對較大型的檔案系統就不適用了。Linux系統的檔案目錄為:檔案名稱、索引結點號。這使得Linux系統的檔案目錄更小,查詢速度更快 。

相關詞條

熱門詞條

聯絡我們