Recently, we were cloning a large hard disk on another using dd.
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 theddrunning process ID (PID):pgrep ^dd$. - We passed that
PIDtokill -USR1which triggered the printing of the statistics on the terminal whereddwas executing:kill -USR1 $(pgrep ^dd$).
Solution
kill -USR1 $(pgrep ^dd$);
Bonus
Additionally, we wanted to have dd statistics printed automatically every minute.
To achieve that, we used watch. 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 I/O statistics.
Example
On terminal 1, we executed the command dd if=/dev/sda of=/dev/sdb;, which will copy disk sda over sdb.
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
This post is also available in: Αγγλικα