Regardless of the type of drive, SATA, IDE etc.. I have always used the Unix tool “dd” for duplicating data. This is awesome when it comes to taking data from a source drive to another drive or even backup image file.
There are a couple of things to bear in mind though when using dd.
First of all if you do have bad data on the drive then it may just stall whilst running. You can use the “conv=noerror,sync” option that will ignore errors but you could end up with 2 bad drives at the end. The result depends on how broke your drive is before you start.
Secondly, if you are trying to replicate a drive to a new drive then the new drive does need to be as big or bigger.
Here are a couple of examples, edit as necessary:
Drive to Drive
dd bs=512 if=/dev/sda of=/dev/sdb conv=noerror,sync
Drive to File
dd bs=512 if=/dev/sda of=/some_dir/foo.img conv=noerror,sync
If dd does not work then there is another option in the form of a tool called ddrecue:
This tool attempts to recover data when errors are detected and then creates the repaired data on the destination drive / file. Whilst I have never had the need to use this tool, dd has always been good enough for me, I have heard some excellent reviews about it……..best of all its free!!