Wenn SMART auf einer Festplatte defekte Sektoren findet, diese aber nicht
durch neue ersetzen kann (Current_Pending_Sector
), weil keine neuen Daten an
die Stelle geschrieben werden, kann man dies mit hdparm erzwingen. Die
passenden Sektoren zu finden, ist allerdings etwas schwierig. Man kann mit
badblocks danach suchen oder verwendet den Short-Test von SMART.
Defekte Sektoren suchen
Mit badblocks defekte Sektoren suchen
Bei badblocks muss man darauf achten, dass man die passende Sektorgröße verwendet, die man dann an hdparm geben kann. Oder man muss entsprechend umrechnen.
# badblocks -b 512 /dev/sdb
Prüfe von Block 0 bis 2930277167
Suche nach defekten Blöcken (Nur-Lesen-Modus):2772486384ne, 7:17:55 elapsed. (0/0/0 errors)
2772486385
2772486386
…
# hdparm --read-sector 2772486386 /dev/sdb
/dev/sdb:
reading sector 2772486386: FAILED: Input/output error
oder
# badblocks /dev/sdb
Prüfe von Block 0 bis 1465138583
Suche nach defekten Blöcken (Nur-Lesen-Modus):1386243192ne, 4:54:02 elapsed. (0/0/0 errors)
1386243193ne, 4:54:20 elapsed. (1/0/0 errors)
1386284228ne, 4:55:20 elapsed. (2/0/0 errors)
1386284229ne, 4:55:39 elapsed. (3/0/0 errors)
…
# hdparm --read-sector $((2*1386284229)) /dev/sdb
/dev/sdb:
reading sector 2772568458: FAILED: Input/output error
Defekte Sektoren über Short-Test bestimmen
Wenn man einen Short-Test durchführen lässt, steht im Log, an welcher Stelle sich der erste defekte Sektor befindet. So kann man schrittweise die defekten Sektoren finden.
# smartctl -t short /dev/sdb
…
=== 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 Wed Sep 21 20:42:11 2011
# smartctl -l selftest /dev/sdb
…
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed: read failure 10% 2810 2818313408
Defekte Sektoren neu schreiben
Mit hdparm kann man die defekten Sektoren wieder mit Nullen beschreiben, so dass die Festplatte dafür einen der reservierten Sektoren anstelle des defekten einblenden kann.
# hdparm --write-sector 2772568456 --yes-i-know-what-i-am-doing /dev/sdb
/dev/sdb:
re-writing sector 2772568456: succeeded
# for blk in 2772486384 2772486385 2772486386; do
hdparm --read-sector $blk /dev/sdb
[[ $? -eq 5 ]] && hdparm --write-sector $blk --yes-i-know-what-i-am-doing /dev/sdb
done