Hdparm/Anwendung
Hdparm/Anwendung
Erweiterte Funktionen
- Warnung
Folgende Befehle können auch bei richtiger Anwendung einen kompletten Datenverlust oder gar Hardware-Schaden verursachen!
- Hinweis
Hdparm verlangt bei jeder potentiell gefährlichen Operation ein "--yes-i-know-what-i-am-doing"-Flag, um zu vermeiden, solch ein Kommando aus versehen abzusetzen
- Eine kleine Sammlung nützlicher Hdparm-Anwendungen
- -z
- Zwingt den Kernel, die Partitionstabelle des gegebenen Gerätes neu einzulesen. Erfüllt die gleiche Aufgabe wie "sfdisk -R", "blockdev --rereadpt" oder "blktool <device> reread-part". Kann nützlich sein, um eine manuell geänderte Partitionstabelle ohne Neustart zu aktualisieren (Beispielsweise MBR mit dd überschrieben oder Partitionstabelle zurück gespielt).
- -w
- Führt einen Laufwerksreset durch. Diese Funktion ist sehr gefährlich, da sie das ganze System gefährden kann.
Funktion freischalten
- --dco-freeze
- --dco-identify
- --dco-restore
Seit ATA/ATAPI 6 gibt es das Device Configuration Overlay (DCO). Damit haben OEM Hersteller die Möglichkeit, bestimmte, in den Identify-Informationen gelisteten Werte, zu deaktivieren. Mit hdparm lassen sich diese anzeigen.
- Abschaltbare Funktionen anzeigen
# hdparm --dco-identify /dev/sdj /dev/sdj: DCO Revision: 0x0001 The following features can be selectively disabled via DCO: Transfer modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 udma6(?) Real max sectors: 312581808 ATA command/feature sets: SMART self_test error_log security HPA 48_bit SATA command/feature sets: (?): NCQ interface_power_management SSP}}
Anschließend würde man die Ausgabe mit den Identify "-I" Werten vergleichen. Ist dort eine deaktivierte aber gewünschte Funktion dabei, kann man laut Manpage versuchen, diese auf Werkseinstellung zurück zu setzen:
# hdparm --yes-i-know-what-i-am-doing --dco-restore /dev/sdj /dev/sdj: issuing DCO restore command HDIO_DRIVE_CMD(dco_restore) failed: Input/output error }}
... wie gesagt, mit etwas Glück.
Mit einem "--dco-freeze" ließe sich die aktuelle, vielleicht vollwertige Konfiguration, bis zum nächsten Start/Reset einfrieren.
Schlechte Sektoren
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 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.