Zum Inhalt springen

Hdparm/Anwendung: Unterschied zwischen den Versionen

Aus Foxwiki
Zeile 52: Zeile 52:


Mit einem "--dco-freeze" ließe sich die aktuelle, vielleicht ''vollwertige'' Konfiguration, bis zum nächsten Start/Reset ''einfrieren''.
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.
{{Hinweis|Erst ab hdparm Version 8.0 und Debian Lenny verfügbar. }}
Beispiel:
Im SMART Selftest-log:
<pre>=== 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
[...]</pre>
<pre>hdparm --read-sector 713318 /dev/sdd
/dev/sdd:
reading sector 713318: FAILED: Input/output error</pre>
Der ist wirklich hin.
Nun der Schreibversuch:
<pre>hdparm --yes-i-know-what-i-am-doing --write-sector 713318 /dev/sdd
/dev/sdd:
re-writing sector 713318: succeeded</pre>
Der Sektor wurde anscheinend intern ersetzt und ist nun mit dem Inhalt des letzten Schreibvorganges gefüllt:
{{RootShell|hdparm  --read-sector 713318 /dev/sdj
/dev/sdj:
reading sector 713318: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
[...]
0000 0000 0000 0000 0000 0000 0000 0000}}
''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!
<pre>hdparm --yes-i-know-what-i-am-doing --make-bad-sector 100 /dev/sdc
/dev/sdc:
Corrupting sector 100 (WRITE_LONG): succeeded</pre>
Erst nach einem fehlgeschlagenen Leseversuch:
<pre>hdparm --read-sector 100 /dev/sdc
/dev/sdc:
reading sector 100: FAILED: Input/output error</pre>
So taucht die erwartete und gewünschte Meldung im Syslog auf bzw.&nbsp;die betreffenden SMART Attribute erhöhen sich:
<pre>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</pre>
<pre>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</pre>
''Anmerkung: Die SMART Attribute und vieles mehr lässt sich mit dem smartmontools auslesen. Dazu unter [[Festplattendiagnostik- und Überwachung]] mehr.''

Version vom 16. März 2025, 14:21 Uhr

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.