Offline uncorrectable sectors

Beim Auftreten dieser SMART Meldungen sollte man hellhörig werden:

Jul 01 12:45:16 foo smartd[305]: Device: /dev/sdX [SAT], 8 Currently unreadable (pending) sectors
Jul 01 12:45:16 foo smartd[305]: Device: /dev/sdX [SAT], 8 Offline uncorrectable sectors

Während die erste Meldung noch ignorierbar ist - es handelt sich meist um einen temporären Fehler - deutet die zweite auf ein grundlegendes Problem im Low-Level Format der Platte hin.

Mit diesen Befehlen läßt sich das reparieren. Treten solche Fehler öfter auf, oder häufen sich, sollte man die Platte ausrangieren.

(!) WARNUNG: Die folgenden Schritte können bestehende Dateisysteme zerstören!

Unbedingt ein Backup haben/machen!

Nur wenn man weis was man tut UND es keine involvierten (defekten) Dateien im BTRFS gibt, geht das auch mit nicht gemounteter (unmount) Festplatte im laufenden System.

Es gibt hier zwei Ziele:

  1. Dateisystem in einen regulären Zustand zu versetzen um restliche Daten noch sichern zu können (Notfall-Backup)
  2. Festplatte wieder herstellen ohne diese komplett wieder neu beschreiben zu müssen (dd, badblocks, …)

Unter BTRFS hilft ein Scrub-Lauf um herauszufinden welche Dateien beschädigt sind:

btrfs -v scrub start -r /dev/sdX

Nach dem durchlaufen (~8-18h für 10TB) finden sich die Fehler im Syslog:

$> journalctl -r # und suchen nach: "/BTRFS"
...
Jul 01 10:01:46 foo kernel: BTRFS warning (device sdXn): i/o error at logical 176966312 on dev /dev/sdXn, physical 6923493609472, root 5, inode 978829, offset 4740048, length 4096, links 5 (path: /mnt/foo/bar/fileneame>

Diese Dateien löschen um die Sektoren freizugeben, können später wieder aus Backup zurückgespielt werden. Ein Kontrolllauf kann nicht schaden. Anschließend gehören die restlichen Dateien sofort in eine Datensicherung - sofern nicht noch nicht vorhanden.

Mit diesem Befehl herausbekommen welche Sektoren beschädigt sind:

$> smartctl -x /dev/sdX 

...
198 Offline_Uncorrectable   ----C-   100   100   000    -    7
...
Pending Defects log (GP Log 0x0c)
Index                LBA    Hours
    0        13522450505    43634
    1        13522450506    43634
    2        13522450507    43634
    3        13522450508    43634
    4        13522450509    43634
    5        13522450510    43634
    6        13522450511    43634

Es sind also 7 Sektoren beschädigt.

Mit diesem Befehl versuchen die Sektoren zu lesen:

$> hdparm --read-sector 13522450504 /dev/sdX

/dev/sdX:
reading sector 13522450504: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
...

Mit diesem Befehl versuchen die Sektoren zu schreiben:

$> hdparm --write-sector 13522450508 --yes-i-know-what-i-am-doing /dev/sdX

Die Liste der beschädigten Sektoren sollte anschließend wieder leer sein:

$> smartctl -x /dev/sdX 
...
Pending Defects log (GP Log 0x0c)
No Defects Logged
  • Zuletzt geändert: 2023-07-07 13:05
  • von Admin