塊大小和群大小之間的差異
我有一個關於塊大小和集群大小的問題。關於我所讀到的內容,我假設以下內容:
- 塊大小是塊的物理大小,大多為 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 時指定的塊大小有關,這是否正確?
我認為您感到困惑,可能是因為您已經閱讀了幾個使用不同術語的文件。像“塊大小”和“集群大小”這樣的術語沒有普遍意義,即使在文件系統文獻的上下文中也是如此。
文件系統
對於ext2或ext3,情況比較簡單:每個文件佔用一定數量的blocks。給定文件系統上的所有塊都具有相同的大小,通常是 1024、2048 或 4096 字節之一。大小介於 N 個塊加一個字節和 N+1 個塊之間的文件¹佔用 N+1 個塊。該塊大小是您使用 指定的
mke2fs -b
。沒有單獨的集群概念。特別是 MS-DOS 和早期版本的 Windows 使用的FAT文件系統具有類似的簡單空間分配。ext2 稱為塊,FAT 稱為群;這個概念是一樣的。
一些文件系統具有更複雜的分配方案:它們具有固定大小的塊,但可以使用同一個塊來儲存多個文件的最後幾個字節。這稱為塊子分配;Reiserfs和Btrfs可以做到這一點,但 ext3 甚至 ext4 都沒有。
實用程序
Unix 實用程序經常使用“塊”一詞來表示任意大小的單元,通常為 512 字節或 1kB。這種用法與任何特定的文件系統或磁碟硬體無關。從歷史上看,確實出現了 512B 塊,因為當時磁碟和文件系統經常以 512B 塊執行,但現代用法只是隨意的。傳統的 unix 實用程序和介面有時仍使用 512B 塊,儘管現在通常首選 1kB 塊。您需要檢查每個實用程序的文件以了解它使用的塊大小(有些有開關,例如
du -B
在df -B
Linux 上)。在 GNU/Linux
stat
實用程序中,該blocks
數字是文件使用的 512B 塊的數量。該IO Block
圖是文件輸入輸出的首選大小,原則上它是不相關的,但通常表示底層文件系統的塊大小(或集群大小,如果你想這樣稱呼它)。在這裡,您有一個 13 字節的文件,它在 ext3 文件系統上佔用一個塊,塊大小為 2048;因此該文件佔用 4 512 字節單元(稱為“塊”stat
)。磁碟
大多數磁碟都有一個界面,將磁碟顯示為一堆扇區。磁碟只能寫入或讀取整個扇區,而不是單個位或字節。大多數硬碟都有 512 字節的扇區,儘管 4kB 扇區的磁碟在幾年前開始出現。
磁碟扇區大小與文件系統塊大小沒有直接關係,但一個塊是扇區的整數對性能更好。
¹例外:稀疏文件節省空間。