タイミング付きddスクリプト

タイミング付きddスクリプト

次のようなスクリプトを書くための最良の方法を見つけようとしています。

  1. ddを使用して10 GBのファイルを作成し、完了したらファイルを削除し、25回繰り返すか、スクリプトが終了する前にCtrl + Cを入力するループスクリプトを作成します。
  2. 各操作(例えば、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私のメインコンピュータでは、/tmpSATA SSD(私がいる場所)に書き込むときに速度が[15-20%]速くなります。


ただし、問題が発生する可能性がありますoflag=direct。下記のリンクをご覧ください。

なぜ常に「dd」と一緒に「oflag = direct」を使用しないのですか?

関連情報