文件塊大小 - stat 和 ls 之間的差異
我注意到,當我執行以下操作時:
ls -ls file
它提供塊數,比如 8 個塊。
當我做:
stat file
我注意到塊數是 16,是 ls 給出的數字的兩倍。
我的文件系統上的塊大小是 4096。我了解到 ls 使用的塊的任意單位是 1024。說 stat 在報告塊時使用 512 字節的任意單位是否正確?
如果是這樣,是否存在不一致的原因?
我在 ext4 文件系統上執行 Ubuntu 11.10。
許多磁碟的扇區大小為 512 字節,這意味著磁碟上的任何讀取或寫入一次都會傳輸整個 512 字節的扇區。設計一個扇區沒有在文件之間分割的文件系統是很自然的(這會使設計複雜化並損害性能);因此文件系統傾向於對文件使用 512 字節的塊。因此,傳統的實用程序,例如
ls
和du
以 512 字節塊為單位指示大小。對於人類來說,512 字節的單位意義不大。1kB 是同一個數量級,而且更有意義。一個文件系統塊(文件被劃分的最小單位)實際上通常由幾個扇區組成:1kB、2kB 和 4kB 是常見的文件系統塊大小;所以 512 字節單元在文件系統設計中並沒有得到充分證明,除了傳統之外,根本沒有其他充分理由在磁碟驅動程序之外使用 512 字節單元。
所以你有一個沒有太多意義的傳統,還有一個更具可讀性的約定。有點像八進制和十六進制:沒有一個是對的,一個是錯的,它們是寫相同數字的不同方式。
許多工具都有選擇顯示單位的選項:
ls --block-size=512
對於 GNUls
,在 GNU和 GNUPOSIXLY_CORRECT=1
的環境中設置以獲取 512 字節單位(或傳遞以強制 1kB 單位)。GNU coreutils 中的命令公開為“塊大小”(值)是內部介面的作業系統相關值;取決於作業系統,它可能與文件系統或磁碟程式碼使用的大小相關,也可能不相關(通常不相關 - 請參閱塊大小和集群大小之間的差異)。在 Linux 上,無論任何底層驅動程序在做什麼,該值都是 512。的價值從不重要,它的存在只是一個怪癖。df``du``-k``stat``%B``%B