DDRescue faz exatamente isso, eu usei isso muitas vezes para recuperar dados de discos rígidos e até mesmo antigos, arranhados CDs. É, por exemplo, contido no SystemRescueCd (também inicializável a partir de USB). Mas o problema permanece se o disco rígido emitir dados incorretos sem relatar isso como um erro (o que realmente não deveria) - quantas vezes você precisa ler um setor até ter certeza de que leu os dados corretos? Eu não acho que isso pode ser resolvido em um programa de cópia simples, já que você precisaria validar a exatidão dos dados que um processo de cópia estúpida nunca pode fazer.