Erstellen Sie eine große Datei in kürzerer Zeit


18

Ich möchte eine große Datei ~ 10G mit Nullen und Zufallswerten erstellen. Ich habe versucht mit:

dd if=/dev/urandom of=10Gfile bs=5G count=10

Es wird eine Datei mit ca. 2 GB erstellt und mit dem Beendigungsstatus '0' beendet. Ich verstehe nicht warum?

Ich habe auch versucht, eine Datei zu erstellen mit:

head -c 10G </dev/urandom >myfile

Es dauert ungefähr 28-30 Minuten, um es zu erstellen. Aber ich möchte, dass es schneller erstellt wird. Hat jemand eine Lösung?

Außerdem möchte ich zum Vergleich mehrere Dateien mit demselben (Pseudo-) Zufallsmuster erstellen. Kennt jemand einen Weg, das zu tun?


Willkommen bei AskUbuntu! Sie erhalten wahrscheinlich einen Fehler ddaufgrund der Blockgröße. Vielleicht möchten Sie sich diesen Beitrag ansehen: stackoverflow.com/questions/6161823/… er enthält einige gute Antworten zur Berechnung der besten Blockgröße sowie einige Benutzerskripte / -programme und andere Vorschläge, die verwendet werden dd.
Keine Zeit,

Antworten:


12

Wie wäre es mit der Verwendung von fallocate? Mit diesem Tool können wir Speicherplatz für eine Datei vorbelegen (sofern das Dateisystem diese Funktion unterstützt). Wenn Sie beispielsweise einer Datei mit dem Namen "example" 5 GB Daten zuweisen, haben Sie folgende Möglichkeiten:

fallocate -l 5G example

Dies ist viel schneller als dd und ordnet den Speicherplatz sehr schnell zu.


Enthält diese Datei zufällige Daten oder enthält sie alles, was sich auf dem zugewiesenen Speicherplatz befindet?
cprn

Es wird alle Nullen enthalten. Grundsätzlich ist der Speicherplatz vorbelegt, und wenn Sie die Daten nicht ändern, wird davon ausgegangen, dass sie Null sind.
Colin Ian King

Wie kann das dann schneller gehen als Dumping /dev/zero?
cprn

1
Es ist sehr schnell, da es sich um einen Systemaufruf handelt, der die Vorbelegung blockiert (z. B. reserviert er den Speicherplatz, führt aber nur minimale E / A-Vorgänge aus), wobei das Ändern von / dev / zero in eine Datei eine Menge Lese- / Schreibvorgänge erfordert.
Colin Ian King

Ich erhöhe dieses. Eine letzte Frage ... Ich habe sie truncatein der Vergangenheit verwendet und festgestellt, dass sie die Datei nicht physisch auf dem Gerät zuordnet und nur eine beliebige große Datei erstellt, bis auf sie zugegriffen wird, unabhängig vom verfügbaren Speicherplatz. Sind Sie sicher, dass dies nicht der Fall ist fallocate? Ich würde es überprüfen, aber ich bin auf einem Handy ...
cprn

9

Sie können ddeine Datei erstellen, die nur aus Nullen besteht. Beispiel:

dd if=/dev/zero of=zeros.img count=1 bs=1 seek=$((10 * 1024 * 1024 * 1024 - 1))

Dies ist sehr schnell, da nur ein Byte wirklich auf die physische Festplatte geschrieben wird. Einige Dateisysteme unterstützen dies jedoch nicht.

Wenn Sie eine Datei mit pseudozufälligen Inhalten erstellen möchten, führen Sie Folgendes aus:

dd if=/dev/urandom of=random.img count=1024 bs=10M

Ich schlage vor, dass Sie 10M als Puffergröße verwenden ( bs). Dies liegt daran, dass 10M nicht zu groß ist, Sie aber dennoch eine gute Puffergröße erhalten. Es sollte ziemlich schnell sein, aber es hängt immer von der Geschwindigkeit Ihrer Festplatte und der Verarbeitungsleistung ab.



1

Beantwortung des ersten Teils Ihrer Frage:

Der Versuch, jeweils einen Puffer von 5 GB zu schreiben, ist keine gute Idee, da Ihr Kernel dies wahrscheinlich nicht unterstützt. Sie erhalten dadurch in keinem Fall einen Leistungsvorteil. 1M auf einmal zu schreiben ist ein gutes Maximum.


0

Diese Frage wurde vor 5 Jahren eröffnet. Ich bin nur darüber gestolpert und wollte meine Erkenntnisse hinzufügen.

Wenn Sie einfach verwenden

dd if=/dev/urandom of=random.img count=1024 bs=10M

es wird deutlich schneller arbeiten, wie von Xiaodongjie erklärt. Sie können es jedoch noch schneller machen, indem Sie eatmydatalike verwenden

eatmydata dd if=/dev/urandom of=random.img count=1024 bs=10M

Was eatmydatatut , ist es fsync macht den Disc Schreib schneller deaktiviert.

Weitere Informationen finden Sie unter https://flamingspork.com/projects/libeatmydata/ .


1
Die Art, wie ich es betrachte, ddist von Anfang an schnell genug und heißt aus einem bestimmten Grund libEAT-MY-DATA.
Karl
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.