Come posso creare rapidamente un file di grandi dimensioni?


26

Qual è un modo semplice e veloce per creare un file di dimensioni pari, ad esempio, a 2 GB?

Risposte:


36

Il metodo di riempimento zero (qui modificato per evitare potenziali colli di bottiglia della memoria ) ha impiegato 17 secondi per creare un file da 10 GB su un SSD e ha reso l'interfaccia di Ubuntu non rispondente.

$ 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 crea file di grandi dimensioni istantaneamente manipolando direttamente lo spazio su disco allocato del file:

$ 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 funziona anche all'istante e crea file sparsi che non consumano spazio su disco effettivo fino a quando i dati non vengono scritti in seguito:

$ 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

dd ... bs=2G count=1legge 2 GB in memoria (in una read(2)chiamata). Se hai la pressione della memoria non è probabilmente la strada da percorrere. Più blocchi più piccoli possono essere più veloci se ciò significa meno paginazione.
Claymation

19

Un modo semplice sarebbe usare il ddcomando per scrivere un file pieno di zeri.

dd if=/dev/zero of=outputFile bs=2G count=1
  • if = file di input
  • di = file di output
  • bs = byte

Usa G nell'argomento size se vuoi gigabyte di computer (1024 * 1024 * 1024) o GB se vuoi gigabyte umani (1000 * 1000 * 1000).


1
aggiungerò semplicemente che se non vuoi tutti gli zeri, puoi scegliere se = / dev / random
Denwerko

Anche se / dev / random richiederà più tempo.
con-f-use

10
Usando / dev / random avrà un terribile sacco di tempo. Utilizzare /dev/urandomin quel caso (non è bloccante, ma non è garantito che abbia lo stesso livello di casualità). L'estrazione di 2 GB da uno dei due esaurirà quasi sicuramente l'entropia del tuo sistema, quindi non fare nulla di crittografico per un po 'di tempo dopo.
un CVn del

1

ftp://ftp.fsf.hu/testfiles/maketestfiles.sh

oppure Cerca è la dimensione del file desiderato in byte - 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.