Files

為什麼 inode 大小是固定的?

  • October 17, 2016

我正在閱讀有關文件系統和儲存介質的資訊,但我不明白為什麼如果我創建一個塊大小的文件,我的 inode 就不能比一個更大的文件更小。作業系統不能根據文件大小動態選擇inode大小嗎?

inode 是固定大小的一個原因是在傳統的 Unix 文件系統格式(例如 ext4 仍然非常接近)中,inode儲存在本質上是一個表中。對於固定大小的項目,根據其索引號定位項目是微不足道的。對於任何其他資料結構,它需要更多的工作,也許更重要的是,需要對資料結構進行更多的隨機訪問讀取。

文件本身的大小不會影響 inode 本身,它傳統上儲存前幾個數據塊的位置。對於較長的文件,系統會分配額外的塊(間接塊)來保存其餘的位置。(請參閱維基百科頁面以獲得漂亮的圖片。)

我說的是“傳統”,因為例如 ext4 實際上做的事情不同,它可以將符號連結的內容保存在 inode 本身中(它們通常很短,因此不分配完整塊很有用),以及傳統的單塊樹被範圍樹取代,即幾個塊的跨度。

據我所知,在 ext4 上支持大於最小大小的 inode 的原因是允許儲存新欄位,並將額外空間用於擴展屬性。查看第一個連結中的表格,ext4 inode 上原始 128 字節上方的額外欄位主要儲存更高精度的時間戳。在 SELinux 系統中,安全標籤被實現為擴展屬性,因此能夠將它們直接儲存在 inode 中會非常有用。

較新的文件系統,如 btrfs、XFS 和 ZFS 等具有較少正統格式的文件系統可能會做不同的事情,而且我對使用的文件系統知之甚少,比如 BSD 系統。

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