tl; dr falls ein URE auf einer Festplatte auftritt, wird I lose 1Bit, 1Byte oder die Größe eines Sektors (512Bytes oder 4096 Bytes AF)? und wenn möglich erklären warum?
Hintergrund: Die Frage stellt sich hier, wenn eine Festplatte Probleme beim Lesen von Daten hat. Sicherlich kann eine Festplatte vollständig ausfallen und alle Daten verloren gehen (DISK FAIL), aber der Fall, nach dem ich hier frage, ist, dass nur ein kleiner Teil davon verloren geht (URE, ein nicht korrigierbarer Lesefehler).
Obwohl ich nach Informationen zu URE gesucht habe, habe ich mit Sicherheit wenig herausgefunden. Dies könnte darin liegen, dass das, was intern im Laufwerk geschieht, dh was vor direkter Benutzerinteraktion wie der ECC-Korrektur verborgen ist, für mich schwer mit dem in Verbindung zu bringen ist, auf das ich als Benutzer zugreife - den Sektoren.
Stellen wir uns vor, die Festplatte hat Probleme beim Lesen von Daten.
In dieser Situation muss dies sicherlich entweder Folgendes bedeuten:
- (a) einige Bits des Sektors können nicht gelesen werden, oder
- (b) Alle Bits können gelesen werden, bestehen jedoch keinen Prüfsummentest (natürlich erwartet ein Sektor 4096 Byte Probleme nicht nur 8 * 4096 Bits, sondern einige zusätzliche Bits / Byte für die Fehlerprüfung / -korrektur (dh Paritätsbits) ) (c) ????
Nein, ich glaube, wenn wir uns in einer Situation befinden, in der eine Kombination aus (a) und (b) stattgefunden hat und eine verlässliche Rekonstruktion der Bytes des 4096-Sektors nicht möglich ist, ist es übertrieben anzunehmen, dass notwendigerweise alle von ihnen Garpage sind Wenn wir uns der internen HDD-Fehlerkorrekturlogik bewusst wären, könnten wir stattdessen sagen: "Schauen Sie, etwas wird nicht überprüft, und bei einer guten Änderung von mindestens 1,2,3 sind n Bits / Bytes der Blockdaten" falsch ". ". Wenn wir redundant "Hallo, Hallo ..., Hallo" ASCII-Byte-Strings in diesem Sektor speichern würden, hätten wir möglicherweise noch eine faire Folge von "Hallo, Hallo ...", bevor es ein "... Uellohello ... "(dh" e "->" U ").
Was ist die Granularität eines URE?
UPDATE: Es gab einen Kommentar, in dem die Idee eines schlechten Sektors eingegeben wurde (und der darauf hinwies, dass dies die Granularität eines URE-Ereignisses widerspiegelt. Es ist nicht absurd, dies vorzuschlagen und kann möglicherweise zur Beantwortung der Frage verwendet werden. Ich habe jedoch gerade einen anderen verwandten gelesen Fragen zu ausstehenden unlesbaren Sektoren (hier /unix/1869/how-do-i-make-my-disk-unmap-pending-unreadable-sectors ), die mich dazu veranlassen, dies in einigen zu denken In Szenarien gibt es tatsächlich eine verschwommenere Linie zwischen den Daten, die im Falle eines URE verloren gehen.
quelle
Antworten:
Der Fehlerkorrekturcode auf einer Festplatte ist ein zusätzlicher Datenblock, der jedem Hardwaresektor zugeordnet ist. Während des Schreibens berechnet die Laufwerksfirmware diese Daten und schreibt sie zusammen mit den Benutzerdaten. Während des Lesens liest die Firmware das ECC zusammen mit den Daten und überprüft sie zusammen.
Für eine herkömmliche Festplatte beträgt der Hardwaresektor 512 Byte. Bei einem Laufwerk mit erweitertem Format sind es 4 KByte (es spielt keine Rolle, ob das Laufwerk 512-Byte- oder 4 KByte-Sektoren an der Schnittstelle anzeigt, dh 512e gegenüber 4kn).
Das Ergebnis der Prüfung nach einem Lesevorgang hat grundsätzlich drei mögliche Ergebnisse:
Sektor wurde ohne Fehler gelesen. Dies ist auf modernen Festplatten eigentlich nicht ganz üblich. Die Bitdichten sind so, dass sie von der ECC-Arbeitsweise abhängen.
Sektor wurde mit korrigierbaren Fehlern gelesen. Wie oben angedeutet, ist dies nicht ungewöhnlich; es wird erwartet. Das Laufwerk gibt die Daten mit angewandter Fehlerkorrektur an den Benutzer zurück.
Sektor wurde gelesen, aber es gab zu viele "falsche Bits"; Die Fehler konnten nicht behoben werden.
Im letzteren Fall gibt das Laufwerk normalerweise keinerlei Inhalt zurück. Es wird nur ein Status zurückgegeben, der den Fehler anzeigt. Dies liegt daran, dass es nicht möglich ist zu wissen, welche Bits verdächtig sind, geschweige denn, welche Werte sie haben sollten. Daher ist der gesamte Sektor (ECC-Bits und alle) nicht vertrauenswürdig. Es ist unmöglich zu bestimmen, welcher Teil des schlechten Sektors schlecht ist, geschweige denn, was sein Inhalt sein sollte. Das ECC ist eine "Gestalt", die über den gesamten Sektorinhalt berechnet wird. Wenn es nicht übereinstimmt, ist es der gesamte Sektor, der nicht übereinstimmt.
SpinRite versucht einfach, den fehlerhaften Sektor immer wieder zu lesen. Dabei wird eine "Wartungslesefunktion" verwendet, die die Daten zurückgibt (jedoch ohne ECC-Bits), obwohl das Laufwerk "nicht korrigierbarer Fehler" anzeigt. Wie in der von DavidPostill verlinkten Beschreibung erwähnt, kann es gelingen, fehlerfrei zu lesen (tatsächlich ist "korrigierbar" wahrscheinlicher). oder es kann in der Lage sein, im Wesentlichen durch Mitteln der zurückgegebenen Bits eine vernünftige Schätzung des Sektorinhalts abzuleiten. Es ist nicht besser in der Lage, Fehler mithilfe des ECC präzise zu korrigieren als das Laufwerk. das ist mathematisch unmöglich.
quelle
Was ist die Granularität eines URE?
Nicht behebbare Lesefehler (URE) sind Sektorlesefehler. Wenn der Sektor nicht fehlerfrei gelesen werden kann, spielt es keine Rolle, ob es sich nur um 1 Byte oder um alle Bytes des Sektors handelt.
Die Granularität ist die Sektorgröße .
Selbst wenn nur 1 Byte fehlschlägt, erhalten Sie normalerweise keine Daten aus diesem Sektor zurück, ohne spezielle Software zu verwenden.
Können die Daten eines ausgefallenen Sektors wiederhergestellt werden?
SpinRite sagt:
Siehe Wie SpinRite unlesbare Daten wiederherstellt .
Haftungsausschluss.
Ich bin in keiner Weise mit SpinRite verbunden und habe es nie benutzt.
quelle
Es gibt kein "kann nicht ein bisschen lesen", es sei denn, Sie haben einen wirklich schwerwiegenden Hardwarefehler wie den Kopf, der nicht in der Lage ist, die richtige Spur zu suchen, oder die Servospur ist beschädigt und der richtige Sektor kann nicht gefunden werden . In beiden Fällen hätten Sie natürlich zumindest einen ganzen unlesbaren Sektor.
Andernfalls erhalten Sie immer Bits zurück, es handelt sich möglicherweise nur um falsche Bits. Hier kommt der Fehlerkorrekturcode ins Spiel. Es fügt jedem Sektor eine Anzahl zusätzlicher ECC-Bits hinzu, so dass jede korrekte Kombination von Datenbits und ECC-Bits eine algebraische Regel beachtet. Wenn alle Bits korrekt gelesen wurden, wird der Code validiert und die Daten können direkt zurückgegeben werden. Wenn eine kleine Anzahl von Bits falsch gelesen wurde, kann der ECC-Code verwendet werden, um genau zu bestimmen und welche zu korrigieren, sodass alle Daten korrekt zurückgegeben werden. Wenn eine größere Anzahl von Bits falsch gelesen wurde, kann der ECC - Code erkennt , dass es war ein Fehler, aber es hat nicht mehr genügend Informationen , um herauszufinden , welche Bits sind falsch; Dies ist ein nicht korrigierbarer Lesefehler. Wenn einWenn eine sehr große Anzahl von Bits falsch gelesen wird, wird der Code möglicherweise "versehentlich" korrekt validiert und das Laufwerk gibt beschädigte Daten zurück. Mit genügend ECC-Bits kann die Wahrscheinlichkeit, dass dies geschieht, so gering wie Sie möchten.
Um die Frage zu beantworten, auf die Sie sich wahrscheinlich eingelassen haben: Wenn ein teilweiser Lesefehler aufgetreten ist, aber genügend Informationen verfügbar waren, um herauszufinden, wo der Fehler aufgetreten ist, kann er auch korrigiert werden, und der Computer sieht überhaupt keinen Fehler . Das passiert eigentlich ständig. Ein nicht korrigierter Fehler tritt auf, wenn nicht herausgefunden werden kann, welche Datenbits gültig sind und welche nicht, und da der Fehlerkorrekturcode über einen Sektor berechnet wird, geschieht dies bei Sektorgranularität.
quelle
Nachdem ich es untersucht und von der Antwort https://superuser.com/a/969917/160771 von https://superuser.com/users/337631/davidpostill inspiriert habe
Ich möchte mit einer etwas erweiterten alternativen Antwort antworten. Erstens ist es wahr, dass die Festplatte und ihre Firmware der Ursprung eines URE-Ereignisses sind, dh das Ereignis, dass Daten nicht gelesen werden können. Ferner ist es wahr, dass die Daten in Sektoren von 512 oder 4096 Bytes verwendbarer Daten und etwa 50 bzw. 100 Bytes zusätzlicher Daten auf die Festplatte geschrieben werden, was eine Fehlerprüfung und -korrektur ermöglichen sollte.
Das Sprechen über ein URE geschieht daher natürlich im Kontext eines Festplattensektors. Der Begriff schlechter Sektor ist sicherlich etwas verknüpft, aber nicht identisch mit der aktuellen Situation, in der wir einen URE-Sektor haben.
Ein Sektor mit einigen Problemen, die fehlerfrei gelesen werden können, ist nicht unbedingt völlig bedeutungslos. Es könnte sein, dass tatsächlich alle 4096 Daten beschädigt wurden, aber es könnte auch sein, dass nur 1 Bit mehr als zuverlässig korrigierbar war (über die redundanten zusätzlichen ECC-Daten, die jedem Sektor hinzugefügt wurden), beschädigt wurde.
In der Kasese, in der nur einige wenige Bytes, die mehr als hdd korrigieren konnten, beschädigt wurden, gibt es Änderungen, bei denen ein Bruchteil der 4096 Bytes noch aussagekräftige Daten enthält.
Ein Beispiel könnte sein, dass der 4096 die ASCII-Zeichen von 2 Sätzen darstellt. Dann ist es möglich, dass 1 Satz oder mehr vollständig intakt ist. Es könnte auch möglich sein, dass jeder 2. oder 3. Buchstabe gelöscht wurde. Wenn die Daten von 4096 in einem URE-Ereignis verloren gehen, liegt dies an der Interpretation und ist abhängig von den Daten. Man könnte sich vorstellen, dass die Daten selbst eine weitere Schicht der ECC-Shell hatten, die eine weitere Wiederherstellung ermöglichen würde.
Daher ist es gut, dass die meisten Firmwares URE-Sektoren anders behandeln als schlechte Sektoren:
Oder insoweit könnte es sein, dass ein Teil des Sektors noch verwertbare Daten enthält.
quelle