Ext4
目錄文件大小增加前一個目錄有多少個文件
在 Linux 或更具體的 EXT4 中,目錄文件的初始大小為 4kB。但是如果目錄中儲存了足夠多的文件,則目錄文件的大小會由於內部“文件列表”的增加而增加。但是,發生這種情況需要多少文件?我一直找不到可以回答這個問題的資源。
ext4 目錄條目的格式記錄在核心中。有兩種可能性。
- 對於線性目錄,每個條目佔用八個字節,加上文件名(以零結尾),四捨五入到四個字節。因此n文件條目佔用 8 × n字節加上所有文件名的長度,分別向上取整為四(包括終止的零)。目錄總是包括
.
並且..
每個佔用十二個字節。每個線性目錄也可以有一個十二字節的校驗和。塊中的最後一個條目的記錄長度擴展為覆蓋目前塊中的剩餘空間,因此目錄條目永遠不會跨越兩個文件系統塊。- 對於雜湊樹目錄,每個目錄中的第一個數據塊有一個 40 字節的根條目(其中包括
.
和的文件條目..
),每個後續數據塊都有一個 18 字節的節點。每個節點佔用 8 個字節,文件條目使用與線性目錄相同的資料結構,最終作為線性數組。因此目錄佔用的空間量更難計算:每個文件佔用 8 個字節加上其名稱的長度,四捨五入,樹形結構佔用第一個塊的 40 個字節加上每個額外塊的 18 個字節,每個節點 8 個字節。如果您想快速查看目錄大小的增加,請使用文件名較長的文件填充它 - 文件名的長度最多為 254 個字節,加上終止的零字節,總共佔用 264 個字節,因此在任一文件中都有 16 個這樣的條目目錄類型將需要超過 4096 個字節。
要確定一個目錄是線性的還是散列的,請檢查它的 inode,例如使用
debugfs
:debugfs: show_inode_info /path/to/directory Inode: 7329 Type: directory Mode: 0755 Flags: 0x1000 Generation: 2283115506 Version: 0x00000001 ...
如果目錄被散列,標誌將顯示 0x1000 設置,否則取消設置。