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
pgrep to look up the running process based on its name and get the
dd running process ID (
pgrep ^dd$ .
- We passed that
kill -USR1 which triggered the printing of the statistics on the terminal where
dd was executing:
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