Zum Inhalt springen

Hdparm/Schlechte Sektoren

Aus Foxwiki

Schlechte Sektoren schreiben/auslagern

--read-sector
--write-sector
Als schlecht erkannte Sektoren einer Festplatte, benötigen erst einen Schreibvorgang, um letztendlich ausgelagert und von Spare-Sektoren ausgetauscht zu werden, sofern sich diese nicht durch neu geschriebene ECC-Summen korrigieren lassen. Da Tools wie GNU-DD standardmäßig auf Block-Ebene agieren (außer man setzt direct-Flags), brechen sie dabei mit einem I/O-Fehler ab. Badblocks z. B. ist da etwas hartnäckiger. Ist der problematische Sektor bekannt, kann mit hdparm nun versucht werden, diesen auf "low-level"-Ebene zu überschreiben. Leider ist es nicht möglich, ein anderes Bitmuster vorzugeben. Parallel sollte man die Kernel-Meldungen im Auge behalten, um alle ATA-Fehler mitzubekommen.

Vorlage:Hinweis Beispiel: Im SMART Selftest-log:

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. 1 Extended offline Completed: read failure 40% 55 713318

[...]

hdparm --read-sector 713318 /dev/sdd

/dev/sdd:
reading sector 713318: FAILED: Input/output error

Der ist wirklich hin. Nun der Schreibversuch:

hdparm --yes-i-know-what-i-am-doing --write-sector 713318 /dev/sdd

/dev/sdd:
re-writing sector 713318: succeeded

Der Sektor wurde anscheinend intern ersetzt und ist nun mit dem Inhalt des letzten Schreibvorganges gefüllt: Vorlage:RootShell Anmerkung: Die SMART Attribute und vieles mehr lässt sich mit dem smartmontools auslesen. Dazu unter Festplattendiagnostik- und Überwachung mehr.

Schlechte Sektoren erzeugen

--make-bad-sector
Zum Test von Hardware oder Überwachungsdiensten/systemen braucht man einen praktischen und doch kontrollierten Ernstfall, also einen Lesefehler der Festplatte. Der Befehl setzt entweder ein "WRITE_LONG" oder ein neues für LBA48 taugliches "WRITE_UNCORRECTABLE_EXT" Kommando ab, um den gegebenen Sektor auf der Festplatte zu korrumpieren. Ein "f" vor der Sektorzahl würde diesen nur als schlecht markieren, nicht wirklich korrumpieren. Beim Korrumpieren werden natürlich nur die ECC Daten des Sektors verfälscht und nicht die physische Oberfläche beschädigt. Somit lässt sich dieser beim nächsten beschreiben auch wieder reparieren. Selbstverständlich nutzt man dafür keine Festplatte mit produktivem Inhalt und Funktion, eher eine ausrangierte oder wenigstens ungenutzte. Denn der betroffene Sektor wird gelöscht und bei falscher Anwendung kann mehr passieren!
hdparm --yes-i-know-what-i-am-doing --make-bad-sector 100 /dev/sdc

/dev/sdc:
Corrupting sector 100 (WRITE_LONG): succeeded

Erst nach einem fehlgeschlagenen Leseversuch:

hdparm --read-sector 100 /dev/sdc

/dev/sdc:
reading sector 100: FAILED: Input/output error

So taucht die erwartete und gewünschte Meldung im Syslog auf bzw. die betreffenden SMART Attribute erhöhen sich:

ata4.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata4.00: irq_stat 0x40000001
ata4.00: failed command: READ SECTOR(S)
ata4.00: cmd 20/00:01:64:00:00/00:00:00:00:00/e0 tag 0 pio 512 in
         res 51/40:00:64:00:00/00:00:00:00:00/e0 Emask 0x9 (media error)
ata4.00: status: { DRDY ERR }
ata4.00: error: { UNC }
ata4.00: configured for UDMA/133
ata4: EH complete
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       1

Anmerkung: Die SMART Attribute und vieles mehr lässt sich mit dem smartmontools auslesen. Dazu unter Festplattendiagnostik- und Überwachung mehr.