Files

什麼是超級塊、索引節點、Dentry 和文件?

  • March 2, 2022

從 M. Tim Jones 的文章Anatomy of the Linux file system中,我讀到 Linux 從一組通用對象的角度看待所有文件系統,這些對像是 superblockinodedentryfile。儘管該段的其餘部分解釋了上述內容,但我對這種解釋並不滿意。

有人可以向我解釋這些術語嗎?

首先,我意識到這不是您問題中的術語之一,您必須了解metadata。簡而言之,元數據是從維基百科竊取的,是關於數據的數據。也就是說,元數據包含有關一條數據的資訊。例如,如果我擁有一輛汽車,那麼我有一組關於汽車的資訊,但這些資訊不是汽車本身的一部分。註冊號、品牌、型號、製造年份、保險資訊等資訊。所有這些資訊統稱為元數據。正如您將看到的,在 Linux 和 UNIX 文件系統中,元數據存在於多個組織級別。

超級塊本質上是文件系統元數據,它定義了文件系統的類型、大小、狀態以及有關其他元資料結構的資訊(元數據的元數據)。超級塊對文件系統非常重要,因此每個文件系統都儲存在多個冗餘副本中。超級塊是文件系統的一個非常“高級”的元資料結構。例如,如果分區的超級塊 /var 損壞,則相關文件系統 (/var) 無法被作業系統掛載。通常在這種情況下,您需要執行fsck這將自動選擇超級塊的備用備份副本並嘗試恢復文件系統。備份副本本身儲存在分佈在文件系統中的塊組中,第一個儲存在從分區開始的 1 個塊偏移處。如果需要手動恢復,這一點很重要。您可以使用該命令查看有關 ext2/ext3/ext4 超級塊備份的資訊,該命令dumpe2fs /dev/foo | grep -i superblock在嘗試手動恢復時很有用。讓我們假設 dumpe2fs 命令輸出該行Backup superblock at 163840, Group descriptors at 163841-163841。我們可以使用此資訊以及有關文件系統結構的其他知識來嘗試使用此超級塊備份:/sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo. 請注意,我假設此範例的塊大小為 1024 字節。

inode存在於文件系統中或文件系統上,並表示有關文件的元數據。為清楚起見,Linux 或 UNIX 系統中的所有對像都是文件;實際的文件、目錄、設備等。請注意,inode 中包含的元數據中,沒有人類想像的文件名,這在以後很重要。inode 包含有關所有權(使用者、組)、訪問模式(讀取、寫入、執行權限)、文件類型和包含文件內容的數據塊的基本資訊。

dentry是通過將 inode 編號與文件名相關聯來將 inode 和文件結合在一起的粘合劑。Dentries 還在目錄記憶體中發揮作用,理想情況下,它可以將最常用的文件保存在手邊,以便更快地訪問。文件系統遍歷是 dentry 的另一個方面,因為它維護目錄及其文件之間的關係。

一個文件,除了是人類在看到這個詞時通常會想到的東西,實際上只是一個邏輯相關的任意數據塊。考慮到為跟踪它們而完成的所有工作(上圖),比較乏味。

我完全意識到,幾句話並不能對這些概念中的任何一個提供完整的解釋,因此請隨時在必要時詢問更多詳細資訊。

引用自:https://unix.stackexchange.com/questions/4402