テスト用のファイルを作るとき、任意のサイズでファイルを作りたい場面で、簡単にファイルを用意する方法です。
テスト用のファイルが必要になりそうなときは、下記のような場面があります。
- ファイル伝送でアップロードやダウンロードを試したい。
- メール受信時のサイズ制限の動作を確認したい。
- ファイルサーバなどでクォータ設定の動作確認をしたい。
ddコマンドでファイルを作る
ファイルを簡単に作るときには、ddコマンドを利用するのが一般的です。
: 構文
: dd if=読込ファイル名 of=書込ファイル名 bs=ブロックサイズ count=ブロック数
:
: 読込ファイルとしてヌル生成デバイスを使う
$ dd if=/dev/zero of=/work/zero.dat bs=1024K count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.233196 s, 450 MB/s
: 読込ファイルとして乱数生成デバイスを使う
$ dd if=/dev/urandom of=/work/urandom.dat bs=1024K count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.294652 s, 356 MB/s
/dev/zeroと/dev/urandomについて
「/dev/zero」と「/dev/urandom」は、どちらもデバイスファイルの中のひとつで、疑似ファイルといわれるものです。デバイスファイルで有名どころは、「/dev/null」でしょうか。
- /dev/zero ・・・ ヌル文字(0x00)を生成するデバイスファイル(/dev/nullとは違う)
- /dev/urandom ・・・ 乱数文字を生成するデバイスファイル(/dev/randomとは違う)
$ od -N16 -Ax -tx1 zero.dat ・・・ /dev/zeroで作ったファイル
000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000010
$ od -N16 -Ax -tx1 urandom.dat ・・・ /dev/urandomで作ったファイル
000000 3c 19 c4 c0 a6 8c 7d 5f 85 98 f8 b1 c0 e0 97 7f
000010
オプションに指定する値で作成されるスピードは違う
オプションの指定で「bs(ブロックサイズ)」と「count(ブロック数)」に指定する値によって、作成されるスピードは変わります。
: サイズ100MiBのファイルを作成
$ dd if=/dev/urandom of=1K.dat bs=1K count=102400 oflag=direct
102400+0 records in
102400+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 4.32857 s, 24.2 MB/s
$ dd if=/dev/urandom of=100M.dat bs=100M count=1 oflag=direct
1+0 records in
1+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.482714 s, 217 MB/s
: サイズ1GiBのファイルを作成
$ dd if=/dev/urandom of=1K.dat bs=1K count=1048576 oflag=direct
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 39.3023 s, 27.3 MB/s
$ dd if=/dev/urandom of=1G.dat bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.89597 s, 219 MB/s