Filesystems

inode 有什麼用?

  • April 10, 2020

我想知道將有關文件的資訊儲存在inode中而不是直接儲存在目錄中是否值得額外的成本。我高估了成本或忽略了一些重要的事情可能很好,但這就是我要問的原因。

我看到硬連結需要像“inode”這樣的東西,但如果成本真的像我想的那麼大,我想知道是否有任何理由證明它是合理的:

  • 使用硬連結進行備份很聰明,但與正常操作的效率相比,備份的效率並不重要
  • 對硬連結既沒有速度也沒有大小損失確實很重要,因為這種優勢僅適用於使用硬連結的少數文件,而對所有文件的訪問都會承受成本
  • 為幾個同名的二進製文件節省一些空間,例如bunzip2bcat可以忽略不計

我並不是說 inode/硬連結不好或沒用,但它能否證明額外間接的成本是合理的(記憶體肯定有很大幫助,但它不是靈丹妙藥)?

硬連結不是重點。它們不是擁有 inode 的原因。它們是副產品:基本上,任何合理的類 unix 文件系統設計(甚至 NTFS 在這一點上也足夠接近)都有免費的硬連結。

inode 是儲存文件所有元數據的地方:它的修改時間、它的權限等等。它也是磁碟上文件數據位置的儲存位置。這些數據必須儲存在某個地方。

將 inode 數據儲存在目錄中會帶來自己的成本。它使目錄變大,因此獲取目錄列表的速度較慢。您為每個文件訪問節省了一次查找,但是每次目錄遍歷(訪問文件需要其中幾個,文件路徑上的每個目錄一個)花費更多。最重要的是,它將文件從一個目錄移動到另一個目錄變得更加困難:您需要移動所有元數據,而不是只移動指向 inode 的指針。

Unix 系統始終允許您重命名或刪除文件,即使程序已打開它。(在某些 unix 變體上,幾乎總是這樣做。)在實踐中這是一個非常重要的屬性:這意味著應用程序不能“劫持”文件。重命名或刪除文件不會影響應用程序,它可以繼續讀取和寫入文件。如果文件被刪除,數據會一直存在,直到沒有程序再打開文件。這通過將程序與 inode 相關聯來促進。該程序不能與文件名相關聯,因為它可能隨時更改甚至消失。

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

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