ddrescue

Сначала следует постараться скопировать свободные от ошибок области диска:

ddrescue -n /dev/old_disk /dev/new_disk rescued.log

Затем следует попытаться восстановить наиболее важные области, на сколько это возможно:

ddrescue -r 1 /dev/old_disk /dev/new_disk rescued.log

Также для копирования данных с занулением нечитаемых данных:

dd if=/dev/old_disk of=/dev/new_disk conv=noerror,sync