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

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

次のことを実行するスクリプトへの最善のアプローチを見つけようとしています。

  1. dd を使用して 10 GB のファイルを作成し、完了するとファイルを削除し、スクリプトが終了する前に CTRL+C が入力された場合に 25 回繰り返すループ スクリプトを作成します。
  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私のメイン コンピューターでは、SATA SSD (私の が配置されている場所) に書き込むときに を使用すると [15 ~ 20%] 高速になります/tmp


ただし、問題が発生する場合がありますoflag=direct。次のリンクを参照してください。

'dd' では常に 'oflag=direct' を使用しないのはなぜですか?

関連情報