Filesystems

塊大小和群大小之間的差異

  • July 16, 2021

我有一個關於塊大小和集群大小的問題。關於我所讀到的內容,我假設以下內容:

  • 塊大小是塊的物理大小,大多為 512 字節。沒有辦法改變這一點。
  • 集群大小是作業系統可讀寫的塊的最小大小。如果我創建一個新的文件系統,例如 ext3,我可以使用開關 -b 指定這個最小塊大小。幾乎所有程序,如 dumpe2fs、mke2fs 都使用塊大小作為集群大小的名稱。

如果我得到以下輸出:

$ stat test
File: `test'
Size: 13            Blocks: 4          IO Block: 2048   regular file
Device: 700h/1792d  Inode: 15          Links: 1

大小是以字節為單位的實際空間,塊是物理使用的塊(每個 512 字節)並且 IO 塊與創建 FS 時指定的塊大小有關,這是否正確?

我認為您感到困惑,可能是因為您已經閱讀了幾個使用不同術語的文件。像“塊大小”和“集群大小”這樣的術語沒有普遍意義,即使在文件系統文獻的上下文中也是如此。

文件系統

對於ext2ext3,情況比較簡單:每個文件佔用一定數量的blocks。給定文件系統上的所有塊都具有相同的大小,通常是 1024、2048 或 4096 字節之一。大小介於 N 個塊加一個字節和 N+1 個塊之間的文件¹佔用 N+1 個塊。該塊大小是您使用 指定的mke2fs -b。沒有單獨的集群概念。

特別是 MS-DOS 和早期版本的 Windows 使用的FAT文件系統具有類似的簡單空間分配。ext2 稱為塊,FAT 稱為;這個概念是一樣的。

一些文件系統具有更複雜的分配方案:它們具有固定大小的塊,但可以使用同一個塊來儲存多個文件的最後幾個字節。這稱為塊子分配ReiserfsBtrfs可以做到這一點,但 ext3 甚至 ext4 都沒有。

實用程序

Unix 實用程序經常使用“塊”一詞來表示任意大小的單元,通常為 512 字節或 1kB。這種用法與任何特定的文件系統或磁碟硬體無關。從歷史上看,確實出現了 512B 塊,因為當時磁碟和文件系統經常以 512B 塊執行,但現代用法只是隨意的。傳統的 unix 實用程序和介面有時仍使用 512B 塊,儘管現在通常首選 1kB 塊。您需要檢查每個實用程序的文件以了解它使用的塊大小(有些有開關,例如du -Bdf -BLinux 上)。

在 GNU/Linuxstat實用程序中,該blocks數字是文件使用的 512B 塊的數量。該IO Block圖是文件輸入輸出的首選大小,原則上它是不相關的,但通常表示底層文件系統的塊大小(或集群大小,如果你想這樣稱呼它)。在這裡,您有一個 13 字節的文件,它在 ext3 文件系統上佔用一個塊,塊大小為 2048;因此該文件佔用 4 512 字節單元(稱為“塊” stat)。

磁碟

大多數磁碟都有一個界面,將磁碟顯示為一堆扇區。磁碟只能寫入或讀取整個扇區,而不是單個位或字節。大多數硬碟都有 512 字節的扇區,儘管 4kB 扇區的磁碟在幾年前開始出現。

磁碟扇區大小與文件系統塊大小沒有直接關係,但一個塊是扇區的整數對性能更好。

¹例外:稀疏文件節省空間。

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