Recently, we were cloning a large hard disk on another using
This operation took a really long time, at some point we got curious on what the status of the execution was.
Due to the minimal output
dd offers, there was no indication for us whether the system was still copying and if it had a long way to go or not.
Fortunately, the developers of
dd added a feature where sending a
USR1 signal to a running
dd process makes it print
I/O statistics to standard error and then resume copying.
To achieve that we used a second terminal and followed these steps:
- We used
pgrepto look up the running process based on its name and get the
ddrunning process ID (
- We passed that
kill -USR1which triggered the printing of the statistics on the terminal where
kill -USR1 $(pgrep ^dd$).
kill -USR1 $(pgrep ^dd$);
Additionally, we wanted to have
dd statistics printed automatically every minute.
To achieve that, we used
watch executes a program periodically, showing it’s output in full-screen.
We defined the interval in seconds using the parameter
-n. (Please note that, the command will not allow less than 0.1 second interval.)
In the end, our command became as follows:
watch -n 60 kill -USR1 $(pgrep ^dd$)
The above command was sending a
USR1 signal to
dd via the
kill application every minute (60 seconds) forcing it to print on standard output the
On terminal 1, we executed the command
dd if=/dev/sda of=/dev/sdb;, which will copy disk
On terminal 2, we executed the command
kill -USR1 $(pgrep ^dd$);, which forced
dd to print
I/O statistics back on terminal 1.
0+49728 records in 7218+0 records out 3695616 bytes (3.7 MB) copied, 2.85812 s, 1.3 MB/s 0+78673 records in 11443+0 records out 5858816 bytes (5.9 MB) copied, 4.49477 s, 1.3 MB/s 0+99003 records in 14386+0 records out 7365632 bytes (7.4 MB) copied, 5.75575 s, 1.3 MB/s ^C0+172104 records in 24918+0 records out 12758016 bytes (13 MB) copied, 10.197 s, 1.3 MB/s