Data recovery can sometimes be rocket science, but mostly it’s just about being very “persuasive” - trying and trying until you get something out. When drives fail, they often just become so slow that they appear dead to most software. That’s why you need tools that can be persistant and ddrescue is very good at that.
One of it’s greatest features (and one that sets it apart from any commercial tool I’ve ever used) is the possibility to stop the rescue at any point thanks to a log file. This means you can take the drive out for cooling, for example, and resume at any time. Since these cycles can be really long (can easily take weeks), it’s also nice that you can run multiple instances of ddrescue on the same machine.
There’s a lot more that I will some day try to say about ddrescue, but in the meantime, here’s a very simple .command file that can be used to rescue a drive to a DMG inside the current directory:
SRC=/dev/disk1s3 diskutil unmount $SRC DST=$(dirname $0)/$(basename $SRC) sudo ddrescue -v $SRC $DST.dmg $DST.log
I’ve also compiled a universal binary (not that it really matters) of ddrescue which you can download here.