Klonen der Festplatte ohne Informationsverlust bei E / A-Fehlern

800
styrofoam fly

Ich möchte eine Partitionserstellungssoftware wie testen parted.

Ich habe einen alten USB-Stick gefunden, der das Programm abstürzt, wenn ich versuche, es zu lesen. Um diesen Testfall zu erhalten, muss ich den USB-Stick so genau wie möglich kopieren, um IO-Fehler zu erhalten .

Ich weiß, dass es wahrscheinlich unmöglich ist, meine HDD mit einem IO-Fehler zu versehen, wenn einige Bytes dieser Datei gelesen werden. Möglicherweise kann sie jedoch von einem Programm emuliert werden, das den gesamten Inhalt des USB-Sticks fest codiert und sich daran erinnert, wann ein IO-Fehler ausgelöst wird.

Ich verwende Arch Linux und würde eine Lösung bevorzugen, die daran angepasst werden kann (möglicherweise durch eine Art VM oder Maschinenemulator).

2

2 Antworten auf die Frage

4
grawity

Für das Kopieren, Verwendung ddrescue, safecopyoder dd_rescue. Sie führen alle ein Protokoll der fehlerhaften Bereiche und versuchen es automatisch, bis sie die Daten herausholen können.

Die allgemeine Verwendung ist:

  • ddrescue: (Verwechsle dich nicht mit dem älteren dd_rescue)

    ddrescue /dev/sdc3 sdc3.img sdc3.map 

    Wenn gewünscht, wiederholen Sie mit --retrimoder --try-again:

    ddrescue --try-again /dev/sdc3 sdc3.img sdc3.map 

    Vergessen Sie nicht, die Map-Datei anzugeben, in der fehlerhafte Bereiche aufgezeichnet werden sollen.

  • safecopy:

    safecopy --stage1 /dev/sdc3 sdc3.img safecopy --stage2 /dev/sdc3 sdc3.img safecopy --stage3 /dev/sdc3 sdc3.img 

    Nach Stufe 3 haben Sie eine stage3.badblocksDatei mit den einzelnen fehlerhaften Sektoren.

    Wenn Sie es erneut versuchen möchten, verwenden Sie:

    mv stage3.badblocks stage2.badblocks safecopy --stage3 /dev/sdc3 sdc3.img 
  • dd_rescue: (nicht mit der leistungsfähigeren ddrescue zu verwechseln)

    dd_rescue -o sdc3.badblocks /dev/sd3 sdc3.img 

    (Ich habe keine Ahnung, ob dieses Tool die Wiederaufnahme / Wiederholung mit einem zweiten Aufruf unterstützt, aber es gibt mindestens ein Badblocks-Protokoll aus.)

Diese Programme betonen immer so viele Daten aus schnell wie sie können, und halten die langsame Erholung für später. Seien Sie also nicht überrascht, wenn "Stufe 1" allein aufgrund eines einzelnen fehlerhaften Blocks ganze Megabytes überspringt - dies wird in Stufe 2 wieder hergestellt.

Um eine fehlerhafte Festplatte zu emulieren, nimm das gerade erhaltene Badblocks-Protokoll und wende es auf diesen Beitrag an:

Verwenden Sie dmsetupdiese Option, um ein Gerät zu erstellen, das durch das Ziel "Fehler" gesichert wird. Es wird in angezeigt /dev/mapper/<name>.

Seite 7 der Präsentation des Device Mapper (PDF) hat genau das, wonach Sie suchen:

dmsetup create bad_disk << EOF 0 8 linear /dev/sdb1 0 8 1 error 9 204791 linear /dev/sdb1 9 EOF 

Oder lassen Sie die sdb1Teile aus und setzen Sie das "error" -Ziel als Gerät für die Blöcke 0 - 8 (anstelle von sdb1), um eine reine Fehlerdiskette zu erstellen.

Siehe auch Der Device Mapper- Anhang aus "Verwaltung von RHEL 5 Logical Volume Manager".

- Peter Cordes, https://stackoverflow.com/questions/1870696/simulate-a-faulty-block-device-with-read-errors

(Das Konvertieren eines Badblocks-Logs oder einer Ddrescue-Map-Datei in die Syntax der Dmsetup-Tabelle bleibt dem Leser als Übung überlassen.)

Wie meine Antwort sagt auch diese Antwort dem Benutzer nicht aus, wie er die Festplattenfehler bewahren kann. Ich bin mir eigentlich nicht sicher, ob es überhaupt möglich ist. djsmiley2k vor 7 Jahren 0
1
djsmiley2k

dd kann aufgefordert werden, bei Fehlern fortzufahren, dies schreibt lediglich Nullen in die Leerzeichen, die nicht von der ursprünglichen Festplatte gelesen werden können ...

dd bs=<blocksize here> conv=sync,noerror if=/dev/sdc123 of=/home/me/testFile 

Sie können auch versuchen, die Daten mithilfe von ddrescue wiederherzustellen, obwohl ich nicht sicher bin, wie gut sie auf einer USB-Festplatte (Flash-basierten Festplatte) funktionieren.

WARNUNG - Wenn Sie die Blockgröße vermasseln, werden Sie alle Daten nach dem ersten Nicht-Lese - Block vermasseln - Sie wollen die Blockgröße auf, dass die Vorrichtung setzen Sie kopieren aus .

Ich denke, das ist das Gegenteil von dem, was die Frage stellt. Ich denke, die Frage deutet darauf hin, dass das geklonte Laufwerk dieselben Fehler aufweist wie das Original. Ron Maupin vor 7 Jahren 0
Ja, ich stimme @RonMaupin zu, dachte aber, ich würde sie sowieso über dd informieren. Es wird nicht versucht, die fehlerhaften Daten "wiederherzustellen". Daher wird jede Anwendung, die von diesen Daten abhängt, weiterhin Probleme bekommen. djsmiley2k vor 7 Jahren 0
@RonMaupin ist korrekt. Beim Kopieren mit `dd 'wird die Unterscheidung zwischen E / A-Fehler und' 0x0000 'nicht möglich. Ganz zu schweigen davon, dass E / A-Fehler später emuliert werden. styrofoam fly vor 7 Jahren 0