ちょっとしたパフォーマンステストで、書き込みを延々とし続けてほしいことがあった。
でも、Diskは溢れさせたくない。そんなときのスクリプト。
dd_write_loop.sh
# !/bin/bash
LOOP_COUNTS=100
OUTPUT_FILE_DIR="/tmp"
OUTPUT_FILE_NAME_PREFIX="dd_test"
BLOCK_SIZE="10M"
BLOCK_COUNT=100
trap "/bin/rm ${OUTPUT_FILE_DIR}/${OUTPUT_FILE_NAME_PREFIX}.*; exit" SIGINT
for ((i=0; i<$LOOP_COUNTS; i++))
do
output_file="${OUTPUT_FILE_DIR}/${OUTPUT_FILE_NAME_PREFIX}.${i}"
# 書き込み実行
# "oflag=direct"はメモリを通さずDiskに直接書き込む(Direct I/O))
/bin/dd if=/dev/zero of=${output_file} bs=${BLOCK_SIZE} count=${BLOCK_COUNT} oflag=direct
# 一時ファイル削除
/bin/rm ${output_file} && echo "ファイル削除完了: ${output_file}"
done
とめたくなったらCtrl + C
する。SIGINTをtrapしてあるので、ゴミファイルは残らない。
出力がうっとうしければ/dev/nullに捨てる。そして適当にバックグラウンドで動かしたりするとよい。
./dd_wirte_loop >/dev/null 2>&1 &
とめたくなったら、fg
コマンドを実行した上で、Ctrl + C
をする。
メモ
ddのオプションはif
、of
、iflag
、oflag
などクセがあって覚えにくい。と思ったら、INPUT、OUTPUTの頭文字だと気づいた。(今更)
ifはインプットファイル、iflagはインプットフラグ。(たぶん)