Was sollten Sie tun, wenn Sie beim Kopieren einer normalen Festplatte mit dd unter Linux einen Ein-/Ausgabefehler erhalten?
Situevina ist sehr traurig, aber lösbar. Höchstwahrscheinlich haben Sie es mit einer ausgefallenen Festplatte zu tun, die fehlerhafte Blöcke enthält, die nicht mehr verwendet, beschrieben oder gelesen werden können.
Überprüfen Sie eine solche Festplatte unbedingt mit S.M.A.R.T., da Ihnen höchstwahrscheinlich Festplattenfehler angezeigt werden. Dies war in meinem Fall der Fall; die Anzahl der fehlerhaften Blöcke war so groß, dass ich mich von der alten Festplatte verabschieden und sie durch eine neue SSD ersetzen musste.
Das Problem bestand darin, dass diese Diskette ein voll funktionsfähiges System mit lizenzierter Software enthielt, die für die Arbeit erforderlich war. Ich habe versucht, partimage zum schnellen Kopieren von Daten zu verwenden, aber plötzlich habe ich festgestellt, dass das Dienstprogramm nur ein Drittel der Festplatte kopiert. Dann endet es entweder mit einem Segfault oder mit einem anderen lustigen Sishny/Sipplusplus-Witz.
Als nächstes habe ich versucht, die Daten mit dd zu kopieren, und es stellte sich heraus, dass dd ungefähr an die gleiche Stelle wie partimage gelangt und dann ein Eingabe-/Ausgabefehler auftritt. Gleichzeitig haben alle möglichen lustigen Flags wie conv=noerr, skip oder etwas anderes überhaupt nicht geholfen.
Aber die Daten konnten mit einem GNU-Dienstprogramm namens ddrescue problemlos auf eine andere Festplatte kopiert werden.
После этого мои волосы стали шелковистыми, вернулась жена, дети и собака перестала кусать диван.
Большим плюсом ddrescue является наличие встроенного прогрессбара, поэтому не приходится костылять какие-то ухищрения навроде pv и всяких не особо красивых флажков dd. Также ddrescure показывает количество попыток прочитать данные; еще на вики написано что утилита обладает каким-то сверх алгоритмом для считывания поврежденных данных, оставим это на проверку людям которые любят ковыряться в исходниках, мы же не из этих да?
https://ru.wikipedia.org/wiki/Ddrescue
https://www.gnu.org/software/ddrescue/ddrescue_ru.html