Odpowiedzi:
Metoda zerowego wypełnienia (tutaj zmodyfikowana w celu uniknięcia potencjalnych wąskich gardeł w pamięci ) zajęła 17 sekund, aby utworzyć plik 10 GB na dysku SSD i spowodowała, że interfejs graficzny Ubuntu przestał odpowiadać.
$ time sh -c 'dd if=/dev/zero iflag=count_bytes count=10G bs=1M of=large; sync'
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.2003 s, 624 MB/s
real 0m17.642s
user 0m0.008s
sys 0m9.404s
$ du -B 1 --apparent-size large
10737418240 large
$ du -B 1 large
10737422336 large
fallocate natychmiast tworzy duże pliki, bezpośrednio manipulując przydzielonym miejscem na dysku:
$ time sh -c 'fallocate -l 10G large; sync'
real 0m0.038s
user 0m0.000s
sys 0m0.016s
$ du -B 1 --apparent-size large
10737418240 large
$ du -B 1 large
10737422336 large
truncate działa również natychmiast i tworzy rzadkie pliki, które nie zajmują faktycznego miejsca na dysku, dopóki dane nie zostaną zapisane później:
$ time sh -c 'truncate -s 10G large; sync'
real 0m0.014s
user 0m0.000s
sys 0m0.004s
$ du -B 1 --apparent-size large
10737418240 large
$ du -B 1 large
0 large
Prostym sposobem byłoby użycie dd
polecenia do napisania pliku pełnego zer.
dd if=/dev/zero of=outputFile bs=2G count=1
Użyj G w argumencie rozmiaru, jeśli chcesz gigabajty komputerowe (1024 * 1024 * 1024), lub GB, jeśli chcesz gigabajtów ludzkich (1000 * 1000 * 1000).
/dev/urandom
w takim przypadku (nie blokuje, ale nie gwarantuje tego samego poziomu losowości). Wyciągnięcie 2 GB z jednego z nich prawie na pewno całkowicie wyczerpuje entropię twojego systemu, więc nie rób przez chwilę nic kryptograficznego.
ftp://ftp.fsf.hu/testfiles/maketestfiles.sh
lub Szukaj to rozmiar pliku, który chcesz w bajtach - 1.
dd if=/dev/zero of=filename.big bs=1 count=1 seek=1048575 # 1 MByte
dd if=/dev/zero of=filename.big bs=1 count=1 seek=10485759 # 10 MByte
dd if=/dev/zero of=filename.big bs=1 count=1 seek=104857599 # 100 MByte
dd if=/dev/zero of=filename.big bs=1 count=1 seek=1073741823 # 1024 MByte
dd if=/dev/zero of=filename.big bs=1 count=1 seek=42949672959 # 40960 MByte
dd ... bs=2G count=1
wczytuje 2 GB do pamięci (w jednymread(2)
połączeniu). Jeśli masz presję pamięci, prawdopodobnie nie jest to właściwa droga. Więcej, mniejsze bloki mogą być szybsze, jeśli oznacza to mniej stronicowania.