bingo88
PCGH-Community-Veteran(in)
Mein Linux-Server hat in letzter Zeit immer häufiger Probleme beim Lesen bestimmter Sektoren gemacht, offenbar weil diese defekt sind. Da die Platte jetzt knapp 34.000 Stunden auf der Uhr hat (und nicht für 24/7 ausgelegt ist), ist das nicht unbedingt verwunderlich. Allerdings bedeuten ein paar defekte Sektoren noch nicht das Ende der Platte, denn jede Festplatte besitzt einen Bereich mit ungenutzten Sektoren, die zur Neuzuweisung verwendet werden können. Das Problem bei der Sache ist nur, dass die Neuzuweisung eine Schreiboperation auf den betroffenen Sektor erfordert, ein Lesen generiert nur SMART-Fehlermeldungen, repariert aber nichts. Man kann das allerdings selbst durchführen, was ich an der Stelle nun einmal vorstellen möchte.
ACHTUNG: Die betroffenen Sektoren werden mit 0-Daten überschrieben, das kann Datenverlust zur Folge haben! Andererseits sind die betroffenen Sektoren eh nicht mehr lesbar, die Daten sind also ggf. schon verloren. Trotzdem gilt: DURCHFÜHRUNG AUF EIGENE GEFAHR!
1. Voraussetzungen
Da mein Server mit Linux (Ubuntu Server) läuft und Linux alle notwendigen Tools bereits mitbringt, setze ich für diese Anleitung ein Linux-System (Debian, Ubuntu oder Derivat) voraus. Man kann das aber auch alles mit einer entsprechenden Live-CD machen, es muss kein Linux installiert sein. Folgende Tools werden benötigt:
- smartctl
- hdparm
2. Defekte Sektoren finden
Unter Linux werden die SATA-Festplatten nach folgendem Schema benannt:
1. Festplatte: /dev/sda
2. Festplatte: /dev/sdb
...
Bei mir war die erste (und einzige) Festplatte betroffen, daher beziehe ich mich hier immer auf /dev/sda. Wenn bei euch die zweite Festplatte betroffen ist, dann müsst ihr /dev/sda durch /dev/sdb ersetzen. ACHTUNG: /dev/sdX bezeichnet die physischen Festplatten, das hat nichts mit Partitionen zu tun!
Wenn man Glück hat, tauchen im Kernel-Eventlog die entsprechenden Fehlermeldungen auf. Das setzt allerdings voarus, dass ein fehlerhafter Zugriff unter Linux erfolgt ist. Das sieht dann so aus:
In dem Fall hier ist der Sektor 501952 auf der ersten Festplatte (/dev/sda) betroffen.
Wenn man kein entsprechendes Eventlog hat, kann man den fehlerhaften Sektor auch über das Programm smartctl ermitteln:
Aktuell hat die HDD /dev/sda einen schwebenden Sektor. Um diesen nun zu finden, führen wir als nächstes einen kurzen Selbsttest durch:
Nun muss man kurz warten, bis der Selbsttest abgeschlossen ist. Danach sehen wir uns das Ergebnis an:
Hier sehen wir nun, dass Sektor 501952 nicht gelesen werden konnte.
Sollte der kurze Selbsttest keine defekten Sektoren gefunden haben, so muss man einen langen Selbsttest durchführen. Der kurze Selbsttest prüft nämlich nur stichprobenartig, während der lange Selbsttest die gesamte Festplatte untersucht:
Dieser Test dauert allerdings wesentlich länger als der Kurztest. Das Ergebnis kann auf die gleiche Weise wie beim Kurztest abgerufen werden. Wenn allerdings ein Fehler auftritt, bricht der Test schon vorher ab, man sollte daher ab und an den Fortschritt kontrollieren. Dazu reicht es, mittels smartctl das Log abzurufen:
Der gefundene defekte Sektor sollte anschließend noch mittels einer Leseoperation explizit getestet werden:
Der Sektor ist tatsächlich nicht mehr lesbar! Dies generiert übrigens auch eine Fehlermeldungen im Eventlog (-> dmesg).
3. Defekte Sektoren neu zuweisen
Nachdem wir nun den betroffenen Sektor gefunden haben, starten wir eine forcierte Schreiboperation auf diesen Sektor. Bis jetzt haben wir nur Daten gelesen, davon geht nichts kaputt. Was nun folgt, überschreibt einen beliebigen Sektor auf der Platte, daher muss man sehr vorsichtig sein, was man tut!
Das Programm warnt einen auch genau davor. Daher muss man noch einen zusätzlichen Parameter ergänzen:
Den Schreibvorgang wiederholt man am besten ein paar mal. Danach sehen wir nach, ob der Sektor nun lesbar ist:
Siehe da, der Sektor wurde neu zugewiesen, aber alle Daten wurden mit 0 überschrieben.
Wenn man sich nun die SMART-Werte anzeigen lässt, sollte der Current Pending Sector Count um 1 reduziert sein. Man sollte auch den Selbsttest erneut ausführen, um ggf. weitere Sektoren zu finden (ein Sektor kommt selten allein) und die Prozedur für alle anderen betroffenen Sektoren wiederholen. Zum Abschluss sollte man eventuell auch noch einmal den langen Selbsttest durchlaufen lassen, um die gesamte Festplatte zu scannen.
4. Fazit
Bei meiner Platte waren etwa 20 Sektoren betroffen, die sich aber alle mit diesem Verfahren reparieren ließen
Man sollte bei einer hohen Anzahl defekter Sektoren allerdings darüber nachdenken, die Platte zu tauschen oder zumindest keine wichtigen Daten mehr ohne Backup darauf zu speichern, um einem möglichen Datenverlust vorzubeugen. Aber Backups sollte man auch bei gesunden Platten sowieso machen
ACHTUNG: Die betroffenen Sektoren werden mit 0-Daten überschrieben, das kann Datenverlust zur Folge haben! Andererseits sind die betroffenen Sektoren eh nicht mehr lesbar, die Daten sind also ggf. schon verloren. Trotzdem gilt: DURCHFÜHRUNG AUF EIGENE GEFAHR!
1. Voraussetzungen
Da mein Server mit Linux (Ubuntu Server) läuft und Linux alle notwendigen Tools bereits mitbringt, setze ich für diese Anleitung ein Linux-System (Debian, Ubuntu oder Derivat) voraus. Man kann das aber auch alles mit einer entsprechenden Live-CD machen, es muss kein Linux installiert sein. Folgende Tools werden benötigt:
- smartctl
Code:
sudo apt-get install smartmontools
2. Defekte Sektoren finden
Unter Linux werden die SATA-Festplatten nach folgendem Schema benannt:
1. Festplatte: /dev/sda
2. Festplatte: /dev/sdb
...
Bei mir war die erste (und einzige) Festplatte betroffen, daher beziehe ich mich hier immer auf /dev/sda. Wenn bei euch die zweite Festplatte betroffen ist, dann müsst ihr /dev/sda durch /dev/sdb ersetzen. ACHTUNG: /dev/sdX bezeichnet die physischen Festplatten, das hat nichts mit Partitionen zu tun!
Wenn man Glück hat, tauchen im Kernel-Eventlog die entsprechenden Fehlermeldungen auf. Das setzt allerdings voarus, dass ein fehlerhafter Zugriff unter Linux erfolgt ist. Das sieht dann so aus:
Code:
user@server1:~$ dmesg
...
[71178.940573] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
[71178.944473] ata1.00: irq_stat 0x40000001
[71178.948418] ata1.00: failed command: READ DMA
[71178.952240] ata1.00: cmd c8/00:08:c0:a8:07/00:00:00:00:00/e0 tag 12 dma 4096 in
[71178.952240] res 51/40:00:c0:a8:07/00:00:00:00:00/e0 Emask 0x9 (media error)
[71178.960020] ata1.00: status: { DRDY ERR }
[71178.963834] ata1.00: error: { UNC }
[71179.911934] ata1.00: configured for UDMA/133
[71179.911964] sd 0:0:0:0: [sda] Unhandled sense code
[71179.911970] sd 0:0:0:0: [sda]
[71179.911974] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[71179.911979] sd 0:0:0:0: [sda]
[71179.911984] Sense Key : Medium Error [current] [descriptor]
[71179.911990] Descriptor sense data with sense descriptors (in hex):
[71179.911993] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
[71179.912067] 00 07 a8 c0
[71179.912079] sd 0:0:0:0: [sda]
[71179.912087] Add. Sense: Unrecovered read error - auto reallocate failed
[71179.912094] sd 0:0:0:0: [sda] CDB:
[71179.912099] Read(10): 28 00 00 07 a8 c0 00 00 08 00
[B][71179.912122] end_request: I/O error, dev sda, sector 501952[/B]
[71179.916351] Buffer I/O error on device sda5, logical block 24
[71179.920190] ata1: EH complete
...
Wenn man kein entsprechendes Eventlog hat, kann man den fehlerhaften Sektor auch über das Programm smartctl ermitteln:
Code:
user@server1:~$ sudo smartctl -a /dev/sda
...
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 1
...
Code:
user@server1:~$ sudo smartctl -t short /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-46-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Fri Feb 27 09:17:21 2015
Use smartctl -X to abort test.
Code:
user@server1:~$ sudo smartctl -l selftest /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-46-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 0
Warning: ATA Specification requires self-test log structure revision number = 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed: read failure 20% 34007 [B]501952[/B]
...
Sollte der kurze Selbsttest keine defekten Sektoren gefunden haben, so muss man einen langen Selbsttest durchführen. Der kurze Selbsttest prüft nämlich nur stichprobenartig, während der lange Selbsttest die gesamte Festplatte untersucht:
Code:
user@server1:~$ sudo smartctl -t long /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-46-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 66 minutes for test to complete.
Test will complete after Fri Feb 27 14:39:26 2015
Use smartctl -X to abort test.
Code:
user@server1:~$ sudo smartctl -l selftest /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-46-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 0
Warning: ATA Specification requires self-test log structure revision number = 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Self-test routine in progress 90% 34012 -
...
Der gefundene defekte Sektor sollte anschließend noch mittels einer Leseoperation explizit getestet werden:
Code:
user@server1:~$ sudo hdparm --read-sector 501952 /dev/sda
/dev/sda:
reading sector 501952: FAILED: Input/output error
3. Defekte Sektoren neu zuweisen
Nachdem wir nun den betroffenen Sektor gefunden haben, starten wir eine forcierte Schreiboperation auf diesen Sektor. Bis jetzt haben wir nur Daten gelesen, davon geht nichts kaputt. Was nun folgt, überschreibt einen beliebigen Sektor auf der Platte, daher muss man sehr vorsichtig sein, was man tut!
Code:
user@server1:~$ sudo hdparm --write-sector 501952 /dev/sda
/dev/sda:
Use of --write-sector is VERY DANGEROUS.
You are trying to deliberately overwrite a low-level sector on the media.
This is a BAD idea, and can easily result in total data loss.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.
Code:
user@server1:~$ sudo hdparm --write-sector 501952 --yes-i-know-what-i-am-doing /dev/sda
/dev/sda:
re-writing sector 501952: succeeded
Code:
user@server1:~$ sudo hdparm --read-sector 501952 /dev/sda
/dev/sda:
reading sector 501952: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
Wenn man sich nun die SMART-Werte anzeigen lässt, sollte der Current Pending Sector Count um 1 reduziert sein. Man sollte auch den Selbsttest erneut ausführen, um ggf. weitere Sektoren zu finden (ein Sektor kommt selten allein) und die Prozedur für alle anderen betroffenen Sektoren wiederholen. Zum Abschluss sollte man eventuell auch noch einmal den langen Selbsttest durchlaufen lassen, um die gesamte Festplatte zu scannen.
4. Fazit
Bei meiner Platte waren etwa 20 Sektoren betroffen, die sich aber alle mit diesem Verfahren reparieren ließen
Code:
user@server1:~$ sudo smartctl -l selftest /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-46-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 0
Warning: ATA Specification requires self-test log structure revision number = 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed without error 00% 34013 -
# 2 Extended offline Aborted by host 90% 34012 -
# 3 Extended offline Aborted by host 90% 34012 -
...
Man sollte bei einer hohen Anzahl defekter Sektoren allerdings darüber nachdenken, die Platte zu tauschen oder zumindest keine wichtigen Daten mehr ohne Backup darauf zu speichern, um einem möglichen Datenverlust vorzubeugen. Aber Backups sollte man auch bei gesunden Platten sowieso machen
Zuletzt bearbeitet: