I use ddrescue to clone drives, as I'm often dealing with disks which have bad blocks, though I start with dd to clone the MBR, e.g.:
dd if=/dev/sda of=/dev/sdb bs=512 count=1
I verify the partitions are correct with fdisk, then cycle through the partitions with ddrescue, e.g.:
ddrescue -n /dev/sda1 /dev/sdb1 logfile1
ddrescue -n /dev/sda2 /dev/sdb2 logfile2
# and so on
"-n" option means it doesn't retry bad blocks, and with the logfile I can stop it at any point ("Ctrl-C") and resume from where it left off later on.