目錄大小是如何計算的?

目錄大小是如何計算的?

我在我的 CentOS 7.3 實例上運行了這個。

[user01@ ~]$ rm -rf my-very-own-directory/
[user01@ ~]$ mkdir my-very-own-directory/ 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 6           Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ mkdir my-very-own-directory/00
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 16          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ date > my-very-own-directory/date.txt 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 32          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ echo "content" > my-very-own-directory/content
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 47          Blocks: 0          IO Block: 4096   directory
  • 初始創建 => 大小 = 6
  • 新增名稱長度為 2 個位元組的條目 => 大小為 16 (6 + 8 + 2)
  • 新增另一個名稱長度為 4 個位元組的條目 => 大小為 32 (16 + 8 + 8)
  • 新增另一個名稱長度為 7 位元組的條目 => 大小為 47 (32 + 8 + 7)

2個問題:

  1. 建立的目錄大小為6,為什麼?
  2. 目錄的每個新條目,無論是子目錄的文件,都會增加「我自己的目錄」的大小。問題是,大小增加了8+(檔案名稱/目錄名稱的長度)。為什麼是8?

答案1

目錄格式完全取決於檔案系統。

至少,目錄條目必須包含檔案名稱和索引節點號。

要使用Linuxext4檔案系統(和舊版本)作為範例,原始目錄條目具有索引節點號(4 位元組)、檔案名稱長度(2 位元組)和總條目長度(2 位元組),加上檔案名稱本身。 (IIRC 明確指定總長度以允許填充等。)

當前版本(來自ext3)還支援樹型存儲,它允許更快地查找包含大量文件的目錄,但格式當然更複雜。

儘管在 上ext4,目錄的大小僅顯示為區塊大小的倍數,即空目錄具有大小4096,並且在創建足夠的檔案需要為其分配新資料區塊之前它不會增加。

RHEL 7 使用 XFS 作為預設檔案系統,因此您可能正在執行該系統。XFS 有多種目錄格式,用於小目錄的縮寫形式本質上具有相同的最小索引節點號+檔案名稱+檔案名稱長度+總長度集。

相關內容