Querying the dd command
Often times you'll find yourself dumping files from one place to another, or dumping a whole disk or partition for that matter. A pretty simple - hence popular - solution is to use the
dd command on Unix-based operating systems for this task.
However, depending on the size of the disk, your specific parameters to
dd, the maximum bandwidth of the underlying bus, and also the nature of the data being dumped, this process may require quite a long time - all without
dd giving any valuable feedback on the current state of things.
Today I learned that sending
dd a SIGINFO signal actually causes it to divulge what it's been up to. Simply retrieve the process id using
ps -a and use that pid to send the signal:
$ kill -USR1 <pid>
$ dd bs=4096 if=/dev/urandom of=/dev/sdb 13656124+0 records in 13656123+0 records out 55935479808 bytes (56 GB) copied, 7984.45 s, 7.0 MB/s
Written by Ingmar
Find all the IP ranges on an ASN
Add your response
Love this nuance about dd! Been awhile since I used it. Thanks for reminding me.
FYI - use the USR1 signal on Linux and SIGINFO on OS X/BSD
Here's some a fun example backgrounding dd as well as the SIGINFO call:
dd if=/dev/zero of=/dev/null bs=512 & pid=$! while ps -a $pid > /dev/null 2>&1 do # throw away stderr if we kill dd between ps and kill -SIGINF kill -SIGINFO $pid 2>/dev/null sleep 1 done & sleep 5 kill $pid
You're right, thanks for reminding me about the existence of the SIGINFO signal. Indeed, some implementations of
dd listen to that (non-POSIX) signal instead of USR1 in order to write the current input and output block counts to stderr. This seems to be the case for most BSD variants and Mac OS X, as you mentioned.
Thanks for the remark!