それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

dd のコピー進捗状況を表示する- progress verbose outout

dd コマンドで進行状況を確認したい

dd といえば、USRシグナルを送れば進捗状況が見えるのですが。

kill -USR1 $pid; sleep 1; kill $pid

これは起動中にddコマンドに対してpidへシグナルを送ることで表示されるのですが。説明するのは大変ですよね。

進捗をコマンド引数で指定する status=progress

status=progress をつけると、どれくらい進んでいるか閲覧が可能になって便利。

dd if=/dev/zero of=out.img bs=1024 count=$((1024*512)) status=progress

rsync みたいに転送状況を知りたいときはこれを使うと便利。

ddするときは、忘れずにつけておきたい。

実例

次のような感じに、コピーの書き込み速度や、何バイトをddできたかを見ることができます。

takuya@NO NAME$ dd if=/dev/zero of=out.img bs=1024 count=$((1024*512)) status=progress
260588544 bytes (261 MB, 249 MiB) copied, 9 s, 28.7 MB/s

進捗見るならdd rescue が

dd の変わりに dd_rescue を使うと良いのは周知の事実ですが。dd のほうがbs count の細かい数字が指定しやすくていいですよね。

進捗を見る方法まとめ

dd コマンドで状況を確認するには、次の方法があります。

  • kill USR1 シグナル
  • ddrescue
  • dd status=progress

活用事例/ dd を直接使う場合

ddrescue なら、進捗を見れるが、dd は見れない・・・ってときに便利です。

dd で直接指定バイトを取り出すとき、状況が見やすくとても便利です。

sudo dd if=/dev/sda bs=512 skip=2048 count=$(( 408373247-2048)) of=/dev/nvme0n1p4 status=progress

上記のコマンドなら次のように表示される。

takuya@ubuntu:~$ sudo dd if=/dev/sda bs=512 skip=2048 count=$(( 408373247-2048)) of=/dev/nvme0n1p4 status=progress
28953080320 bytes (29 GB, 27 GiB) copied, 265 s, 109 MB/s

残り時間や、進捗のパーセンテージは自分の計算こそ必要です。通常のdd違って、状況を表示するだけでも、速度とコピー済みの実績バイト数がわかるので計算が可能になり、安心感が違います。

2022-05-08

加筆修正。verbose がキーワードになかったので、本文に追加