How about getting an identical or bigger disk and just doing a sector by sector copy? At least that way the sectors with errors will just be blanked out and fsck should be able to do a better job.