Wir setzen in unserem Büro schon lange auf FreeNAS als Netzwerk-Backup Speicher und schätzen die Zuverlässigkeit des Systems sehr.
Umso schlimmer war es als plötzlich in der Adminkonsole ein Festplatten Fehler aufgezeigt wurde. Auf allen drei Laufwerken des Storage-Verbundes hatte sich ein nichtlesbarer Sektor breit gemacht.
Was hat es mit einem defekten Sektor auf sich? Nun zunächst einmal hat eine Festplatte viele zusätzliche freie Sektoren welche erst dann genutzt werden sobald ein primärer Sektor kaputt geht. Moderne Festplatten haben auch eine Fehlerkorrektor. Diese erlaubt es der Fesplatte bestimmte Sektoren als "defekt" zu markieren und fortan einen der Ersatzsektoren zu nutzen.
Viele Seiten im Internet sagen, dass man eine Festplatte mit einem solchen Fehler direkt entsorgen und durch eine Ersatzfestplatte ersetzen soll. Das ist aber beim erstmaligen Auftreten eines solchen Fehlers unnötig. Diese Sektorenfehler können zum Beispiel entstehen wenn das System zum Beispiel durch einen Stromausfall hart ausgeschaltet wird. Kritsch werden solche Fehler erst wenn Sie immer wieder auftreten oder sich die Zahl der defekten Sektoren konstant erhöht. Dann sollte man die Platte austauschen. Vorher kann man folgende Reparatur probieren.
Zunächst ermittelt man die Position des ersten defekten Sektors. Dazu meldet man sich am Besten per SSH als Root an und arbeitet auf der Konsole. Ich würde für solche Arbeiten die integrierte Webkonsole nicht empfehlen.
Als Root folgenden Befehl absetzen, wobei das Laufwerk (hier /dev/ada2) entsprechend umbenannt werden muss.
smartctl -x /dev/ada2
Man bekommt nun eine Übersicht über den aktuellen S.M.A.R.T. Status der Festplatte. Interessant sind diese zwei Zeilen
197 Current_Pending_Sector -O--C- 100 100 000 - 8
198 Offline_Uncorrectable ----C- 100 100 000 - 8
Hier sehen wir, dass aktuell acht Sektoren als unkorrigierbar markiert sind. Etwas weiter unten in der Ausgabe sieht man an welchem Sektor auf der Festplatte der Fehler beginnt.
# 1 Extended offline Completed: read failure 10% 10390 7812720600
Die restlichen Angaben sind erstmal uninteressant.
Als nächstes muss man die Festplatte in den Schreibmodus versetzen, so dass man direkt auf einzelne Sektoren der Festplatte schreiben kann. Das geht mit:
sysctl kern.geom.debugflags=16
Die Konsole antwortet mit "kern.geom.debugflags: 0 -> 16". Somit ist die Festplatte bereit zum Schreiben. Der Trick ist der, dass wir nun bewusst einen Schreibvorgang auf den fehlerhaften Sektor ausführen. Das merkt die Fehlerkorrektur der Festplatte, leitet den Zugriff um und repariert dabei den Sektorfehler. Der direkte Schreibvorgang wird folgendermaßen intialisiert:
dd if=/dev/zero of=/dev/ada2 bs=512 count=8 seek=7812720600 conv=noerror,sync
Auch hier wieder unbedingt das Laufwerk entsprechend anpassen. "bs" ist die Sektorgrösse und "count" die Anzahl der Sektoren. Bei "seek" muss der Wert stehen welcher als erster fehlerhafter Sektor ermittelt wurde.
Wenn der Befehl erfolgreich war antwortet das Terminal mit:
8+0 records in
8+0 records out
4096 bytes transferred in 0.001357 secs (3018779 bytes/sec)
Jetzt kann man den S.M.A.R.T. Status der Festplatte erneut prüfen und stellt hoffentlich fest:
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0
Alle Fehler sind behoben!
Man sollte nach erfolgreicher Korrektur die Festplatte die nächste Zeit genau im Auge behalten. Sollten erneut Fehler auftreten, dann sollte die Festplatte doch ersetzt werden.