Filesystems

目錄的 inode 是如何將文件名儲存在 ext4 文件系統中的?

  • August 20, 2017

目錄 inode 與正常文件的 inode 沒有本質區別,我從Ext4 磁碟佈局中理解的是:

目錄條目:因此,更準確地說,一個目錄是一系列數據塊,每個塊包含目錄條目的線性數組。

目錄條目將文件名連同指向其 inode 的指針一起儲存。因此,如果文件說每個塊都包含目錄條目,為什麼要debugfs報告與儲存在目錄的 inode 中的文件名不同的內容?這是 ext4 格式化快閃記憶體驅動器上的調試會話:

debugfs:  cat /sub
�
.
 ..�
    spam�spam2�spam3��spam4

我認為inode_i_block不能儲存這些文件名,我創建的文件名非常長,大小超過 60 個字節。cat在 inode 上執行debugfs也顯示了文件名,所以長文件名又在 inode 中了!

內容inode.i_block

根據 inode 描述的文件類型,inode.i_block可以以不同方式使用 60 字節的儲存空間。一般來說,正常文件和目錄將其用於文件塊索引資訊,特殊文件將其用於特殊目的。

此外,沒有提到在 雜湊樹目錄 部分中儲存文件名的 inode,這是較新的實現。我覺得我錯過了該文件中的某些內容。

主要問題是如果目錄的 inode 包含文件名,那麼它的數據塊儲存什麼?

目錄條目既儲存在數據塊中inode.i_block,也儲存在數據塊中。請參閱您連結到的文件中的“內聯數據”和“內聯目錄”。

cat輸出文件內容,即數據塊。類似於/bin/cat

如果將 inode 結構的字節寫入終端,該cat命令將無用。比較inode_dumpstat

一些文件會告訴您,歷史上的 unix 允許例如/bin/cat讀取這些數據,這是從使用者空間列出目錄條目的原始方式。即ls會打開目錄、read()條目並為您解釋它們。與 usingreaddir()不同,核心以標準格式提供條目,而不管底層文件系統格式如何。

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