題 快速填滿沒有root的linux硬盤空間[關閉]


所以我和我的朋友正在參加比賽。他說他有辦法在linux服務器上填滿很多硬盤空間而不是root用戶。顯然,如果你是root用戶,你可以使用DD來做到這一點,但我們的比賽沒有根。有什麼好辦法嗎?


4
2018-04-07 04:28


起源


您不需要root來使用 dd。 - Dan D.


答案:


作為普通用戶,運行:

dd if=/dev/zero of=~/foo bs=1M

這在〜/ foo處創建一個空的(但仍佔用空間的文件)。在我的計算機上,它以39.9 MB / s的速度膨脹文件(我的處理器是3.0 GHz 64位Pentium 4),雖然我想你可以打開幾個終端並讓它們全部運行...

如果它只是命令行,並且您只能同時打開一個終端,請執行以下操作:

dd if=/dev/zero of=~/foo0 & dd if=/dev/zero of=~/foo1 & dd if=/dev/zero of=~/foo2 & dd if=/dev/zero of=~/foo3

那個硬盤快速填滿了。


10
2018-04-07 04:58



為什麼你認為同時寫幾個文件更快?在許多運行一個dd的機器上已經最大化了硬盤驅動器。添加更多只會增加開銷,甚至可能會減慢速度。 - Hennes
@Hennes嗯,它只能達到~40 MBps - 高清訪問聽起來有點慢。我想這可能是系統限制輸出的 /dev/zero 出於某種原因。例如, /dev/random 給出2個字節/秒,我的處理器甚至沒有呼呼。我認為它可能會限制輸出。 然而,我不是硬盤專家,而且我認為我的老了,所以我錯了 - 硬盤實際上可能是阻塞點。 - JamesTheAwesomeDude
使用塊大小時,可能會獲得更好的性能。將它保留為默認的512字節並運行一分鐘,在使用過的服務器上連續三次運行時,我得到81 MB /秒,60 MB /秒和78 MB /秒。當將塊大小設置為1 MB時,我在634.595759秒(97312006字節/秒)(92 MB /秒)內傳輸了61753786368個字節。 - Hennes
哈,哈, - 問題可能已經結束,但這仍然是我有史以來最好的SE貢獻之一: imgur.com/5v6wEum - JamesTheAwesomeDude


您不需要root來運行dd。

你可以通過很多方式做到這一點。運用 /dev/zero 作為一個無限的零來源似乎是我們所有人都會發生的事情,允許這樣的事情:

  • cat /dev/zero > ~/my_huge_partition_filling_file
  • cp /dev/zero ~/my_huge_partition_filling_file
  • 或者,使用dd作為用戶不必要地複雜:
    dd if=/dev/zero of=~/my_huge_partition_filling_file bs=512K。 (該 b小號ize部分是可選的,但是將其設置為大於512字節的值可以加快工作量,減少開銷。
  • 或者您可以創建自己的文件。獲取任何文件,將其自身連接以創建第二個文件大小的文件,然後重複該文件。這就是Terdon的回答。
  • 或者你可以寫一個程序無休止地寫一個文件。這可能是不必要的複雜,標準工具通常更快。此外,它感覺'非unix-like')。

你也可以通過創建一個偽造大文件 稀疏文件dd if=/dev/zero of=~/my_seemingly_huge_file skip=99999G 將立即創建一個非常小的文件,似乎是99999 GB。如果你想,你可以從中讀取99999 GB。然而在實踐中它幾乎不佔用空間。

將它與帶有可移動頁面的書籍進行比較。通常你有第1,2,3,4,5,6頁......(書末)。有了跳過,你就有了第1,2,3,99999頁。(寫入時會插入第4,5,6頁......等等,但在此之前,這本書會非常薄)。

最後, 之前 你嘗試以下任何一個: 檢查你在哪裡寫作。

如果是這樣的話 /home (例如,到 /home/myusername)和 /home 安裝在自己的分區上,然後你所能做的只是為homedirs填補空間。如果某人做了一些愚蠢的事情就像把/ home放在根文件系統上那麼你可以把它填滿95%。大多數管理員都會  像那樣。

(95%,實際上是92.2%,因為大多數文件系統的默認設置似乎為root保留了5%。這意味著它可以填充到105%,並且填充它的用戶將使用(100/105)%或95.2 %)


5
2018-04-07 09:12



需要幾個 > 在你的第一個命令;一個 稀疏文件 使用旁邊沒有空間。 - vonbrand
我錯過了 > 部分。至於稀疏,是的,這就是為什麼你偽造一個巨大的文件。 - Hennes
啊。在cat命令中。我責怪複製和粘貼cp命令加上咖啡因不足。 - Hennes


你可以通過做一些簡單的事情來佔用硬盤中的所有空間

echo foo > f1.txt; 
while true; do 
    cat f1.txt >> f2.txt && 
    cat f2.txt >> f1.txt; 
done

如果讓循環運行一段時間,文件將以指數方式增長並佔用所有可用空間。

dd 解決方案當然要高效得多,只是指出你肯定不需要root訪問權限。


3
2018-04-07 05:33





您可以通過“是”命令填充磁盤:

yes garrbage > ~/junk

為了防止,最好為用戶或使用定義配額 ulimit -f 防止創建大文件..

有關更多信息,請參閱配額手冊頁。


2
2018-04-07 09:36



這會比這快:cp / dev / zero~ / my_huge_partition_filling_file - user1947236
沒有, yes 是更加資源密集的方法。它可能是相同的,但它不會更快。 - Olli


第一:您不需要root是使用dd或其他工具來創建大文件或多文件。

但第二:如果磁盤格式化為默認選項,則無法填滿磁盤,因為最常用的linux文件系統會保留5%的磁盤空間為root保留,因此沒有啞的用戶可以填滿磁盤並使系統崩潰,因為真正重要的進程不能寫他們的文件(想想sshd,syslogd等)


1
2018-04-07 12:09



即使5%是為root用戶保留的,但在root分區中5%已經過去了,而普通用戶仍然可以耗盡可用的磁盤空間。 - Olli