Just to add up to the (perfectly fine) existing answers:
Why do you need a blocksize bs=64
? While it is is probably not the fastest setting for all scenarios, it still runs way faster (around 4x) than the standard settings... this is true at least on my system - and seemingly many others out there. Tim Williscroft states that 100M could be faster, more research could be needed was done here, have a look.
Test data here:
(I cancelled the first run because it took too long imho.)
$ sudo dd if=/dev/sdb4 of=/dev/sda2 status=progress
12962501120 bytes (13 GB, 12 GiB) copied, 394 s, 32,9 MB/s
$ sudo dd if=/dev/sdb4 of=/dev/sda2 status=progress bs=64K
13143113728 bytes (13 GB, 12 GiB) copied, 98,0026 s, 134 MB/s
More Hints and Ideas:
Nobody seems to know [...]
dd is an asymmetrical copying program, meaning it will read first, then write, then back. You can pipe dd to itself and force it to perform the copy symmetrically, like this: dd if=/dev/sda | dd of=/dev/sdb
. In my tests, running the command without the pipe gave me a throughput of ~112kb/s. With the pipe, I got ~235kb/s. I've never experienced any issues with this method. Good luck!
While he seems to misuse the the word symmetric in sense of meaning, this would probably also be worth a try. Additional information about this approach by groxxda: "If you do this and specify a blocksize, make sure you use the same blocksize on each invocation." (The respective post is also worth reading)