Ich habe früher Plattenfirmware für WD geschrieben und einmal die Firmware geschrieben, die fehlerhafte Blöcke neu zugewiesen hat.
Erstens werden die meisten fehlerhaften Blöcke beim Lesen und nicht beim Schreiben erkannt. Das Schreiben erfolgt blind, dh die Daten werden ohne Prüfung geschrieben. Wenn der Datenträger beim Schreiben fehlerhaft ist, werden Sie ihn nicht kennen, bis der Host einen Lesevorgang für diesen Sektor ausführt. Es gibt einen kleinen Teil des Sektors (den Sektor-Header), der beim Schreiben gelesen wird, um den richtigen Sektor zu lokalisieren. Wenn beim Lesen des Sektor-Headers ein Fehler auftritt, weist das Laufwerk den Sektor neu zu und schreibt ihn mit den empfangenen Daten aus dem Schreibbefehl. Die überwiegende Mehrheit der fehlerhaften Blöcke wird jedoch beim Lesen erkannt. Nur weil ein Schreibvorgang für einen Sektor erfolgreich ist, bedeutet dies nicht, dass der Datenträger in Ordnung ist oder der Sektor neu zugewiesen wurde.
Nun zur Neuzuweisung von fehlerhaften Blöcken (auch als Neuzuweisung bezeichnet). Ja, normalerweise versucht das Laufwerk, einen Sektor neu zuzuweisen, wenn der Fehler schwerwiegend genug ist (dh der ECC-Fehler ist schwerwiegend genug), aber das Laufwerk kann die Daten nach der ECC-Korrektur immer noch wiederherstellen. Normalerweise geschieht dies automatisch. Die einzige Ausnahme besteht darin, dass der Host das Laufwerk zuvor angewiesen hat, keine automatischen Neuzuordnungen vorzunehmen, dies wird jedoch selten durchgeführt.
Was passiert also, wenn das Laufwerk einen Lesevorgang durchführt und die Daten nicht wiederherstellen kann? Nichts. Der Fehler wird dem Host gemeldet, aber es wird keine Neuzuweisung vorgenommen. Das Problem ist, dass das Laufwerk den Sektor neu zuweisen könnte, aber nicht die geringste Ahnung hat, welche Daten in den neu zugewiesenen Sektor geschrieben werden sollen. Wenn nur eine Reihe von Nullen geschrieben und der Sektor dann erneut gelesen wird, werden alle Nullen zurückgegeben, ohne dass darauf hingewiesen wird, dass die Daten ungültig sind. Dies entspricht im Wesentlichen der Beschädigung von Daten. Das Laufwerk kann sich aus verschiedenen Gründen nicht darauf verlassen, dass der Host die Fehler protokolliert (z. B. wenn das Laufwerk auf einen neuen Host verschoben wurde). nicht wiederhergestellt werden.
Moderne Laufwerke speichern jedoch die Position des fehlerhaften Sektors, wenn er nicht neu zugeordnet werden kann. Die Anzahl der fehlerhaften Sektoren, die auf eine Neuzuweisung warten, können Sie den SMART-Daten entnehmen. Wenn in einen der fehlerhaften Sektoren, die auf eine Neuzuweisung warten, geschrieben wird, erfolgt die Neuzuweisung, da das Laufwerk nach der Neuzuweisung über gültige Daten zum Schreiben verfügt. Wenn die Leute sagen, das Schreiben in einen schlechten Sektor würde ihn neu zuordnen, ist das wirklich nur die halbe Wahrheit. Das Laufwerk muss zuerst gelesen werden, damit das Laufwerk alle fehlerhaften Sektoren erkennen kann, die nicht automatisch neu zugeordnet werden können. Auf diese Weise können Sie ein gesamtes Laufwerk schreiben, und die SMART-Daten geben an, dass keine fehlerhaften Sektoren auf eine Neuzuweisung warten. Sie haben jedoch nicht unbedingt alle fehlerhaften Sektoren aus dem Laufwerk entfernt. Wenn Sie also wirklich alle fehlerhaften Sektoren löschen möchten,
Es gibt andere Möglichkeiten, mit fehlerhaften Blöcken umzugehen, die nicht neu zugeordnet werden können. Wenn das Laufwerk Teil einer redundanten RAID-Konfiguration ist (dh nicht RAID 0), sollte die RAID-Software die Daten für einen fehlerhaften Sektor automatisch von den anderen Laufwerken wiederherstellen und in den neu zugewiesenen Sektor schreiben. SCSI-Datenträger verfügen über einen expliziten Befehl zum erneuten Zuweisen von Blöcken, mit dem der Host die Neuzuweisung erzwingen kann, selbst wenn keine gültigen Daten zum Schreiben in den Block vorhanden sind, die Verwendung jedoch recht gering ist.