Angenommen, Sie möchten eine fehlerhafte Festplatte auf Null setzen. Sie möchten so viel wie möglich mit Nullen überschreiben. Was Sie nicht wollen, ist: Der Vorgang wird beim ersten Schreibfehler abgebrochen. Wie geht das?
AFAICS, plain dd
bietet nur eine Option zum Ignorieren von Lesefehlern. So etwas wie
dd if=/dev/zero of=/dev/disk/by-id/lousy-vendor-123 bs=128k
ist nicht genug.
ddrescue
scheint besser darin zu sein, Fehler zu ignorieren - aber was wäre die optimale Befehlszeile dafür?
Mein Versuch mit GNU ddrescue:
ddrescue --verbose --force --no-split /dev/zero /dev/disk/by-id/lousy-vendor-123
dd conv=noerror
könnte eine GNU-Erweiterung sein, da bin ich mir nicht sicher. In jedem Fall sollte es den Trick tun. Es lohnt sich jedoch, die SATA-Antwort "Das Laufwerk zum Löschen an sich" zu lesen, um ganze Laufwerke zu löschen.dd
Dokumentennoerror
als 'weiter nach Lesefehlern' ...dd conv=noerror
ist POSIX - Standard , aber es kann sehr langsam seindd conv=noerror
Muss für das Lesen von Fehlern sein (laut Manpage), nicht für das Schreiben von Fehlern. Es ist nichts Schlimmes daran, es mit zu kombinierenconv=notrunc
, was mir den Trick gebracht hat, die Schreibfehler zu ignorieren. unix.stackexchange.com/a/229379/4319dd if=/dev/zero of=/dev/sdX
, würde keine Festplattenlesevorgänge ausführen. Warum glaubst du, ist der Befehl dd "nicht genug" ? Welche "Fehler" haben Sie?Antworten:
Ich bevorzuge dafür den
badblocks
destruktiven Schreibmodus. Es schreibt, setzt es fort, wenn es auf Fehler stößt, und zeigt Ihnen schließlich an, wo diese Fehler waren, und diese Informationen können Ihnen bei der Entscheidung helfen, was als nächstes zu tun ist (Will It Blend?).Und die Sperrliste:
Und was bleibt danach auf der Festplatte:
Beachten Sie, dass es sich nicht wirklich um zufällige Daten handelt - das Muster wiederholt sich. Wenn Sie es also überspringen
1MiB
, wird dieselbe Ausgabe erneut angezeigt.Es wird auch versucht, dies zu überprüfen, indem die Daten erneut eingelesen werden. Wenn Sie also einen Datenträger haben, der behauptet, erfolgreich zu schreiben, aber beim Zurücklesen falsche Daten zurückgibt, werden diese Fehler ebenfalls gefunden. (Stellen Sie sicher, dass keine anderen Prozesse auf die Festplatte schreiben, während Badblocks ausgeführt werden, um Fehlalarme zu vermeiden.)
Natürlich kann dies bei einer stark beschädigten Festplatte zu lange dauern: Es gibt keinen Code, der dazu führen würde, dass fehlerhafte Bereiche vollständig übersprungen werden. Der einzige Weg, mit dem Sie dies erreichen könnten,
badblocks
wäre die Verwendung einer viel größeren Blockgröße.Ich bin mir nicht sicher, ob
ddrescue
das besser geht. Das soll in die andere Richtung gehen (so viele Daten wie möglich schnell wiederherstellen). Sie können dies manuell für dd / ddrescue / badblocks tun, indem Sie den ersten / letzten Block angeben ...quelle
-t random
oder benutze,-t 0
macht Badblocks dann nur einen Schreibdurchgang? Ein Blick auf die Manpage - es scheint, dass ohne-t
sie 4 Durchgänge ausgeführt werden (für '0xaa, 0x55, 0xff, 0x00').-t
Ihnen in der Befehlszeile eingegebenen Durchgang wird ein Durchgang ausgeführt . Die Standardeinstellung ist 4 Durchgänge, wie Sie sagen.Wenn die Festplatte nicht über USB angeschlossen ist, sollten Sie in Erwägung ziehen,
hdparm
(Version> 9.31) zu verwenden, um ein sicheres ATA-Löschen der Festplatte durchzuführen . Dieser Befehl bewirkt, dass die Firmware des Laufwerks den Inhalt der Festplatte löscht, einschließlich fehlerhafter Blöcke.Warnung: Verwenden Sie den richtigen Laufwerksbuchstaben - ich habe ihn
/dev/sdX
als Beispiel gezeigt - und kopieren Sie ihn nicht einfach.Überprüfen Sie zunächst, ob die ATA-Befehle verstanden werden (die meisten Laufwerke, die in den letzten zehn Jahren oder später hergestellt wurden, sollten dies tun):
Die letzten beiden Zeilen des Extrakts zeigen, dass es unterstützt wird.
Fügen Sie daher dem Laufwerk ein Kennwort hinzu (anscheinend erforderlich):
und löschen:
Weitere Informationen zu diesem Verfahren finden Sie hier .
quelle
/dev/sdX
ist auch gut, Beispiele zu schreiben , denn wenn jemand beim Einfügen und Anpassen ein Vorkommen übersieht, gibt es kein Problem.Ich sehe hier vier brauchbare Antworten:
Die von garethTheRed bereitgestellte
hdparm
Methode ist wahrscheinlich die beste, wenn Sie direkt mit Ihrem Computer verbunden sind. Wenn Sie versuchen, es über USB anzuschließen, können Sie Ihr Laufwerk anscheinend blockieren. Wenn Sie dies für ein Laufwerk tun, über das Sie gleich verfügen, ist dies möglicherweise eine gute Sache. Sie möchten jedoch wahrscheinlich das Löschen sichern, bevor Sie es verwerfen.Die Technik von imz - Ivan Zakharyaschev beschriebene wird funktionieren, kann aber sehr langsam sein. Ich würde vorschlagen, wenn Sie nicht möchten, dass die Daten wiederhergestellt werden können, verwenden Sie
/dev/urandom
statt/dev/zero
; z.B,Ich würde gegen folgendes raten. Wenden Sie für etwas Schnelleres, das dasselbe bewirkt, die von maxschlepzig angegebene Technik an (in der Frage):
Dies ist schneller als der
dd
Befehl, aber nicht so schnell wie derhdparm
Befehl. Siehe unten, warum ich das nicht empfehle ...Der
badblocks
Befehl funktioniert auch, aber Sie können die Daten nicht auf diese Weise zufällig auswählen, und es wird wieder sehr langsam.Schließlich wäre es mir ein Rätsel, wenn ich nicht auf den Hauptgrund hinweisen würde, warum Leute eine Diskette vollständig löschen wollen, wenn sie im Begriff sind, sie zu entsorgen. Wenn Sie dies noch nicht getan haben, können Sie zunächst versuchen, die Festplatte wiederherzustellen. Wenn Sie einen Block lesen und der E / A-Fehler zurückgegeben wird, versucht die Festplatte beim nächsten Schreiben in denselben Block, einen anderen Block aus einer Reserveliste neu zuzuweisen. Sobald die Reserveliste voll ist, erhalten Sie E / A-Fehler beim Schreiben. Dann sollten Sie das Laufwerk wirklich verwerfen.
Sie können also etwas Einfaches tun wie:
Und dann, um die schlechten Blöcke umzuschreiben, nur so etwas wie:
Wenn dieser Befehl funktioniert und Sie mutig sind, können Sie Ihre Festplatte neu formatieren und erneut verwenden.
Alternativ können Sie den
badblocks
Befehl zweimal auf der Festplatte ausführen . Beim zweiten Mal sollte es keine fehlerhaften Blöcke melden ...Dies dauert länger, ist aber zuverlässiger.
Es ist auch erwähnenswert, dass keine der Techniken wirklich ein sicheres Löschen bewirkt, mit Ausnahme der
hdparm
Befehl. Erinnerst du dich an all die schlechten Blöcke? Bei diesen sind einige Ihrer ursprünglichen Daten größtenteils noch intakt. Ein Datenwiederherstellungsexperte könnte auf diese zugreifen, um einen kleinen Teil der Daten zu sehen, die sich zuvor auf Ihrer Festplatte befanden.In Bezug auf ddrescue und warum ich davon abrate, habe ich das folgende Gegenmittel:
Das Problem ist, dass ddrescure zu gut darin ist, Fehler zu ignorieren. Ich hatte eine Festplatte, die durchweg mit einer Schreibgeschwindigkeit von etwa 102 GB abfiel, und fing an, bei 238 GB Schreibfehler zu erzeugen. Ich war ziemlich beeindruckt, dass ddrescue weiterhin mit konstanter Geschwindigkeit durch die Festplatte lief und sogar keine Fehler meldete. 17 Stunden später, als es bei den 1300 GB war, als ich zufällig bemerkte, dass die Laufwerksanzeige selbst aufhörte zu blinken. Eine schnelle Überprüfung ergab, dass das gesamte USB-Gehäuse offline gegangen war. Ich zog die Festplatte aus der Ladestation. Ich bemerkte, dass ddrescue nur freudig mitteilte, dass es immer noch fehlerfrei kopiert wurde, selbst mit der Festplatte in meinen Händen. Ich steckte die Festplatte in einen anderen Computer und stellte fest, dass es sich nun um einen Ziegelstein handelte.
Ich beschuldige ddrescue nicht, das Laufwerk zu einem Ziegelstein gemacht zu haben. Die Festplatte war defekt und würde zu einem Ziegel werden. Ich finde nur störend, dass ddrescue nicht einmal die Anzahl der Schreibfehler angibt, die ignoriert werden. Bei dieser Verwendung lässt ddrescue den Eindruck entstehen, dass es unabhängig von allen Schreibfehlern vollständig erfolgreich war. Tatsache ist, dass es nicht möglich gewesen sein sollte, im Abschnitt mit der Verlangsamung mit voller Geschwindigkeit weiterzumachen. Der Grund dafür, dass der Abschnitt langsam war, ist, dass viele Blöcke vom Laufwerk verschoben wurden, was beim Zugriff auf diesen Abschnitt viele Suchanfragen verursachte. Dies ist wahrscheinlich der Zeitpunkt, an dem die Ausgabe von ddrescue fiktiv wurde.
quelle
hat wahrscheinlich den Trick für mich getan.
Das erwähnte
muss zum lesen fehler sein (laut manpage). Es ist nicht schlecht, beides zu kombinieren.
Mein vollständiger Befehl zum Nullsetzen einer Festplatte sah folgendermaßen aus:
In
bs=
manchen Fällen kann auch das Hinzufügen einer Benutzerdefinition erwünscht sein.quelle
Eine schnelle und ausgereifte Methode ist zu verwenden
sdd
.Wenn Sie nur alle Inhalte zerstören möchten, rufen Sie Folgendes an:
sdd -inull bs=1m of=/dev/rdsk/cXdXtXp0 -noerror
Verwenden Sie immer die "Raw" -Disketten-Treiber-Schnittstelle.
Wenn Sie eine Festplatte reparieren und so viel wie möglich vom alten Inhalt behalten möchten, rufen Sie Folgendes an:
sdd if=/dev/rdsk/cXdXtXp0 of=/dev/rdsk/cXdXtXp0 bs=1m -noerror
Dadurch werden alle nicht lesbaren Blöcke auf 512-Byte-Ebene durch Nullen ersetzt. Sie können die Anzahl der erneuten Versuche über ändern
try=#
Die Standardeinstellung ist 2.Beachten Sie, dass
sdd
ist schneller alsdd
im Fehlerfall, da zuerst versucht wird, mit der angegebenen Blockgröße zu lesen, und im Fehlerfall mit 512 Bytes gelesen wird. Bei Lesefehlern führt sdd zufällige Suchvorgänge und Dummy-Lesevorgänge durch, um die Firmware des Laufwerks zu beruhigen.Die erweiterten Funktionen zur Fehlerbehebung wurden in den 1980er Jahren entwickelt, als ich für den zweitgrößten OEM von Sun-Microsystems arbeitete.
Sdd-Quellcode ist in den Schily-Tools enthalten:
http://sourceforge.net/projects/schilytools/files/
quelle