Linux文件系統結構分析論文

摘 要:闡述了Linux系統的文件結構類型,指出了EXT2是在Linux系統中最爲常用的文件系統。

Linux文件系統結構分析論文

分析了EXT2文件系統的磁盤佈局、索引結點及目錄結構,研究了EXT2系統實現按名存取的方法,文件讀取速度更高效

關鍵詞EXT2文件系統;索引結點;混合索引;文件目錄

Linux系統的一個重要的特徵就是支持多種不同的文件系統,如:EXT、FAT、EXT2、EXT3、SYSV等。目前,Linux主要使用的文件系統是EXT2和EXT3文件系統,也是Linux用戶最常用的文件系統。

各種Linux的系統發佈都將EXT2作爲操作系統的基礎。EXT2文件系統支持標準UNIX文件類型:普通文件、目錄文件、特別文件和符號鏈接。

1 EXT2磁盤佈局

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

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

圖1 EXT2磁盤佈局在邏輯空間的映像每個塊中保存的這些信息是有關EXT2文件系統的備份信息。當某個塊組的超級塊或inode受損時,這些信息可以用來恢復文件系統。

2 EXT2索引結點

EXT2文件系統中的數據是以數據塊的方式存儲在文件中的。這些數據塊的大小相同,其大小在EXT2創建時設定。磁盤上存儲文件的基本單位是簇。一個簇也稱爲一個磁盤塊,它通常是2n個磁盤扇區大小。

EXT2文件系統用一個inode數據結構描述系統中的每一個文件,定義系統的拓撲結構。一個inode描述了一個文件中的數據佔用了哪些塊以及文件的訪問權限、文件的修改時間和文件的類型。EXT2文件系統中的每一個文件都用一個inode描述,而每一個inode都用一個獨一無二的數字標識。文件系統的inode都放在一起,在inode索引表中。

EXT2塊組中組描述符中的項稱爲組描述符,用於描述某個塊組的整體信息。每個塊組都有一個相應的組描述符來描述它,所有的組描述符形成一個組描述符表,並在使用時被調入塊高速緩存。

EXT2中每個塊組有兩個位示圖塊,一個用於表示數據塊的使用情況,叫數據塊位圖;另一個用於表示索引結點的使用情況,叫索引結點位圖。位圖中的每一位表示該組中一個數據塊或一個索引塊的使用情況,用0表示空閒,用1表示已分配。

在Linux的EXT2文件系統中,索引結點inode分爲兩類,即磁盤索引結點和內存索引結點,通常也分別叫做EXT2 inode和VFS inode。

(1)磁盤索引節點

磁盤索引節點是指存放在磁盤上的索引節點。每個文件有唯一的一個磁盤索引節點,它主要包括以下內容:文件所有者標識號:指擁有該文件的文件主或同組的標識符。

文件類型:指明文件是普通文件、目錄文件還是特別文件等類型。

文件物理地址:指出數據文件所在的物理塊號。如在Linux系統中,通過15個地址項來表明文件所在的物理塊號。

文件存取權限:用戶對文件的操作類型,如讀、修改、執行等。

文件大小:文件所佔有的字節個數。

文件連接計數:指明系統中共享該文件的進程個數。

文件存取時間:指出該文件最近被進程存取的時間、最近被修改的時間及索引節點最近被修改的時間等。

(2)內存索引節點

內存索引節點是指存放在內存的索引節點。當文件打開時,要將磁盤索引節點複製到內存索引節點中,便於以後使用。內存索引節點包括以下內容:索引節點編號:標識內存索引節點。

索引節點狀態:指示該節點是否已被修改或已被上鎖。

訪問計數:當進程訪問該節點時,訪問計數加1,訪問完再減1。

鏈接指針:指向空閒鏈表和散列隊列的指針。

邏輯設備名:含有該文件的文件系統的邏輯設備名。

3 文件的目錄結構

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

一個文件的磁盤索引節點佔64個字節,主要包括文件標識符、文件存取權限、文件物理地址、文件長度、文件連接係數、文件存取時間等一些文件的重要信息。

4 文件的物理結構

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

(1)直接尋址。i。addr[0]—i。addr[9]這10項用於直接存放該文件所佔用的磁盤塊號,文件的前10個磁盤塊號依次放入其中。如果磁盤塊的大小爲1KB,則當文件長度不大於10K時,操作系統可採用直接索引文件的方式對文件進行訪問,直接從索引節點中找出該文件所在的磁盤塊號,訪問速度較快。

(2)一次間接尋址方式。i。addr[10]項中存放的磁盤塊號所指向的磁盤塊再用來存放下一級的磁盤塊號。假設一個磁塊大小爲1KB,每個磁盤塊號佔4個字節,則一個磁盤塊可存放256個(1KB/4B)磁盤塊號。這樣,通過一次間接尋址,i。addr[10]項就引出了256個磁盤塊號,所以,這一級可支持的文件長度爲256K。

(3)二次間接尋址方式。i。addr[11]存放的磁盤塊號採用兩級索引的方式,如果沿用以上的假設,則該項可引出2562個磁盤塊,可支持的文件長度爲2562K。

(4)三次間接尋址方式。i。addr[12]存放的磁盤塊號採用三級索引的方式,如果仍沿用以上的假設,則該項可引出2563個磁盤塊,可支持的文件長度爲2563K。

由以上分析可以看出,UNIX系統對於長度較小的文件具有較快的讀寫速度,同時又具有支持大文件的功能。

圖2 Linux的混合索引文件結構

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

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

5 結束語

由於Linux系統的EXT2文件系統採用了合理巧妙的文件系統結構,以及目錄結構,使得該文件系統多項性能得到優化。採用EXT2系統,能夠大大改善磁盤I/O速度,提高I/O組織的靈活性及編程效率。

因此,EXT2文件系統爲開發嵌入式系統及實時應用系統提供了廣泛的基礎和手段。