回答:
dd if=/dev/zero of=upload_test bs=file_size count=1
どこをfile_size
バイト単位でテストファイルのサイズです
dd
の値には2 ^ 32の制限があるため、4 GBより大きいファイルを作成するには、トリックがありますdd if=/dev/zero of=test bs=1M count=<size in megabytes>
。
モダンの方が簡単で高速です。Linuxの場合(1つ選択)
truncate -s 10G foo
fallocate -l 5G bar
それは必要であると述べていることがtruncate
スパースファイルをサポートするファイルシステム上のスパースファイルを作成しますfallocate
しません。スパースファイルは、ファイルを構成するアロケーションユニットが、使用されるまで実際には割り当てられないファイルです。ファイルのメタデータにはなりますが、いくつかのかなりのスペースを取るませんが、おそらく何のどこのファイルの実際のサイズに近いです。このタイプのファイルには長所と短所があるため、詳細についてはスパースファイルに関するリソースを参照してください。非スパースファイルには、事前にブロック(アロケーションユニット)が割り当てられています。つまり、ファイルシステムが認識している限り、スペースが予約されます。また、fallocate
もtruncate
指定された値にファイルの内容を設定しませんように dd
代わりに、割り当てられたファイルの内容、fallocate
またはtruncate
作成時に割り当てられたユニットに存在していたごみの値である可能性があり、この動作は望ましくない場合があります。dd
それのコマンドラインオプションで指定されたとして、それは実際にはファイル全体ストリームへのデータの値またはチャンクを書き込むため、最も遅いです。
この動作は、使用されるファイルシステムとそのファイルシステムの標準または仕様への準拠に応じて、異なる可能性があります。したがって、適切な方法を使用しているかどうかを確認するために適切な調査を行うことをお勧めします。
truncate
。上記の構文を使用して、サイズがゼロのファイルを生成しました。の「manページ」fallocate
は、作成するファイルspace
がデータではなく空でいっぱいであることを示しています。「1Gファイルをコピーするのにどのくらい時間がかかるか」など、予想されるいくつかのケースでは役に立たないようです。
brew install coreutils
。これにより、コマンドの前にgが追加されるため、次のように実行する必要がありますgtruncate -s 10G foo
。お役に立てれば!
NTFS
パーティションでは動かないようです。
Tomの投稿をフォローアップするためだけに、ddを使用してスパースファイルを作成することもできます。
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
これにより、ほとんどのUNIXで「穴」のあるファイルが作成されます。データは実際にはディスクに書き込まれず、ゼロ以外のものが書き込まれるまで領域を占有しません。
count=0
、bs * seek
ファイルサイズになります
次のコマンドを使用します。
dd if = $ INPUT-FILE of = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
大きな(空の)ファイルを作成するには、を設定し$INPUT-FILE=/dev/zero
ます。
ファイルの合計サイズはになります$BLOCK-SIZE * $NUM-BLOCKS
。
作成される新しいファイルはになります$OUTPUT-FILE
。
プログラムでそれを行うことができます:
#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;
}
このアプローチは、後でファイルをメモリにmmapするのに特に役立ちます。
次のコマンドを使用して、ファイルのサイズが正しいことを確認します。
# du -B1 --apparent-size /tmp/foo.txt
注意してください:
# du /tmp/foo.txt
ファイルシステムでサポートされている場合、スパースファイルとして割り当てられるため、おそらく0を出力します。
参照:man 2 openおよびman 2 truncate
これらの回答のいくつかは/dev/zero
、データのソースとして使用しています。テストネットワークのアップロード速度が速い場合、アプリケーションが圧縮を行っている場合、これは最良のアイデアではない可能性があります。ゼロでいっぱいのファイルは非常によく圧縮されます。このコマンドを使用してファイルを生成する
dd if=/dev/zero of=upload_test bs=10000 count=1
upload_test
約200バイトまで圧縮できました。したがって、10KBのファイルをアップロードすると思われる状況に陥る可能性がありますが、実際にはそれよりはるかに少なくなります。
/dev/urandom
代わりにを使用することをお勧めし/dev/zero
ます。/dev/urandom
あまり出力を圧縮できませんでした。
/dev/zero
ので、/dev/urandom
良いです。
答えはたくさんありますが、他に何ができるかをうまく説明したものはありません。ddのマニュアルページを見ると、ファイルのサイズをより適切に指定することができます。
これにより、20メガバイトのサイズを持つ、ゼロで満たされた/tmp/zero_big_data_file.binが作成されます。
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
これにより、サイズが1000バイトのゼロで満たされた/tmp/zero_1000bytes_data_file.binが作成されます。
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
または
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
シェルコマンドとして:
< /dev/zero head -c 1048576 > output
fallocate
ディスクを待ちたくない場合に使用します。
例:
fallocate -l 100G BigFile
使用法:
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