Wie kann ich schnell eine große Datei erstellen?

26

Was ist eine schnelle und einfache Methode, um eine Datei mit einer Größe von beispielsweise 2 GB zu erstellen?

ændrük
quelle

Antworten:

36

Die Zero-Fill-Methode (hier geändert, um mögliche Speicherengpässe zu vermeiden ) benötigte 17 Sekunden, um eine 10-GB-Datei auf einer SSD zu erstellen, und führte dazu, dass die grafische Oberfläche von Ubuntu nicht mehr reagierte.

$ 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 erstellt sofort große Dateien, indem der zugewiesene Speicherplatz der Datei direkt geändert wird:

$ 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

Das Abschneiden funktioniert auch sofort und erstellt spärliche Dateien , die erst dann Speicherplatz beanspruchen, wenn die Daten später geschrieben werden:

$ 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
quelle
dd ... bs=2G count=1Liest 2 GB in den Speicher (in einem read(2)Aufruf). Wenn Sie Speicherdruck haben, ist das wahrscheinlich nicht der richtige Weg. Mehr, kleinere Blöcke können schneller sein, wenn es weniger Paging bedeutet.
Claymation
19

Eine einfache Möglichkeit wäre, mit dem ddBefehl eine Datei voller Nullen zu schreiben.

dd if=/dev/zero of=outputFile bs=2G count=1
  • if = Eingabedatei
  • of = Ausgabedatei
  • bs = bytes

Verwenden Sie G im Größenargument, wenn Sie Computer-Gigabytes (1024 * 1024 * 1024) oder GB Human-Gigabytes (1000 * 1000 * 1000) möchten.

MikeVB
quelle
1
Ich werde nur hinzufügen, dass, wenn Sie nicht alle Nullen wollen, Sie wählen können, ob = / dev / random
Denwerko
Obwohl / dev / random mehr Zeit in Anspruch nehmen wird.
con-f-use
10
Die Verwendung von / dev / random wird sehr viel Zeit in Anspruch nehmen . Verwenden Sie /dev/urandomin diesem Fall (es ist nicht blockierend, garantiert jedoch nicht die gleiche Zufälligkeit). Das Ziehen von 2 GB aus einem der beiden Formate erschöpft mit ziemlicher Sicherheit die Entropie Ihres Systems vollständig. Führen Sie anschließend eine Weile lang keine kryptografischen Schritte durch.
CVn
1

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

oder Suche ist die Größe der gewünschten Datei in Bytes - 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
quelle