文件系統系列之二:ext3/vfs文件系統的結構分析

在上一篇文章中,我們介紹了基本的文件系統概念和SD卡中常用的FAT32文件系統。在有了上文的基礎,我們這次來學習一下linux中默認的ext文件系統。

ext文件系統是爲linux量身打造的,因此和linux的虛擬文件系統(VFS)在基礎概念上基本是一致的,本文也順帶介紹一下vfs。vfs能適配十幾種不同類型的文件系統,如上文介紹的FAT等。vfs進行適配的原理是在內存中講FAT文件系統的FAT、FDT等轉換成了ext文件系統中的inode結構了。

首先看一下ext3文件系統的結構總覽:

圖中我們看到了如下概念:引導扇區、塊、塊組、super block超級塊、塊組描述符表、塊位圖、i-節點位圖、i-節點表,我們依次介紹一下:

引導扇區

ext3文件系統中的前兩個扇區用來存放應道程序,稱爲引導扇區。

就像上文中提到FAT文件系統爲方便管理將幾個扇區組成一個簇一樣,ext文件系統將若干個扇區組成一個塊。一個塊大小一般爲1024字節、2048字節等,在創建文件系統時確定。塊是ext文件系統分配空間的最小單位。每個塊有一個唯一的編號,0號塊位於文件系統的起始扇區。

塊組

Block Group,ext文件系統的塊被組合在一起構成幾個大的塊組,每個塊組結構相同,大小一致。最後一個塊組由於磁盤扇區個數差異一般會小於其他塊組。

super block超級塊

超級塊用於存儲文件系統的配置參數,如塊大小,總塊樹,i-節點數,當前空閒塊數等。通常只有0號塊組的超級塊被文件系統使用,其他塊組中相應位置的超級塊作爲備份。
超級塊起始於2號扇區(0號和1號扇區爲引導扇區),當文件系統定義的塊大小爲2個扇區時,超級塊起始於1號塊;當文件系統定義塊大小爲4個扇區時,超級塊起始與0號塊的後兩個扇區。
超級塊的結構定義如下:


塊組描述符表

塊組描述符表是所有塊組的描述符聚集在一起組成的表。Ext3文件系統的每個塊組描述符佔用32字節,用以描述塊組中的位圖起始地址、i-節點表起始地址、空閒塊數、空閒i-節點數等信息,每個塊組都有這樣的一個塊組描述符,所有的塊組描述符集中存放,組成塊組描述符表。通常只有0號塊組的塊組描述符表被文件系統使用,其他塊組中相應位置的塊組描述符表作爲備份。

塊位圖

ext3文件系統以塊作爲數據存儲的基本單位,塊的分配情況由該塊組的塊位圖描述。
1,塊位圖的地址由該塊組的描述符給出
2,含有超級塊、塊組描述符表的塊組,塊位圖起始於塊組描述符表的下一個塊;對於沒有超級快、塊組描述符表的塊組,塊位圖起始於該塊組的第一個塊。

3,在創建ext3文件系統時,會將每個塊組包含的塊數於每個塊包含的bit數設置爲相同,這樣塊位圖佔用一個完整的塊就正好可以用一個bit表示當前塊組中一個塊的使用情況。

i-節點位圖

ext3文件系統使用i-節點描述文件的元數據,i-節點的分配情況由該塊組的i-節點位圖描述。
1,i-節點位圖的地址由該塊組的描述符給出
2,i-節點位圖起始於該塊組塊位圖的下一個塊
3,系統分配了一個塊來存放i-節點位圖,但實際上i-節點位圖用不完這個塊。
4,i-節點從1開始編號。

inode,i-節點表

先介紹一下inode,即i-節點,這是ext文件系統的一個核心概念。i-節點存放文件的初文件名以外的所有信息,如:文件的鏈接數、文件大小、文件時間信息、文件所屬用戶ID、文件所屬組ID、文件內容存放地址的塊指針,這些數據稱爲元數據。對比FAT文件系統,發現i-節點類似於將FAT文件系統中的文件目錄項中除文件名之外的信息提取了出來,但比其更爲強大。
1,每個文件或文件夾使用一個i-節點。
2,i-節點表位於i-節點位圖的下一個塊。
3,超級塊中記錄着文件系統中的i-節點總數和每個塊組中包含的i-節點數。

4,每個i-節點的基本大小爲128字節,但也可以由當超級塊的相關屬性定義爲大於128字節的大小。
5,再次強調,i-節點從1開始編號,而且1-10號的i-節點被系統保留。1號i-節點用於描述壞塊,2號i-節點用於指向根目錄,8號i-節點用於描述日誌。
6,已知一個i-節點號後就可以算出該i-節點所在的塊組,計算方法爲
(i-節點 - 1)/每個塊組i-節點數
7,i-節點的結構如下:

數據塊

數據塊主要是存儲文件的具體內容的區域。

目錄項

說道最後了,發現inode中沒有存儲的文件名一直也沒有出現,現在介紹一下。
i-節點中有其指向的文件類型信息,如i-節點指向一個文件時,其對應的數據區域存儲的是文件的內容。如i-節點指向的是一個目錄時,其對應的數據區域存儲的就是目錄項。這個概念和FAT文件系統中的文件目錄項相同。
1,一個目錄的i-節點指向的塊就是存儲當前目錄下所有文件、字文件夾的目錄區。
2,每個目錄項的長度不固定,其長度隨文件名長度變化,但必須爲4的倍數。文件名最長255字節,以ascii碼存儲。
3,目錄區中的前兩個目錄必須爲“.”和"..",代表當前目錄和父目錄。這一點和FAT文件系統相同。
4,目錄項結構定義如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章