如何在 Linux 中填滿硬碟

如何在 Linux 中填滿硬碟

我正在對一段程式碼進行一些測試,並且想用資料填充硬碟。我發現dd可以立即產生巨大的文件,但df不同意。這是我嘗試過的:

dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))

ls -lh顯示一個10G的檔案。但是,df -h顯示分區並沒有縮小。那我需要做什麼才能df識別現在已取得的資料呢?我希望在單元測試中能夠快速編寫程式碼。

答案1

這個seek=<big number>技巧的麻煩在於文件系統(通常)很聰明:如果文件的一部分從未被寫入(因此全為零),它不會費心為它分配任何空間 - 所以,正如你'我們已經看到,您可以擁有一個不佔用任何空間的10GB 檔案(這稱為“稀疏檔案”,在某些情況下非常有用,例如某些資料庫實作)。

您可以強制分配空間(例如):

dd if=/dev/zero of=filename bs=$((1024*1024)) count=$((10*1024))

這將花費更長的時間,但實際上會填滿磁碟。我建議將區塊大小設為遠大於 1,因為這將決定dd進程進行多少個系統呼叫 - 區塊大小越小,系統呼叫越多,因此運行速度越慢。 (雖然超過 1MB 左右可能不會有太大區別,甚至可能會減慢速度...)

答案2

作為另一個選項,您可以將 yes 與單一字串一起使用,它比運行 dd if=/dev/urandom of=largefile 快大約 10 倍。像這樣

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

答案3

您已經建立了所謂的「稀疏檔案」 - 該檔案由於大部分內容是空的(即讀回為\0),因此除了實際寫入的內容(1B,10GB 之後)外,不會佔用磁碟上的空間的間隙)。

我不相信你可以創建巨大的文件,立即佔用實際磁碟空間 - 佔用物理空間意味著文件系統需要為你的文件分配磁碟區塊。

我認為您陷入了老式的“dd if=/dev/zero of=filename bs=100M count=100”,它受到驅動器順序寫入速度的限制。

答案4

停止使用seek並使用非常大的bs和/或count.事實上你正在做一個稀疏文件,顯然你不需要這樣做。

相關內容