We have some data on very old DDS (1,2 and 3) DAT tapes. I tried reading them with:
dd if=/dev/st0 of=file bs=32k
but get many partial blocks and sometimes IO errors. Have also tried with:
dd if=/dev/st0 of=file bs=32k conv=noerror
which does not stop at partial blocks but does sometimes give IO errors. Some of these tapes contain tar archives but most of them contain a bunch of FITS files. What would be the best way to rescue as much data as possible from these tapes?
Send 'em to Kroll Ontrack (or another professional data recovery company). Your restore efforts are much more likely to further damage the tapes than doing anything productive.
Have a look at ddrescue, which is written for exact this purpose. Depending on the importance of the data, a professional rescue service might be able to do much better, at a (likely very high) price.