Markieren Sie fehlerhafte Sektoren auf der Festplatte, ohne sie zu formatieren

22

Ich habe festgestellt, dass auf meinem Ubuntu-Heimserver ein Laufwerk aus irgendeinem Grund schreibgeschützt ist. Beim Ausgraben stellte ich fest, dass dies passieren kann, wenn Festplatten fehlerhaft sind. Ich habe Badblocks verwendet, um nach Fehlern zu suchen, und in der Tat habe ich einige beschädigte Sektoren.

In den meisten Fällen besteht die einzig vernünftige Vorgehensweise darin, Daten zu sichern, die Festplatte zu entfernen und eine neue zu kaufen. Dieser Server hat jedoch nichts, was ich nicht bereits an mehreren Orten gesichert habe, und ich möchte es verwenden, bis es stirbt. Ich benutze es zum Streamen von Musik und zum Ausführen einiger einfacher Skripte. In jedem Fall wäre es ein großer Aufwand, alles neu zu installieren.

Gibt es eine Möglichkeit, diese fehlerhaften Blöcke zu markieren, ohne eine Festplatte zu formatieren?

enedene
quelle

Antworten:

29

Ich nehme an, Sie sprechen von physischen fehlerhaften Blöcken auf einer Festplatte und nicht von beschädigten Dateisystemen.

Um den physischen Zustand Ihrer Festplatte zu überprüfen, installieren Sie sie am besten smartmontools

sudo apt-get install smartmontools

Dies funktioniert, weil alle modernen Festplatten ihren Integritätsstatus mit einem System namens SMART protokollieren

Verwenden Sie den smartctrlBefehl, um diesen Status auszulesen. Zum Beispiel, um alle Attribute vom ersten Plattenaufruf zu lesen

sudo smartctl --all /dev/sda

Achten Sie auf eine Zeile über den allgemeinen Gesundheitszustand. Sobald dies auf einen Fehler hinweist, ist es sehr wahrscheinlich, dass die Festplatte bald ausfällt.

SMART overall-health self-assessment test result: PASSED

Andere Zeilen, auf die Sie prüfen möchten, sind die Anzahl der ausstehenden Sektoren und die neu zugewiesenen Sektoren.

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       48
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       2

Neu zugewiesene Listen in der Regel im Raw-Feld die Anzahl der fehlerhaften Sektoren, die die Festplatte gegen funktionierende Ersatzsektoren ausgetauscht hat. Ausstehend sind Sektoren, die möglicherweise neu zugeordnet werden, falls der nächste Schreibvorgang fehlschlägt.

Sie können sogar Selbsttests der Festplatte auslösen, wenn dies von Ihrem Modell unterstützt wird

sudo smartctl -t long /dev/sda

Verwenden Sie badblockseinen Modus, in dem Daten geschrieben werden, um die Überprüfung aller Sektoren zu erzwingen . Beachten Sie, dass das Ausführen zwar im Allgemeinen sicher ist, Ihre Festplatten jedoch zusätzlich belastet werden, was zu einem Ausfall führen kann. Erstellen Sie immer eine Sicherungskopie Ihrer Daten.

sudo badblocks -svvn -c 262144 /dev/sda

Wenn Sie Ihre Festplatte auf diese Weise vollständig verarbeitet haben, sollte der Festplattencontroller alle fehlerhaften Blöcke durch funktionierende ersetzt haben, und die neu zugewiesene Anzahl wird im SMART-Protokoll erhöht.

user228505
quelle
2
Was ist der Einfluss von -coder die Anzahl von Blöcken, die gleichzeitig getestet werden, oder mit anderen Worten, warum haben Sie einen so großen Wert im Vergleich zum Standardwert von 64?
Greole
4
Die Standardblockgröße von 1024 Byte multipliziert mit der Standardgröße von 64 Blöcken führt dazu, dass bei jeder Anforderung nur 64 KB verarbeitet werden. Bei modernen Festplatten mit einem Durchsatz von bis zu 150 MiB / s entsteht mehr Overhead, als ich mir vorstellen kann. Ich möchte dem Laufwerk die Möglichkeit geben, die Daten auf die effizienteste Weise zu verarbeiten, ohne auf die Daten auf dem Bus zu warten.
user228505
Sagt: / dev / sda wird anscheinend vom System verwendet; Es ist nicht sicher, Badblocks zu betreiben!
Dims
1
@Dims Es weist Sie an, dies nicht auf einem aktiv gemounteten Datenträger auszuführen. Hängen Sie zuerst die Festplatte aus. In Ihrem Fall könnte es Ihr Systemlaufwerk sein. Starten Sie also zuerst ein Rettungssystem.
user228505
2
@Dims Es gibt die Option -force, wenn Sie es trotzdem ausführen möchten. dh sudo badblocks -svvn -c 262144 / dev / sda -force
ADR