ext2文件系統解構探析

內容要點:html

  超級塊node

  塊位圖 linux

  inode位圖 數據結構

  數據塊 app

  inode結構 socket

  VFS基本原理ide

    整理聽課筆記及本身可與蒐集的各類資料,按理解總結一些文件系統,而且其中部份內容可參看個人上篇筆記《硬盤存儲結構小結》;函數

 

文件系統:工具

系統結構:
     塊設備:文件組織管理以物理塊爲單位。物理塊是塊設備上大小相同的存儲區域(如磁盤上的扇區)。一個塊究竟多大是在格式化時肯定的,例如mke2fs的-b選項能夠設定塊大小爲102四、2048或4096字節。
    一個文件系統通常使用塊設備上一個獨立的邏輯分區;
    文件邏輯分區中除了有表示文件內容的邏輯塊(稱爲數據塊)外,還設置了包含管理和控制信息的邏輯塊。
    磁盤上可能有多個邏輯分區,每一個分區可使用不一樣的文件子系統;
    ext2文件系統把邏輯分區劃分爲塊組,而且從0開始編號。每一個塊組包含的等量的物理塊(即塊組大小是相同的;物理分區最後一個塊組可能小些);在塊組的數據塊中存儲文件或目錄;
   spa


    上圖中啓動塊(Boot Block)的大小是肯定的,就是1KB,啓動塊是由PC標準規定的,用來存儲磁盤分區信息和啓動信息,任何文件系統都不能使用啓動塊。啓動塊以後纔是ext2文件系統的開始,ext2文件系統將整個分區劃成若干個一樣大小的塊組(Block Group),每一個塊組都由如下部分組成:


           
超級塊(Super Block)
    描述整個分區的文件系統信息,例如塊大小、文件系統版本號、上次mount的時間等等。
    超級塊位於每一個塊組的最前面,每一個塊組包含超級塊的內容是相同的(超級塊在每一個塊組的開頭都有一份拷貝);
    系統運行期間,把超級塊複製到系統緩衝區內,只需把塊組0的超級塊讀入內存,其它塊組的超級塊作爲備份


 
塊組描述符表(GDT,Group Descriptor Table)
    由不少塊組描述符組成,Linux組描述符爲32字節,整個分區分紅多少個塊組就對應有多少個塊組描述符。
    每一個塊組描述符(Group Descriptor)存儲一個塊組的描述信息,例如在這個塊組中從哪裏開始是inode表,從哪裏開始是數據塊等等。
    和超級塊相似,塊組描 述符表在每一個塊組的開頭也都有一份拷貝,具備相同內容的組描述符表放在每一個塊組中作爲備份,這些信息是很是重要的,一旦超級塊意外損壞就會丟失整個分區的數據,一旦塊組描述符意外損壞就會丟失整個塊組的數 據,所以它們都有多份拷貝。一般內核只用到第0個塊組中的拷貝,當執行e2fsck檢查文件系統一致性時,第0個塊組中的超級塊和塊組描述符表就會拷貝到其它塊組,這樣當第0個塊組的開頭意外損壞時就能夠用其它拷貝來恢復,從而減小損失。
 


塊位圖(Block Bitmap)
    每一個塊組都有一個塊位圖,位於組描述符表以後,用來描述本塊組中數據塊的使用情況,它自己佔一個邏輯塊,其中的每一個bit 表明本塊組中的一個塊,這個bit爲1表示該塊已用,這個bit爲0表示該塊空閒可用;各位的順序與塊組中數據塊順序一致;
    爲何用df命令統計整個磁盤的已用空間很是快呢?由於只須要查看每一個塊組的塊位圖便可,而不須要搜遍整個分區。相反,用du命令查看一個較大目錄的已用空間就很是慢,由於不可避免地要搜遍整個目錄的全部文件。
    調優:與此相聯繫的另外一個問題是:在格式化一個分區時究竟會劃出多少個塊組呢?主要的限制在於塊位圖自己必須只佔一個塊。用mke2fs格式化時默認塊大小是1024字節,能夠用-b參數指定塊大小,如今設塊大小指定爲b字節,那麼一個塊能夠有8b個bit,這樣大小的一個塊位圖就能夠表示8b個塊的佔用狀況,所以一個塊組最多能夠有8b個塊,若是整個分區有s個塊,那麼就能夠有s/(8b)個塊組。格式化時能夠用-g參數指定一個塊組有多少個塊,可是一般不須要手動指定,mke2fs工具會計算出最優的數值。
inode位圖(inode Bitmap)
    和塊位圖相似,自己佔一個塊,其中每一個bit表示一個inode是否空閒可用。
inode表(inode Table)
    一個塊組中全部文件的inode造成了inode表, 表項序號是inode號;
    咱們知道,一個文件除了數據須要存儲以外,一些描述信息也須要存儲,例如文件類型(常規、目錄、符號連接等),權限,文件大小,建立/修改/訪問時間等,也就是ls -l命令看到的那些信息,這些信息存在inode中而不是數據塊中。每一個文件都有一個inode,一個塊組中的全部inode組成了inode表。
    inode表佔多少個塊在格式化時就要決定並寫入塊組描述符中,mke2fs格 式化工具的默認策略是一個塊組有多少個8KB就分配多少個inode。因爲數據塊佔了整個塊組的絕大部分,也能夠近似認爲數據塊有多少個8KB就分配多少 個inode,換句話說,若是平均每一個文件的大小是8KB,當分區存滿的時候inode表會獲得比較充分的利用,數據塊也不浪費。若是這個分區存的都是很 大的文件(好比電影),則數據塊用完的時候inode會有一些浪費,若是這個分區存的都是很小的文件(好比源代碼),則有可能數據塊還沒用完inode就 已經用完了,數據塊可能有很大的浪費。若是用戶在格式化時可以對這個分區之後要存儲的文件大小作一個預測,也能夠用mke2fs的-i參數手動指定每多少個字節分配一個inode。
數據塊(Data Block)
    根據不一樣的文件類型有如下幾種狀況
    1.  對於常規文件,文件的數據存儲在數據塊中。
    2.  對於目錄,該目錄下的全部文件名和目錄名存儲在數據塊中,注意文件名保存在它所在目錄的數據塊中,除文件名以外,ls -l命令看到的其它信息都保存在該文件的inode中。注意這個概念:目錄也是一種文件,是一種特殊類型的文件。
    3.  對於符號連接,若是目標路徑名較短則直接保存在inode中以便更快地查找,若是目標路徑名較長則分配一個數據塊來保存。
    4.  設備文件、FIFO和socket等特殊文件沒有數據塊,設備文件的主設備號和次設備號保存在inode中。



  inode結構:
   inode是EXT2基本構件,表示文件系統樹型結構的節點。
   EXT2文件系統中的每一個文件由一個inode描述,且只能由一個inode描述。
   inode與文件一塊兒存放在外存,系統運行時,把inode寫入內存創建映像,加快文件系統速度。



虛擬文件系統VFS簡介:
  做用:
     Linux的虛擬文件系統VFS屏蔽了各類文件系統的差異,爲處理各類不一樣文件系統提供了統一的接口。
  工做原理:
     



描述:
   VFS並非一種實際文件系統
   EXT2等物理文件系統是存在於外存空間的,而VFS 僅存在於內存
   VFS是在系統啓動時創建,在系統關閉時消失的,物理文件系統是長期存在於外存。
   VFS中包含着向物理文件系統轉換的一系列數據結構,如VFS超級塊、VFS的inode等、各類操做函數的轉換入口。
文件系統註冊:
  向系統內核註冊文件系統的兩種方式:
     1. 系統引導時在VFS中註冊,在系統關閉時註銷。
     2. 把文件系統作爲可裝卸模塊,安裝時在VFS中註冊,並在模塊卸載時註銷
文件系統的安裝(也可稱爲mount掛載):
    文件系統除在VFS中註冊,還必須安裝到系統中。
    要安裝的文件系統必須已經存在於外存磁盤空間上,每一個文件系統佔用一個獨立的磁盤分區,而且具備各自的樹型層次結構。
    EXT3是RedHat Linux 5的標準文件系統,因此係統把EXT3文件系統的磁盤分區作爲系統根文件系統
    EXT2之外的文件系統安裝在根文件系統下的某個目錄下,成爲系統樹型結構中的一個分枝。
    用於安裝其它文件系統的目錄稱爲安裝點或安裝目錄
圖示:
     


參考: http://www.chinaup.org/man/linux_c/ch29s02.html

相關文章
相關標籤/搜索