Spinrite (up to I believe 5.0) was a very good program to use for drives connected to an IDE/EIDE interface (I don't believe it worked the same way with SCSI or SATA).
It was particularly effective for failing devices because it used it's own proprietary low level driver that allowed it to do things like read a sector with/without ECC, thermal correction, read-caching, etc. in order to compare results and achieve a successful read where the OS could not, or if not it often could intelligently guess the contents of a failed sector closely enough that the file systems error correction could later fix the file.
I personally used the software to recover files from drives that were considered to be dead (and recovery attempts were made with other software), however it was not a quick process. I remember that it could take days for troublesome drives, and we are talking 80 or 100GB drives. Not multi-TB drives.