Ich teste gerade einen Teil des Codes und möchte eine Festplatte mit Daten füllen. Ich habe festgestellt, dass dd
das im Handumdrehen riesige Dateien erstellen kann, aber nicht der df
Meinung ist. Folgendes habe ich versucht:
dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))
ls -lh
zeigt eine 10G-Datei. df -h
Zeigt jedoch, dass die Partition nicht verkleinert wurde. Was muss ich also tun, um zu df
erkennen, dass die Daten jetzt erfasst wurden? Ich hoffe auf etwas Schnelles, das ich in einem Unit-Test codiere.
linux
hard-drive
User1
quelle
quelle
Antworten:
Das Problem mit dem
seek=<big number>
Trick ist, dass das Dateisystem (normalerweise) klug ist: Wenn ein Teil einer Datei noch nie geschrieben wurde (und daher nur Nullen enthält), macht es nichts aus, ihm Speicherplatz zuzuweisen. Wie Sie gesehen haben, können Sie eine 10-GB-Datei haben, die keinen Speicherplatz belegt (dies wird als "Sparse-Datei" bezeichnet und kann in einigen Fällen sehr nützlich sein, z. B. bei bestimmten Datenbankimplementierungen).Sie können die Zuweisung des Speicherplatzes erzwingen (zum Beispiel) mit:
Das dauert viel länger, füllt aber tatsächlich die Festplatte. Ich empfehle, die Blockgröße viel größer als eins zu machen, da dies bestimmt, wie viele Systemaufrufe der
dd
Prozess macht - je kleiner die Blockgröße, desto mehr Systemaufrufe und damit desto langsamer wird er ausgeführt. (Obwohl es über etwa 1 MB hinausgeht, macht es wahrscheinlich keinen großen Unterschied und kann sogar die Dinge verlangsamen ...)quelle
Als weitere Option können Sie yes zusammen mit einer einzelnen Zeichenfolge verwenden und sie ist ungefähr zehnmal schneller als dd, wenn = / dev / urandom of = largefile ausgeführt wird. So was
quelle
Sie haben eine so genannte "Sparse-Datei" erstellt - eine Datei, die, da sie größtenteils leer ist (dh als \ 0 zurückgelesen wird), neben dem tatsächlich Geschriebenen (1B, nach 10 GB) keinen Speicherplatz auf der Festplatte beansprucht der Lücke).
Ich glaube nicht, dass Sie riesige Dateien erstellen können, die im Handumdrehen tatsächlichen Speicherplatz beanspruchen. Wenn Sie physischen Speicherplatz beanspruchen, muss das Dateisystem Ihrer Datei Festplattenblöcke zuweisen.
Ich denke, Sie stecken mit dem altmodischen "dd if = / dev / zero von = filename bs = 100M count = 100" fest, das durch die sequentielle Schreibgeschwindigkeit Ihres Laufwerks begrenzt ist.
quelle
Wenn Sie nur auf Fälle mit gefüllten Dateisystemen testen, ist ein Fallocate möglicherweise ausreichend. Und auch schneller! z.B
quelle
fallocate -l 150G foo
. Trotzdem +1 für das Erwähnen des Tools.Beenden Sie die Verwendung
seek
und verwenden Sie ein sehr großesbs
und / odercount
. Da es sich um eine spärliche Datei handelt , müssen Sie dies natürlich nicht tun.quelle
Wenn Sie die Festplatte buchstäblich füllen möchten, gehen Sie folgendermaßen vor:
Sie können optional count angeben, wenn Sie die Größe begrenzen möchten. Wenn Sie die Anzahl jedoch weglassen, wird sie nur so lange ausgeführt, bis Ihnen der Speicherplatz ausgeht.
Wie von psmears erwähnt, erhalten Sie eine bessere Leistung, wenn Sie die Blockgröße auf 1 MB (bs = 1M) anstelle von 1 B (bs = 1) festlegen. Dies dauert noch eine Weile, aber wenn Sie den Fortschritt Ihres Befehls überprüfen möchten, öffnen Sie eine separate Konsole und führen Sie die folgenden Befehle aus:
Verwenden Sie die PID von dd in diesem Befehl (ersetzen Sie die PID durch die PID von dd):
Dann schauen Sie sich Ihr dd-Terminal an. Dies ist natürlich von begrenztem Nutzen, wenn Sie nur versuchen, das Laufwerk zu füllen (Sie können einfach df oder du verwenden, um den freien Speicherplatz bzw. die Dateigröße zu überprüfen). Es gibt jedoch auch andere Situationen, in denen es praktisch ist, dd dazu zu bringen, seinen Fortschritt auszugeben.
Zusätzliches Guthaben: Eine praktische Verwendung für das Nullsetzen des freien Speicherplatzes besteht darin, dass Sie anschließend die "Null" -Dateien löschen und die gesamte Partition (oder den Datenträger, wenn Sie alle Partitionen auf Null gesetzt haben) zu einer Datenträger-Image-Datei machen können (z. B. , disk-backup.dd) und komprimieren Sie die Datei. Der freie Speicherplatz ist jetzt stark komprimierbar, sodass Ihr komprimiertes dd-Image viel kleiner ist als das ursprüngliche Blockgerät, dessen Inhalt es enthält.
Shenanigans: Zippen Sie eine große Nulldatei hoch und senden Sie sie per E-Mail an alle Ihre Freunde. Sagen Sie ihnen, dass es etwas wirklich cooles ist.
quelle
Sie erstellen eine 1-TB-Datei mit geringer Dichte mit dem folgenden Befehl:
Dies war nützlich, um zu testen, was passiert, wenn Kontingente überschritten werden oder ein Dateisystem voll ist.
df -h
zeigt den verfügbaren Platz immer kleiner.quelle