1. 程式人生 > >系統架構設計師: 檔案系統之索引節點

系統架構設計師: 檔案系統之索引節點

PS:下面的講解,基於Linux/Unix

        索引節點,其英文為 Inode,是 Index Node 的縮寫。

        儲存於檔案系統上的任何檔案都可以用索引節點來表示。

       檔案系統主要分為兩部分,一部分為元資料(metadata),另一部分為資料本身。元資料,是“包含了與資料有關資訊的資料”。索引節點就管理著檔案系統中元資料的部分。

       檔案系統中的任何一個檔案或目錄都與一個索引節點相對應。每個索引節點都是一個數據結構,儲存著目標資料的如下資訊:

        檔案大小(以位元組為單位)

        ( 存放檔案的)裝置識別符號

        (檔案所有者的)使用者識別符號

        使用者組識別符號

        檔案模式(所有者、使用者組及其他人對於檔案的讀取有怎樣的許可權)

        擴充套件屬性(如 ACL)

        檔案讀取或修改的時間戳

        連結數量(指向該檔案的硬連結數,記住,軟連結不計算在內)

        指向儲存該內容的磁碟區塊的指標

       檔案分類(是普通檔案、目錄還是特殊區塊裝置)

        檔案佔用的區塊數量

Linux 檔案系統從來不儲存檔案建立時間。

        一個典型的索引資料看起來會是像下面這樣:

# stat 01

Size:7845633Blocks:1786IO Block:4096regular file

Device:803h/2051dInode:12684895Links:1

Access:(0644/-rw-r--r--)Uid:(0/root)Gid:(0/root)

Access:2017-09-0701:46:54.000000000-0500

Modify:2017-04-2706:22:02.000000000-0500

Change:2017-04-2706:22:02.000000000-0500

          索引節點的建立與正在使用的檔案系統有關。一些檔案系統在建立時就建立了索引節點,故其索引節點的數量有限。而一些如 JFS 和 XFS 等系統也在檔案系統建立時建立索引節點,但使用動態節點分配,並按需擴大索引節點的數量,因此可以避免所有索引節點用完的情況。

        當用戶試圖讀取檔案或與該檔案相關的資訊時,他會使用檔名稱。但是,實質上這個檔名稱首先對映為儲存於目錄表

中的索引點節號碼。通過該索引節點號碼讀取到相對應的索引節點。

        索引節點號碼及相對應的索引節點存放於對映表(Inode table)中。

        索引節點只儲存元資料資訊,其中包括真正的資料儲存的區塊的資訊。

        大多數檔案系統會以 15個指標的形式來儲存資料結構。這 15個指標包括:

       直接指向檔案資料區塊的 12個指標,稱為直接指標(direct pointer)。

        一個單獨非直接指標(singly indirect pointer),指向一個由多個指標構成的區塊,後者的指標又指向檔案資料區塊。

        一個雙重非直接指標(doubly indirect pointer),指向一個由多個指標構成的區塊,後者的指標又指向一個由多個指標構成的區塊,這一區塊的指標又指向檔案資料的區塊。

        一個三重非直接指標(triply indirect pointer),指向一個由多個指標構成的區塊,後者的指標又指向一個由多個指標構成的區塊,其指標又指向另一個由多個指標構成的區塊,這一區塊的指標又指向檔案資料的區塊。