2011-04-17 99 views
19

爲什麼du的輸出經常和du -b有差別? -b--apparent-size --block-size=1的簡寫。大多數情況下只使用--apparent-size可以獲得相同的結果,但--block-size=1似乎可以解決問題。我想知道輸出是否正確,哪些數字是我想要的? (即,實際文件大小,如果複製到另一個存儲設備)爲什麼`du`的輸出經常與`du -b`差異很大

+6

爲什麼downvote?這看起來像一個非常好的問題。請有禮貌地發表評論,如果你想減少問題或答案,以便每個人都可以學到一些東西。匿名downvote是一個潛在的教學時刻扔掉。 – 2011-04-17 16:38:52

+1

@Pete:可能是因爲這是關於StackOverflow的主題。我希望有更多的高聲譽用戶會注意到。 – 2011-04-17 20:41:55

回答

21

外觀尺寸是您的應用程序認爲是文件中的字節數。如果您決定通過FTP或HTTP發送文件,則會通過網絡傳輸的數據量(不包括協議標題)。這也是cat theFile | wc -c的結果,以及如果使用mmap加載整個文件,文件佔用的地址空間量。

磁盤使用情況是由於文件佔用該空間而無法用於其他內容的空間量。

在大多數情況下,外觀尺寸小於磁盤使用量,因爲磁盤使用量計算文件最後(部分)塊的全部大小,並且外觀尺寸只計數最後一個塊中的數據。然而,當你有一個稀疏文件時,表面大小會變得更大(當你尋找文件末尾的某處時會創建稀疏文件,然後在那裏寫一些東西 - 操作系統並不打算創建大量充滿零的塊 - - 它只爲您決定寫入的文件部分創建一個塊)。

+0

謝謝!這是一個徹底的解釋。那麼爲什麼我需要讓'--block-size = 1'具有與'wc -c theFile'相同的輸出(保存cat進程)。看起來像'du'只輸出正確的字節數,當我指定-h,-k,-m,-B1等時?但也許這是另一個問題? 'du'默認輸出塊的使用情況,而不是字節的使用情況? – knittl 2011-04-17 16:57:14

+0

@ knittl:我不知道。 – 2011-04-17 19:00:55

+0

很好的解釋,但不會談論問題中存在的'--block-size = 1' - -1。 – 2017-02-17 18:41:20

2

因爲默認情況下,du提供的磁盤使用率與文件大小相同或更大。由於根據--apparent大小說

print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be 
larger due to holes in (`sparse') files, internal fragmentation, indirect blocks, and the like 
+0

那麼究竟是什麼'表觀大小'呢?和我完全相反:外觀尺寸幾乎總是比磁盤使用量高出幾個量級 – knittl 2011-04-17 16:34:07

0

比較(例如)du -bmdu -m

-b--apparent-size --block-size=1, 但隨後m覆蓋塊大小是1M

-bh爲與-h類似: 的-bh裝置--apparent-size --block-size=1 --human-readable,並再次h重寫該塊大小。

2

文件和文件夾有其真實大小和磁盤大小

  • --apparent尺寸是文件或文件夾的實際尺寸

  • 磁盤上的大小是字節數的文件或文件夾在磁盤上。使用時只需杜

如果遇到明顯的大小几乎總是比磁盤使用率較高的幾個數量級 同樣的事情,那麼就意味着你有很多的文件('疏')文件與內部碎片或間接塊。