はじめに
一定の容量のあるただのファイルを作成したいことがたまにある。例えばwordpressのupload容量を変更した際の動作テストを行ったりとかが一例。linuxのみならずmacでもddコマンドで簡単に作成することができるのでその方法を紹介。
ddコマンド
linuxもmacも共通の手順はこちら(macで実施した際のログ)
$ dd if=/dev/zero of=~/80M bs=1 count=83886080 83886080+0 records in 83886080+0 records out 83886080 bytes transferred in 189.533890 secs (442591 bytes/sec) $
80Mの空ファイルが作成される。中身は/dev/zeroなので、からっぽ。
上記例ではcountはバイト単位になる。
* 1024 * 1024 * 80 = 83886080
で80MByteという計算。
ただし、189.533890 secs とあるように、3分以上かかっている。
これは1回に読み書きするブロックサイズ(bsオプション)が1になっているため。
この値を1 -> 1024に変更すれば理論上は1024倍高速になる。
bsを1 -> 1024に変えてみた
$ dd if=/dev/zero of=~/80M_1024 bs=1024 count=81920 81920+0 records in 81920+0 records out 83886080 bytes transferred in 0.375389 secs (223464489 bytes/sec) $
作成されたファイルは同じく80Mだが、0.375389 secsで完了した。
bsが1の時と、1024の結果を比較した結果、504倍高速になったが、理論上の1024倍には届かなかった(残念だがそうゆうもんだ。。)。
意外と知られていないddの使い方
実はddで送った結果を直接他のサーバに送りつけることもできる。
dd if=/dev/sda | ssh root@転送先サーバ " dd of=/転送先ディレクトリ/server.sda.img"
DISKの中身を強制的にddコマンドで吸い上げ、他のサーバにイメージとして保存することもできる。今はDocker含むコンテナ全盛期の時代だが、KVMなどを使えば、吸い上げたイメージを元に仮想サーバとして動かすこともできる。
参考記事
https://qiita.com/S-T/items/8de3c150c7097bd021fa