Depending on the hardware involved, you can dramatically speed up an ssh pipe by changing the encryption type, or turning off compression.
For example, if you're trying to clone a disk from a machine with a weak cpu, and that disk contains mostly media files (non-compressible avi's, mp3's or jpeg's) then trying to compress the stream will be a waste of cpu time. Also, if you're using a strong encryption scheme, then that is also more taxing on the cpu.
So, if security isn't the highest priority then you can potentially speed up a slow disk clone quite easily.
My sender was an old machine so I wanted to clone the disk to a new faster machine.
# my original .ssh/config contained: Compression yes
# naive/default sender dd if=/dev/sdb | ssh other_host dd of=/dev/sdb
This was ridiculously slow, I was getting roughly 10MB/s on a gigabit network.
# "smart" sender dd if=/dev/sdb | ssh -o Compression=no -o Cipher=arcfour other_host dd of=/dev/sdb
This brought the transfer up to 60MB/s, the speed of the hard drive on the slow machine.
arcfour is a weak but simple (ie: fast) encryption cipher.
To make this permanent, you can change your
.ssh/config to include:
# my new .ssh/config contains Compression no Ciphers arcfour,aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc
Or if you don't need the fancier abilities of ssh (multiple hops, encryption, etc) then just use netcat.
# receiver nc -l 12345 | dd of=/dev/sdb
# sender dd if=/dev/sdb | nc other_host 12345
But this is a bit more annoying as you have to manually run a command on the
other_host and you have to make sure that
of=something of the receiver matches
if=something of the sender.