What I would do is just plug in both drives and run:
dd if=/dev/FAILING_DISK of=/dev/NEW_DISK bs=4096 conv=notrunc,noerror
The above command will copy everything from the failing hard drive to the new one.
But if you want to create an image of the failing disk:
dd if=/dev/FAILING_DISK bs=4096 conv=noerror | gzip -c > disk_image.gz
And to write the image to the new hard drive:
gunzip -c disk_image.gz | dd of=/dev/NEW_DISK bs=4096 conv=notrunc,noerror
The above commands should be run from a live cd as root.
If the new disk is larger than the failing disk, you'll probably want to extend the partitions with gparted after cloning the drive
Forgot to mention, the new drive must be at least the size of the failing drive