Schnellere Wiederherstellung von einer Festplatte mit fehlerhaften Sektoren


12

Kürzlich habe ich versucht, ddvon einer ungesunden Festplatte eine Datei zu erstellen. Ich habe verwendet dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Mein Problem war, dass ddich viel Zeit verschwendet habe, als ich auf einen fehlerhaften Block gestoßen bin. In meinem Anwendungsfall würde ich gerne mit etwas Datenverlust für ein schnelleres Ergebnis bezahlen.

Gibt es eine Möglichkeit, die Fehlerbehandlung zu beschleunigen? Vielleicht ein Kernel-Tweak (der die Festplatte anweist, weniger Aufwand für das Lesen eines Blocks zu betreiben)? Oder ein anderes Programm?

Antworten:


28

Zunächst für die zu verwendende Software: Sie könnten versuchen, ddrescueanstelle von zu verwenden dd.

ddrescuehat einen Schalter, um nur eine begrenzte Anzahl von Wiederholungsversuchen durchzuführen. Es kann auch eine Protokolldatei verwenden, um aufzuzeichnen, welche Blöcke fehlerhaft waren. Wenn Sie später mehr Wiederholungen durchführen möchten, können Sie dieselbe Protokolldatei verwenden, um ddrescue sie mit anderen Optionen erneut auszuführen (z. B. mit mehr Wiederholungen), und es werden nur die erforderlichen Blöcke wiederholt.

Anwendungsbeispiel:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

Von der ddrescueInfo-Seite:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Hier sind einige zusätzliche Quellen zur Verwendung ddrescue:


Bearbeiten

Genannt Für den Fall , selbst die HDD zu lange dauert, können Sie versuchen , eine Funktion zu aktivieren TLER ( T ime L imited E rror R ecovery) oder CCTL ( C ommand C ompletion T ime L imit). Nicht alle Festplatten haben es, aber Sie können es verwenden, um die Zeit auf dem Festplattencontroller selbst zu begrenzen. Dieser Ansatz kann ddrecuenatürlich mit der Verwendung kombiniert werden .

Linux hat ein Tool namens smartctl(im smartmontoolsPaket).

So überprüfen Sie die aktuelle Einstellung ("deaktiviert" bedeutet eine unbegrenzte Zeit, die Sie nicht möchten):

# smartctl -l scterc /dev/sda

So legen Sie einen festen Wert fest (5,0 Sekunden in diesem Beispiel. Wenn Sie den Wert auf 0 setzen, wird TLER deaktiviert):

# smartctl -l scterc,50,50 /dev/sda

Quelle für TLER: http://en.wikipedia.org/wiki/TLER


2
Ein weiteres Werkzeug zu betrachten ist dc3dd das ist eine Forensik - Version dd
fpmurphy

oh schön, ich kannte das Tool nicht!
Slizzered

1
Ich hatte keine Ahnung von diesem TLER, aber es hat mir wirklich den Tag gerettet. Auf meiner Festplatte waren diese deaktiviert und jedes Mal, wenn ich ddrescue ausführte, wurde meine Festplatte nach ein paar Sekunden blockiert. Ausschalten, Einschalten und nächster Versuch. Jetzt habe ich es mit dem von Ihnen erwähnten Befehl auf 2 Sekunden gesetzt und es wird nie wieder blockiert, es werden einige Sektoren übersprungen, aber es geht zumindest ohne Unterbrechungen weiter.
Sven Rieke

3

Ich habe mit dieser Software gute Ergebnisse mit ansonsten nicht lesbaren Datenträgern erzielt.

http://www.cgsecurity.org/wiki/TestDisk

Das nächste ist auch ein solides Wiederherstellungswerkzeug. Dateien können auch dann abgerufen werden, wenn Ihre Dateitabelle beschädigt ist oder wenn sie gelöscht wurden. Es ist ein verdammt gutes Forensikwerkzeug. Es speichert Dinge auf eine wirklich unorganisierte Weise, aber Sie können alle Daten verschieben.

http://www.cgsecurity.org/wiki/PhotoRec


2

Um die CD schnell und schnell zu retten, können Sie eine sh-Skriptdatei verwenden und die Datei mit sh ausführen. Es enthält diese Zeile, einfach wiederholen sudo ddrescueund noch sleep 3einige Male. Der Ruhezustand wird verwendet, um das Laufwerk einige Sekunden ruhen zu lassen:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

Die oben verwendeten Optionen:

  • -r0 : ohne erneute Versuche
  • -e +0: beim ersten Fehler beenden
  • -T 1s: Beenden mit 1 Sekunde Fail Read
  • -d : Direkte E / A
  • -n : kein Kratzen

Sie können -Rnach dem Beenden mit der Option -Aeinmal verwenden, das wird alle Fehlergröße umkehren und entfernen und wieder rückwärts beginnen. Bedeutet, dass Fehler anders gelesen werden.


0

Hängt von der Größe Ihrer Festplatte und der Anzahl der fehlerhaften Blöcke ab. Normalerweise benötige ich 20 Minuten, um ein Backup mit einer 1-Tera-Festplatte zu erstellen. Mit schlechten Blöcken habe ich mich heute Morgen gerade erholt, zweimal die Zeit genommen. Ich hatte Probleme beim Duplizieren (Sichern einer Festplatte) mit ungefähr 30 fehlerhaften Blöcken. Das erste, was ich getan habe, ist das Sichern von Dateien mit regulärem Filezilla, um alle guten Daten zu sichern. Ich stelle fest, dass eine große Datei nicht richtig kopiert wurde (Stopp in der Mitte und Neustart der Übertragung). Zum Glück habe ich eine vorherige Sicherung der gleichen Datei. Um die Festplatte zu duplizieren, musste ich die fehlerhaften Blöcke auf der Festplatte folgendermaßen finden:

1. Finden Sie die problematische Festplatte heraus, die die HD-Informationen mit fdisk -l identifiziert

2. Wenn Sie sagen, dass Ihre Festplatte / dev / sdb ist, müssen Sie den Befehl badblocks -v / dev / sdb ausführen, um alle fehlerhaften Blöcke auf dem Laufwerk aufzulisten. Zum Glück wird es ein paar geben. Wenn keine fehlerhaften Blöcke gefunden werden, sind Ihre Laufwerkblöcke in Ordnung und müssen etwas anderes herausfinden. Meine Blockgröße ist 512, daher verwende ich diese Standardnummer, um DD auszuführen

3. Jeder Block hat eine Größe von 512, also habe ich bs = 512 gesetzt

Jedes Mal, wenn ich DD regelmäßig ausführte, wie immer, werden meine Daten nach den Fehlern verfälscht. Also benutze ich dann die Parameter wie auf der Seite https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html erklärt und suche den Teil "Nach fehlerhaften Datenträgern".

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Es hat eine Weile gedauert. Jeder fehlerhafte Block klang wie ein Aufprall auf das fehlerhafte Laufwerk. Es kopiert Block für Block und durch alle meine schlechten Blöcke machte das gleiche Geräusch. Die Häufigkeit, mit der ein Geräusch erzeugt wurde, war darauf zurückzuführen, dass ein anderer fehlerhafter Block gefunden wurde und Sie über eine auf dem Display angezeigte Fehlermeldung informiert wurden. Die Funktion "conv = noerror, sync" füllt fehlerhafte Lesevorgänge mit NULs auf, während "iflag = fullblock" für kurze Lesevorgänge sorgt, Ihre Daten jedoch bis zum Ende synchronisiert. Überhaupt keine Beschädigung, es kopiert nur nicht die fehlerhaften Blöcke und füllt sie mit leeren NULs.

Nachdem das Kopieren mit DD abgeschlossen war, ersetze ich einfach diese fehlerhafte Datei, die Filezilla aus einer früheren Sicherung wiederherstellt, und alles funktionierte in Ordnung. Ich hoffe, dies ist nützlich für andere, die versuchen, fehlerhafte Laufwerke zu sichern.

HINWEIS: Meine fehlerhaften Blöcke waren ziemlich nahe beieinander. Ungefähr 4 Blöcke gleichzeitig in Gruppen, in denen ein Fehler festgestellt wurde. Wenn sich Ihre Blöcke auf der gesamten Festplatte befinden, können mehrere Dateien betroffen sein. Glücklicherweise war in meinem Fall nur eine große 4-GB-Datenbankdatei betroffen.


1
Wenn dieselbe Antwort mehrere Fragen beantwortet, besteht eine gute Chance, dass es sich bei den Fragen um Duplikate handelt. Wenn ja, ist es besser, einen zu beantworten und den anderen als mögliches Duplikat zu kennzeichnen. Das vermeidet das Aufblähen von sich wiederholenden Antworten, und das Verknüpfen der Fragen erleichtert es den Lesern, alle Antworten zu finden.
Fixer1234

Nicht wirklich, aber wenn Sie so denken, lassen Sie es mich wissen, damit ich meine Antwort löschen kann. Ich habe überall nach der richtigen Lösung gesucht, aber ich habe eine Möglichkeit gefunden, ein Problem mit meinem Server zu beheben. Es gibt mehrere ähnliche Fragen, die mein Problem nicht beantwortet haben. Bisher habe ich rund ein Dutzend ähnliche Fragen gefunden. Ich habe gerade ein paar Fragen beantwortet, um meine Erfahrungen zu schreiben und wie ich sie lösen konnte. Lassen Sie mich wissen, wenn Sie möchten, dass ich meine Antwort lösche, und ich werde es gerne tun. Grüße.
Luis H Cabrejo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.