So füllen Sie eine Festplatte unter Linux

So füllen Sie eine Festplatte unter Linux

Ich teste gerade einen Code und möchte eine Festplatte mit Daten füllen. Ich habe festgestellt, dass man damit ddim Handumdrehen riesige Dateien erstellen kann, aber dfdas ist nicht der Fall. Folgendes habe ich versucht:

dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))

ls -lhzeigt eine 10-GB-Datei. df -hZeigt jedoch, dass die Partition nicht verkleinert wurde. Was muss ich also tun, damit dferkannt wird, dass die Daten jetzt vergeben sind? Ich hoffe auf etwas Schnelles, das ich in einem Unit-Test codieren kann.

Antwort1

Das Problem bei diesem seek=<big number>Trick besteht darin, dass das Dateisystem (normalerweise) schlau ist: Wenn in einen Teil einer Datei noch nie geschrieben wurde (und er daher nur aus Nullen besteht), macht es sich nicht die Mühe, dafür Speicherplatz zu reservieren. Wie Sie also gesehen haben, können Sie eine 10 GB große Datei haben, die keinen Speicherplatz beansprucht (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 beispielsweise wie folgt erzwingen:

dd if=/dev/zero of=filename bs=$((1024*1024)) count=$((10*1024))

das dauert zwar 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 ddProzess macht – je kleiner die Blockgröße, desto mehr Systemaufrufe und damit desto langsamer wird er laufen. (Ab etwa 1 MB macht es allerdings wahrscheinlich keinen großen Unterschied und kann die Dinge sogar verlangsamen...)

Antwort2

Alternativ können Sie yes zusammen mit einer einzelnen Zeichenfolge verwenden. Das ist etwa 10-mal schneller als dd if=/dev/urandom of=largefile. So

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

Antwort3

Sie haben eine sogenannte „Sparse-Datei“ erstellt – eine Datei, die, weil sie größtenteils leer ist (d. h. als \0 zurückgelesen wird), keinen anderen Speicherplatz auf der Festplatte beansprucht als den, in den sie tatsächlich geschrieben wird (1 B, nach 10 GB Lücke).

Ich glaube nicht, dass Sie im Handumdrehen riesige Dateien erstellen könnten, die tatsächlichen Speicherplatz beanspruchen – physischen Speicherplatz zu beanspruchen bedeutet, dass das Dateisystem Ihrer Datei Festplattenblöcke zuweisen muss.

Ich glaube, Sie müssen sich an das altmodische „dd if=/dev/zero of=filename bs=100M count=100“ halten, das durch die sequentielle Schreibgeschwindigkeit Ihres Laufwerks begrenzt ist.

Antwort4

Hören Sie auf zu verwenden seekund verwenden Sie ein sehr großes bsund/oder count. So wie es ist, machen Sie eineSparse-Datei, und das dürfen Sie natürlich nicht tun.

verwandte Informationen