599 Stimmen

Schnelles Erstellen einer großen Datei auf einem Linux-System

Wie kann ich schnell eine große Datei auf einem Linux ( Red Hat Linux ) System?

dd wird die Aufgabe erfüllen, aber das Lesen von /dev/zero und das Schreiben auf das Laufwerk kann sehr lange dauern, wenn Sie eine mehrere hundert GB große Datei für Tests benötigen... Wenn Sie das wiederholt tun müssen, summiert sich die Zeit wirklich.

Der Inhalt der Datei ist mir egal, ich möchte nur, dass sie schnell erstellt wird. Wie lässt sich das bewerkstelligen?

Die Verwendung einer spärlichen Datei ist dafür nicht geeignet. Der Datei muss Speicherplatz zugewiesen werden.

37voto

Sepero Punkte 4025

Beispiele, wobei seek die Größe der gewünschten Datei in Bytes ist

#kilobytes
dd if=/dev/zero of=filename bs=1 count=0 seek=200K

#megabytes
dd if=/dev/zero of=filename bs=1 count=0 seek=200M

#gigabytes
dd if=/dev/zero of=filename bs=1 count=0 seek=200G

#terabytes
dd if=/dev/zero of=filename bs=1 count=0 seek=200T

Aus der dd-Manpage:

BLOCKS und BYTES können von den folgenden multiplikativen Suffixen gefolgt werden: c=1, w=2, b=512, kB=1000, K=1024, MB=1000*1000, M=1024*1024, GB =1000*1000*1000, G=1024*1024*1024, und so weiter für T, P, E, Z, Y.

28voto

max Punkte 8677

Um eine 1 GB große Datei zu erstellen:

dd if=/dev/zero of=filename bs=1G count=1

18voto

Humungous Hippo Punkte 181

Ich weiß nicht viel über Linux, aber hier ist der C-Code, den ich vor vielen Jahren geschrieben habe, um große Dateien auf DC Share zu fälschen.

#include < stdio.h >
#include < stdlib.h >

int main() {
    int i;
    FILE *fp;

    fp=fopen("bigfakefile.txt","w");

    for(i=0;i<(1024*1024);i++) {
        fseek(fp,(1024*1024),SEEK_CUR);
        fprintf(fp,"C");
    }
}

11voto

Yogesh Punkte 607

Sie können auch den Befehl "yes" verwenden. Die Syntax ist recht einfach:

#yes >> myfile

Drücken Sie die Tastenkombination "Strg + C", um den Vorgang zu stoppen, da er sonst den gesamten verfügbaren Speicherplatz verbraucht.

Um diese Datei zu bereinigen, führen Sie aus:

#>myfile

wird diese Datei bereinigt.

7voto

Barry Brown Punkte 19577

Ich glaube nicht, dass du viel schneller sein wirst als dd. Der Flaschenhals ist die Festplatte; Hunderte von GB an Daten darauf zu schreiben, wird sehr lange dauern, egal wie man es macht.

Aber hier ist eine Möglichkeit, die für Ihre Anwendung funktionieren könnte. Wenn Sie sich nicht um den Inhalt der Datei kümmern, wie wäre es, eine "virtuelle" Datei zu erstellen, deren Inhalt die dynamische Ausgabe eines Programms ist? Anstatt die Datei zu öffnen(), öffnen Sie mit popen() eine Pipe zu einem externen Programm. Das externe Programm generiert Daten, wann immer sie benötigt werden. Sobald die Pipe geöffnet ist, verhält sie sich wie eine normale Datei, da das Programm, das die Pipe geöffnet hat, fseek(), rewind() usw. ausführen kann. Wenn Sie mit der Pipe fertig sind, müssen Sie pclose() anstelle von close() verwenden.

Wenn Ihre Anwendung eine bestimmte Dateigröße benötigt, muss das externe Programm verfolgen, an welcher Stelle der "Datei" es sich befindet und ein eof senden, wenn das "Ende" erreicht ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X