Well the plain ‘dd’ on my failing drive was a bust, as a day later the transfer rate had dropped to tens of kB/s, and it would have taken forever at that rate.
So, instead, I’m using ‘ddrescue’, which is better suited to this kind of rescue as it can skip ‘slow’ areas of the disk, retry bad blocks multiple times from different directions, and will pick up where it left off if interrupted. I can’t compress the output from it though, since it’s no longer just a stream of bytes, so I had to completely move everything else off of the external drive I’m writing to so I could write to it at the raw partition level instead. It’s making good progress though, with an overall transfer rate of 3 MB/s after a day.
What’s becoming obvious from the log is that disk errors are occurring scattered all over the place, not just in one spot, and the concern here is that this may wind up leaving ‘holes’ in random files. Since I’m primarily trying to recover a collection of ripped DVDs, I’d prefer not to find out that a movie is corrupt when I’m halfway through watching it!
Fortunately, as documented here, it looks like I can use the list of bad blocks found by ‘ddrescue’ and feed it to e2fsck when it comes time to try to repair the rescued image, and it should be able to figure out which files are damaged.