次のようなスクリプトを書くための最良の方法を見つけようとしています。
- ddを使用して10 GBのファイルを作成し、完了したらファイルを削除し、25回繰り返すか、スクリプトが終了する前にCtrl + Cを入力するループスクリプトを作成します。
- 各操作(例えば、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
私のメインコンピュータでは、/tmp
SATA SSD(私がいる場所)に書き込むときに速度が[15-20%]速くなります。
ただし、問題が発生する可能性がありますoflag=direct
。下記のリンクをご覧ください。