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?

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.