
次のことを実行するスクリプトへの最善のアプローチを見つけようとしています。
- dd を使用して 10 GB のファイルを作成し、完了するとファイルを削除し、スクリプトが終了する前に CTRL+C が入力された場合に 25 回繰り返すループ スクリプトを作成します。
- 各操作の最後に、つまりdd、rmの順に時間を計って、ddとrmにかかった時間を正確に把握します。
これまでのところ、私は次のようなことを考えています:
for i in {1..25}
do
time sh -c "dd if=/dev/zero of=/user/home/test.img bs=10G count=1" >> /tmp/dd_timed.txt && time sh -c "rm -f /user/home/test.img" >> rm_timed.txt
done
もっと良い解決策をお持ちの方、あるいはこれを少し調整できる方はいらっしゃいますか?
答え1
さて、これがこれを実行する方法のようです。見た目は悪いですが、機能します。
#!/bin/bash
for i in {1..25}
do
{ time dd if=/dev/zero of=/home/user/test.img bs=1G count=10 oflag=direct >& / dev/null ; } 2>> /tmp/dd_timed.txt && { time rm /home/user/test.img >& /dev/null ; } 2>> /tmp/rm_timed.txt
done
答え2
使用した時間を比較してみると面白いかもしれません
time ( dd if=/dev/zero of=/tmp/test.img bs=1M count=1024; sync )
そして
time ( dd if=/dev/zero of=/tmp/test.img bs=1M count=1024 oflag=direct;sync )
sync
ターゲットデバイスへの書き込みが完了するまでの時間を測定するために含める必要があります。
oflag=direct
私のメイン コンピューターでは、SATA SSD (私の が配置されている場所) に書き込むときに を使用すると [15 ~ 20%] 高速になります/tmp
。
ただし、問題が発生する場合がありますoflag=direct
。次のリンクを参照してください。