複製鏈接
請複製以下鏈接發送給好友

文件系統結構

鎖定
文件系統是操作系統用於明確存儲設備(常見的是磁盤,也有基於NAND Flash的固態硬盤)或分區上的文件的方法和數據結構。文件系統是軟件系統的一部分,它的存在使得應用可以方便的使用抽象命名的數據對象和大小可變的空間。
中文名
文件系統結構
外文名
File System Structure
學    科
計算機科學與技術
類    別
計算機系統
簡    稱
FSS
主要系統
NTFS、Linux

目錄

文件系統結構基本概念

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

文件系統結構Linux

Linux系統的一個重要的特徵就是支持多種不同的文件系統,如:EXT,FAT,EXT2,EXT3,SYSV等。Linux主要使用的文件系統是EXT2和EXT3文件系統,也是Linux用户最常用的文件系統。各種Linux的系統發佈都將EXT2作為操作系統的基礎。EXT2文件系統支持標準UNIX文件類型:普通文件、目錄文件、特別文件和符號鏈接。
EXT2磁盤佈局
EXT2和其他邏輯塊文件一樣,由邏輯塊序列組成,根據用途劃分,這些邏輯塊通常有:引導塊、超級塊、mode區及數據區等。
EXT2將其所佔的邏輯分區劃分為塊組,由一個引導塊和其他塊組組成,每個塊組又由超級塊、組描述符表、塊位圖、索引節點位圖、索引節點表、數據區構成,如圖3所示。
圖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 圖4
Linux系統文件實現了按名查找。通過文件名訪問文件的過程如下:通過文件名查找文件目錄,找到該文件的索引結點號;通過索引結點號查找索引節點區,找到該文件的索引點;根據索引結點中提供a. addr,找到該文件在磁盤的相應的塊號序列;根據塊號,找到文件內容。
由於Linux系統的EXT2文件系統採用了合理巧妙的文件系統結構,以及目錄結構,使得該文件系統多項性能得到優化。採用EXT2系統,能夠大大改善磁盤I/O速度,提高I/O組織的靈活性及編程效率。因此,EXT2文件系統為開發嵌入式系統及實時應用系統提供了廣泛的基礎和手段。
FAT文件系統與NTFS文件系統目錄的比較:FAT文件系統直接以文件控制塊作為文件目錄,這樣文件系統目錄相應較大,查詢速度較慢。以索引結點作為文件目錄,對於一些小的文件系統是可以的,但是對較大型的文件系統就不適用了。Linux系統的文件目錄為:文件名、索引結點號。這使得Linux系統的文件目錄更小,查詢速度更快 [2] 
參考資料
  • 1.    王蘭英, 居錦武. NTFS文件系統結構分析[J]. 計算機工程與設計, 2006, 27(3):418-419.
  • 2.    王紅. Linux文件系統結構分析[J]. 濰坊學院學報, 2011, 11(2):29-31.