dd is a very useful command to clone disks; however, given the typical size of modern disks, it can easily run for hours without any output. A simple trick allows us to monitor the progress of the cloning.
I will present here three methods to monitor the status of
dd; only the first can be used after the command has been launched.
kill command with
Despite its name, the command
kill can send any signal to a process; actually, if it weren’t for its default signal being
TERM it could as well being renamed sendsignal. Signal
USR1 is a generic signal indicating user-defined conditions; together with
USR2 it is used to extend the original set of available signals. Every program can interpret
USR1 signal it displays the current status in the same terminal where it was launched.
So, to monitor the progress of
dd launch this command from another terminal:
sudo kill -USR1 $(pgrep ^dd)
If you want to have regular updates you can use the command watch:
watch -n5 'sudo kill -USR1 $(pgrep ^dd)'
-n5 means “every 5 seconds”; pay attention to the single quotes.
NOTE: BSD or OSX users shall use
INFO instead of
USR1 signal will terminate
2. Using command
pv (Pipeline Viewer)
sudo apt-get install pv and use it in conjunction with
dd as follows:
dd if=/dev/urandom | pv | dd of=/dev/null
The output will be something like:
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
If you know the size in advance, you can use parameter
--size to allow pv to make an estimation of the remaining time:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
status option (GNU Coreutils 8.24+ only)
dd if=/dev/urandom of=/dev/null status=progress
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s