How can I recover files from a failing hard drive?
Solution 1:
You could use ddrescue to try to clone the raw volume (there are some notes on running it under OS X on tinyapps.org). It basically tries to read over & over, getting as much as possible from the disk.
This isn't ideal for your situation, since it 1) needs enough free disk space (either a volume or a disk image) to hold the entire drive, including free space (i.e. if it was a 200GB drive with 10GB of files, you need 200GB to hold the clone); and 2) it doesn't tell you which files it couldn't read (you can look at the log and see what blocks it hasn't been able to read, but figuring out what files those blocks are part of is not trivial).
The good news about is that, thanks to its log file, if it missed something you need (and you haven't modified the target volume at all -- mounting readonly is recommended), you can just run it again and it'll pick up where it left off, and keep hammering on the difficult blocks until they give up their data.