Jak mogę szybko zrobić duży plik?

26

Jaki jest szybki i łatwy sposób na utworzenie pliku o wielkości, powiedzmy, 2 GB?

ændrük
źródło

Odpowiedzi:

36

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
ændrük
źródło
dd ... bs=2G count=1wczytuje 2 GB do pamięci (w jednym read(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.
Claymation
19

Prostym sposobem byłoby użycie ddpolecenia do napisania pliku pełnego zer.

dd if=/dev/zero of=outputFile bs=2G count=1
  • if = plik wejściowy
  • z = plik wyjściowy
  • bs = bajty

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).

MikeVB
źródło
1
dodam tylko, że jeśli nie chcesz wszystkich zer, możesz wybrać if = / dev / random
Denwerko
Chociaż / dev / random zajmie więcej czasu.
con-f-use
10
Używanie / dev / random zajmie okropnie dużo czasu. Użyj /dev/urandomw 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.
CVn
1

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
LanceBaynes
źródło