In the last week or so I used SystemRescueCD to pull data off of an HDD -- the contained GNU ddrescue was quite useful. There are some related utilities ddrutilty (among other things has some nice NTFS-related tools) and ddrescueview which don't appear to be on the ISO, but I was able to fetch them (one had a precompiled binary and the other was easy to build from source) while booted into SystemRescueCD.
It took some studying to learn how to use GNU ddrescue (note: there's another program with a similar purpose and name), but the results so far appear to be that I was able to recover all except one file.
The following things seemed worth considering before getting started:
- Consider practicing on something you don't care about too much -- and consider doing so before an emergency.
- Arrange for some place for the logfile(s) to be saved to -- I used some USB memory.
- Arrange for a device to save GNU ddrescue output (not necessarily logfile) to -- typically one is likely to want something that is larger in capacity than the sum of the partitions one wishes to attempt recovery for.
- Don't overwrite past logfile on subsequent runs -- work off of a copy.
- Consider an initial run that doesn't try hard to recover much -- if you decide later you want to wipe the good areas, the logfile for the initial run may present less trouble.
- If dealing with NTFS, examine ddrutility -- there's a contained tool that may make the pass through an NTFS filesystem faster.
- Don't attempt individual file recovery off of a fresh result of running GNU ddrescue -- clone first and work off of that.
These are not faults with the documentation, FWIW
I was happy to learn that sometimes even HDDs with trouble can be "mostly wiped" by leveraging an appropriate GNU ddrescue log file and an appropriate invocation of the utility using its fill mode to target "good" areas.