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_sizeist die Größe Ihrer Testdatei in Bytes?
ddDie 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 truncateauf einem Dateisystem, das Sparse-Dateien unterstützt, eine Sparse-Datei erstellt wird und fallocatenicht. 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 fallocatenoch truncatewird der Inhalt der Datei nicht auf einen bestimmten Wert wie gesetzt ddAnstatt den Inhalt einer Datei zugeordnet mit fallocateoder truncatekann 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 ddist 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 fallocatebesagt, dass die von ihr erstellten Dateien spaceeher 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!
NTFSPartition 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 * seekwird die Dateigröße
Unter OSX (und anscheinend Solaris) ist der mkfileBefehl ebenfalls verfügbar:
mkfile 10g big_file
Dadurch wird eine 10-GB-Datei mit dem Namen "big_file" erstellt. Fand diesen Ansatz hier.
truncateund fallocatenicht verfügbar sind. ddfunktioniert auch wie oben beschrieben, obwohl es mfü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/zeroals 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_testauf 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/urandomanstelle von /dev/zero. Ich konnte die Ausgabe von überhaupt nicht /dev/urandomsehr stark komprimieren .
/dev/zero, also /dev/urandomist 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 fallocateSie 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