系統架構設計師: 檔案系統之索引節點
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),指向一個由多個指標構成的區塊,後者的指標又指向一個由多個指標構成的區塊,其指標又指向另一個由多個指標構成的區塊,這一區塊的指標又指向檔案資料的區塊。