[joshtronic-17.0ß ~/blog]$ cat post.md

Monitoring the progress of dd

Posted by Josh Sherman on in Command-line Interface

Whether you're zeroing out an old disk drive or creating a USB flash drive with your favorite Linux distro, dd is there to take care of business.

One of the shortcomings of using dd back in the day was the lack of transparency into what it was actually doing and where it was at in the process. This compounded interest when you factored in how slow drives used to be.

Fortunately, back in 2015 when GNU coreutils 8.24 came out, dd was expanded to have a status argument that you could use the set the level of information you'd like to be printed to stderr.

To show a bit of status information periodically, you can slap status=progress to the end of your command:

dd if=/path/to/some.iso of=/dev/drive status=progress

Not much to it!

Sadly though, if you're like me, you probably forget to include this on the regular. You could CTRL+c the command and start it over, or you could leverage the kill command to give you some information about the command like so:

kill -USR1 $(pgrep ^dd$)

Great for a one time status, but what if you want a periodic update akin to the native dd argument? Combine this with the watch command to spit out the status every few seconds:

watch -n 5 'kill -USR1 $(pgrep ^dd$)'

Adjust the number passed into -n to set the number of seconds you'd like the command to run and you're off to the races without having to restart the process!