Zu Testzwecken muss ich eine Datei einer bestimmten Größe generieren (um ein Upload-Limit zu testen).
Was ist ein Befehl zum Erstellen einer Datei einer bestimmten Größe unter Linux?
Zu Testzwecken muss ich eine Datei einer bestimmten Größe generieren (um ein Upload-Limit zu testen).
Was ist ein Befehl zum Erstellen einer Datei einer bestimmten Größe unter Linux?
Antworten:
dd if=/dev/zero of=upload_test bs=file_size count=1
Wo file_size
ist die Größe Ihrer Testdatei in Bytes?
dd
Die Werte sind auf 2 ^ 32 begrenzt. Um eine Datei mit mehr als 4 GB zu erstellen, gibt es einen Trick : dd if=/dev/zero of=test bs=1M count=<size in megabytes>
.
Bitte, modern ist einfacher und schneller. Unter Linux (wählen Sie eine aus)
truncate -s 10G foo
fallocate -l 5G bar
Es muss angegeben werden, dass truncate
auf einem Dateisystem, das Sparse-Dateien unterstützt, eine Sparse-Datei erstellt wird und fallocate
nicht. Eine Datei mit geringer Dichte ist eine , wo die Zuordnungseinheiten, die die Datei bilden, werden nicht tatsächlich bis zur Verwendung zugeordnet. Die Meta-Daten für die Datei wird dauern jedoch einige viel Platz, aber wahrscheinlich nicht annähernd der tatsächlichen Größe der Datei. Weitere Informationen finden Sie in den Ressourcen zu Dateien mit geringer Dichte, da dieser Dateityp Vor- und Nachteile hat. Bei einer nicht spärlichen Datei werden die Blöcke (Zuordnungseinheiten) vorab zugewiesen, was bedeutet, dass der Speicherplatz für das Dateisystem reserviert ist. Auch fallocate
noch truncate
wird der Inhalt der Datei nicht auf einen bestimmten Wert wie gesetzt dd
Anstatt den Inhalt einer Datei zugeordnet mit fallocate
oder truncate
kann ein ungenutzter Wert sein, der in den zugeteilten Einheiten während der Erstellung und dieses Verhalten existiert nicht erwünscht sein oder auch nicht . Das dd
ist die langsamste , weil es tatsächlich den Wert oder Teil der Daten auf die gesamte Datei - Stream schreibt wie mit seinen Befehlszeilenoptionen angegeben.
Dieses Verhalten kann möglicherweise unterschiedlich sein - abhängig vom verwendeten Dateisystem und der Konformität dieses Dateisystems mit einem Standard oder einer Spezifikation. Daher wird empfohlen, angemessene Untersuchungen durchzuführen, um sicherzustellen, dass die geeignete Methode angewendet wird.
truncate
. Es wurde eine Datei mit der Größe Null unter Verwendung der obigen Syntax erstellt. Die 'Manpage' für fallocate
besagt, dass die von ihr erstellten Dateien space
eher leer als Daten sind. Es scheint, dass es für einige erwartete Fälle wie "Wie lange dauert das Kopieren einer 1G-Datei" nicht sinnvoll wäre.
brew install coreutils
. Dadurch wird vor dem Befehl ein g eingefügt, sodass Sie es wie folgt ausführen müssen : gtruncate -s 10G foo
. Hoffe das hilft!
NTFS
Partition nicht funktioniert .
Um Toms Beitrag zu verfolgen , können Sie mit dd auch spärliche Dateien erstellen:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
Dadurch wird bei den meisten Unixen eine Datei mit einem "Loch" erstellt. Die Daten werden erst dann auf die Festplatte geschrieben oder belegen Speicherplatz, wenn etwas anderes als Null darauf geschrieben wird.
count=0
, bs * seek
wird die Dateigröße
Unter OSX (und anscheinend Solaris) ist der mkfile
Befehl ebenfalls verfügbar:
mkfile 10g big_file
Dadurch wird eine 10-GB-Datei mit dem Namen "big_file" erstellt. Fand diesen Ansatz hier.
truncate
und fallocate
nicht verfügbar sind. dd
funktioniert auch wie oben beschrieben, obwohl es m
für Megabyte ist, nicht M
.
Verwenden Sie diesen Befehl:
dd if = $ INPUT-FILE von = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
Um eine große (leere) Datei zu erstellen, setzen Sie $INPUT-FILE=/dev/zero
.
Die Gesamtgröße der Datei beträgt $BLOCK-SIZE * $NUM-BLOCKS
.
Neue Datei erstellt wird $OUTPUT-FILE
.
Sie können dies programmgesteuert tun:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
int fd = creat("/tmp/foo.txt", 0644);
ftruncate(fd, SIZE_IN_BYTES);
close(fd);
return 0;
}
Dieser Ansatz ist besonders nützlich , um anschließend mmap die Datei in den Speicher.
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob die Datei die richtige Größe hat:
# du -B1 --apparent-size /tmp/foo.txt
Achtung:
# du /tmp/foo.txt
wird wahrscheinlich 0 drucken, da es als Sparse-Datei zugewiesen wird, wenn es von Ihrem Dateisystem unterstützt wird.
siehe auch: Mann 2 offen und Mann 2 abgeschnitten
Einige dieser Antworten verwenden Sie /dev/zero
als Quelle für Ihre Daten. Wenn Sie die Upload-Geschwindigkeit Ihres Netzwerks testen, ist dies möglicherweise nicht die beste Idee, wenn Ihre Anwendung eine Komprimierung durchführt. Eine Datei voller Nullen wird sehr gut komprimiert . Verwenden Sie diesen Befehl, um die Datei zu generieren
dd if=/dev/zero of=upload_test bs=10000 count=1
Ich könnte upload_test
auf ungefähr 200 Bytes komprimieren . Sie könnten sich also in eine Situation versetzen, in der Sie denken, dass Sie eine 10-KB-Datei hochladen, aber es wäre tatsächlich viel weniger.
Was ich vorschlage, ist /dev/urandom
anstelle von /dev/zero
. Ich konnte die Ausgabe von überhaupt nicht /dev/urandom
sehr stark komprimieren .
/dev/zero
, also /dev/urandom
ist es gut.
dd if=/dev/zero of=my_file.txt count=12345
Es gibt viele Antworten, aber keine hat gut erklärt, was noch getan werden kann. Wenn Sie in Manpages nach dd suchen , können Sie die Größe einer Datei besser angeben.
Dadurch wird /tmp/zero_big_data_file.bin erstellt, das mit Nullen gefüllt ist und eine Größe von 20 Megabyte hat:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
Dadurch wird /tmp/zero_1000bytes_data_file.bin erstellt, das mit Nullen gefüllt ist und eine Größe von 1000 Bytes hat:
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
oder
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
Als Shell-Befehl:
< /dev/zero head -c 1048576 > output
Verwenden fallocate
Sie diese Option, wenn Sie nicht auf die Festplatte warten möchten.
Beispiel:
fallocate -l 100G BigFile
Verwendung:
Usage:
fallocate [options] <filename>
Preallocate space to, or deallocate space from a file.
Options:
-c, --collapse-range remove a range from the file
-d, --dig-holes detect zeroes and replace with holes
-i, --insert-range insert a hole at range, shifting existing data
-l, --length <num> length for range operations, in bytes
-n, --keep-size maintain the apparent size of the file
-o, --offset <num> offset for range operations, in bytes
-p, --punch-hole replace a range with a hole (implies -n)
-z, --zero-range zero and ensure allocation of a range
-x, --posix use posix_fallocate(3) instead of fallocate(2)
-v, --verbose verbose mode
-h, --help display this help
-V, --version display version