So starten Sie Badblocks an einem bestimmten Abschnitt des Laufwerks

663
Hashim

Beim Versuch, dddie letzten Blöcke einer 200 GB Maxtor IDE-Festplatte auszuprobieren, starte ich den folgenden Fehler:

$ dd if=/dev/zero of=/dev/sdc bs=4M status=progress 203901894656 bytes (204 GB, 190 GiB) copied, 7283.07 s, 28.0 MB/s dd: error writing '/dev/sdc': Permission denied 48621+0 records in 48620+0 records out 208223076351 bytes (208 GB, 194 GiB) copied, 8379.27 s, 24.8 MB/s  

Dieser Fehler blieb auch nach dem Versuch bestehen, ddmit seek=48620fortzufahren, wobei 48620 die Anzahl der zu überspringenden Blöcke ist. Um festzustellen, ob dieser Fehler auf fehlerhafte Sektoren zurückzuführen ist, möchte ich auf badblocksdie gleiche Art und Weise ausführen, von wo ddaus Fehler auftreten .

Dies würde sich wie folgt in einen badblocksBefehl übersetzen :

badblocks -svw -b 4000000 -c 500000 -p 1 -o /cygdrive/b/badblocks.txt /dev/sdc 199148543 48620 

... wobei dies -b 4000000der 4M-Blockgröße entspricht, die ich beim ersten Anfahren dddes Laufwerks verwendet habe, und 48620 ist die first_blockOption, die den ersten Block angibt, von dem aus badblocksgestartet werden soll.

Dies führt jedoch zu einem von zwei Fehlern. Entweder der nicht schwerwiegende Fehler ...

badblocks: Invalid argument during seekrs) 

... wird während der gesamten Ausführung des Befehls angezeigt, oder ein einzelner schwerwiegender Fehler beendet ihn:

Segmentation fault (core dumped) 

Der obige Fehler bleibt auch dann bestehen, wenn -cein vernünftigerer Wert eingestellt wird 2000.


Wenn ich es jedoch versuche, badblocksgenau den Block auszuführen, bei dem ein Fehler aufgetreten ist, ddund stattdessen einfach die first_blockOption auf eine ausreichend hohe Zahl zu erhöhen :

badblocks -svw -b 4000000 -c 1000000 -p 1 -o /cygdrive/b/users/hashim/desktop/maxtorbadblocks.txt /dev/sdc 199148543 12345678 

... treten zahlreiche Fälle des folgenden Fehlers auf, ohne den Befehl zu unterbrechen:

badblocks: Invalid argument during seekrs) again get several get the same error. 

Wie kann ich badblocksan einer bestimmten Stelle im Laufwerk beginnen und dadurch viel Zeit in der Laufzeit sparen?

3
48620 sind 4MB-Blöcke. Wenn Sie die Größe ändern, müssen Sie den Betrag neu berechnen. Wie viele Byte in der Festplatte befinden sich jedoch, wie Sie 208223076351 Bytes geschrieben haben? matzeri vor 6 Jahren 0

1 Antwort auf die Frage

3
agc

Eine halbe Antwort (vorerst), warum das nicht klappt.

Die Schalter in dieser Zeile sind falsch:

badblocks -svw -b 4000000 -c 500000 -p 1 \ -o /cygdrive/b/badblocks.txt /dev/sdc 199148543 48620 

Das -bist für die Blockgröße (wie viele Bytes in einem Block), die im Allgemeinen ein Vielfaches von 512 ist, normalerweise 1024, 2048 oder 4096 . Ein Wert von 4.000.000 ist kein Vielfaches von 512 und ist größer als jede aktuelle Festplatte.

Das -cist, wie viele Blöcke gleichzeitig getestet werden sollen. Der mit dem übergebenen Wert multiplizierte Wert -bgibt an, wie viele Bytes gleichzeitig gelesen werden sollen. Er -b 4000000 -c 500000weist den Computer also an, 2.000.000.000.000 (zwei Billionen) Bytes gleichzeitig zu lesen .

Noch schlimmer, das Argument 199148543besagt, badblocksdass das Dateisystem mindestens so viele Blöcke enthält, und da die Blöcke durch den -bSwitch definiert werden, badblockssind nach Ansicht des Dateisystems mindestens 796.594.172.000.000 Bytes (oder 796 TB, fast ein Petabyte) enthalten.

Da die gesamte Festplatte 200 GB enthält, wird angehaltenbadblocks und eine Fehlermeldung ausgegeben .

Ich habe versucht, in der Frage zu erwähnen: Basierend auf meinen Recherchen zu "badblocks" verstehe ich, dass "-b" sich auf logische (Dateisystem) Sektoren bezieht und nicht auf physische, also nicht auf 512 Byte, da dies wahrscheinlich der physikalische Standard für den Gerät, aber das "bs = 4M", das ich beim ersten Nullsetzen des Laufwerks mit "dd" angegeben habe (wobei ich davon ausging, dass es sich um Megabytes und nicht um Mebibytes handelt, daher die * 4.000.000 * und nicht * 4.194.304 *). Ich dachte mir, weil ich bereits `dd 'benutzt hatte, um mit dieser Blockgröße auf das Laufwerk zu schreiben ... Hashim vor 6 Jahren 0
... Ich müsste die Blockgröße in "badblocks -b" beibehalten, damit die Anzahl der Blöcke gleich ist und ich daher auf den Block auf der Festplatte zugreifen kann, nach dem ich gesucht habe. Ist einer der obigen Punkte falsch? Hashim vor 6 Jahren 0
Ihre Erklärung, was die Fehlermeldung verursacht, ist sinnvoll, aber diese Anzahl wird sowohl in "badblocks" als auch in "cat / proc / partition" als Anzahl der Gesamtblöcke für das Gerät angegeben. Ich habe sie mit [antwort hier] erhalten ( https://superuser.com/a/693000/323079). Hashim vor 6 Jahren 0
@Hashim, Re "_... aber ** diese ** Nummer ..._": Entschuldigung, aber es ist unklar, welche Nummer gemeint ist - bitte geben Sie genau an, welche Nummer es ist. agc vor 6 Jahren 0
Die Gesamtgröße des Laufwerks in Blöcken: 199148543. Hashim vor 6 Jahren 0
@Hashim "Ich ging davon aus, dass es sich um Megabytes handelt und nicht um Mebibytes" - Falsch. "man dd" sagt, das Suffix "M" bedeutet "1024 * 1024". - "Gesamtgröße des Laufwerks in Blöcken: 199148543" - In Blöcken welcher Größe? `/ proc / partitions` verwendet 1 KB. In Ihrer vorherigen Frage haben Sie eine Festplatte mit 200 GB erwähnt, die fast passen würde. Fast, weil diese ungerade Zahl ungerade aussieht. Ich würde 199148544 Blöcke von 1 KB (nummeriert 0-199148543) erwarten. Wenn Sie `badblocks` sagen, dass Sie Blöcke von 4MiB verwenden sollen, müssen Sie Folgendes neu berechnen: Sie haben (ungefähr?) 48620.25 davon. Könnte es sein, dass "dd" unter "cygwin" durch diesen letzten "Block" verloren ging? Kamil Maciorowski vor 6 Jahren 0
@Hashim Prüfen Sie, ob `dd if = / dev / zero von = / dev / sdc bs = 512 seek = 398295040` an erster Stelle einen Fehler ergibt. Dies ist `… bs = 4M seek = 48620` neu berechnet, aber der letzte Datenblock wird sicher vollständig geschrieben (kein gebrochener Teil), da die üblichen Sektoren 512B und 4 KB betragen, also müssen auf die eine oder andere Weise jede Platte etwas enthalten Ganzzahl von 512B "Chunks". Kamil Maciorowski vor 6 Jahren 0