Hdparm: Unterschied zwischen den Versionen

Aus Foxwiki
Robertquies (Diskussion | Beiträge)
Die Seite wurde neu angelegt: „=Quellen=“
 
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“
 
(118 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=Quellen=
{{DISPLAYTITLE:hdparm}}
'''hdparm''' - anzeigen, testen und setzen von Hardwareparametern für ATA-Festplattenlaufwerke
 
== Beschreibung ==
Hdparm zeigt und setzt Parameter von Laufwerken, die am (E)IDE,- SATA und SAS Bus angeschlossen sind.
* Hintergründlich nutzen diese den ATA/ATAPI Befehlssatz.
* Deshalb ist es nur bei wenigen IDE zu USB Bridge Adaptern möglich, die dahinter liegende Festplatte anzusprechen.
* Um Adapter/Laufwerke zu finden, welche die nötige "ATA command pass through"-Funktionalität bieten, kann man sich an dieser [http://sourceforge.net/apps/trac/smartmontools/wiki/Supported_USB-Devices Liste] orientieren.
Festplatten, SSDs und CD/DVD/Blue-Ray-Laufwerke sind typische Geräte, die angesprochen werden können.<br /> Das Paket {{Deb|hdparm}} kann normal über die Paketverwaltung installiert werden.
* Hdparm muss mit Rootrechten ausgeführt werden.<br /> Im Gegensatz zum Pendant {{Deb|blktool}} (Skript-freundlicher) kann hdparm eine ganze Menge mehr (außer SCSI), lässt sich konfigurieren und bringt ein eigenes Initskript mit.<br /> Weitere ähnliche Werkzeuge finden sich in den Paketen {{Deb|sdparm}} und {{Deb|sg3-utils}}.
{{Hinweis|Wenn der Chipsatz nur mit dem libata Treiber unterstützt wird, lassen sich viele Funktionen, wie DMA, nicht mehr abrufen und beeinflussen.
* Das betrifft nicht nur hdparm, sondern ist generell so.
* Zu erkennen daran, dass selbst IDE Laufwerke nicht mehr als hdX, sondern als SCSI Gerät, also sdX erkannt werden.
* SATA läuft unabhängig davon immer mit DMA.}}
{{Warnung|Hdparm ist grundsätzlich ein Werkzeug für fortgeschrittene Nutzer.
* Bei allen Beispielen muss darauf geachtet werden, dass Device-Namen auf das eigene System angepasst und die Hinweise der Manpage beachtet werden.}}
 
; Hardwareparameter
* Laufwerks-Caches
* Ruhemodus
* Energieverwaltung
* akustische Verwaltung
* DMA-Einstellungen
 
== Installation ==
'''root@debian:~#''' apt install hdparm
 
== Aufruf ==
'''root@debian:~#''' hdparm [Optionen] [Gerät ...]
 
=== Optionen ===
{|class="wikitable"
!Option !! Beschreibung
|-
| -a || Abrufen / Festlegen der Sektoranzahl für das Vorauslesen des Dateisystems (Software).
Wird verwendet, um die Leistung beim sequentiellen Lesen von großen Dateien zu verbessern, indem zusätzliche Blöcke vorab abgerufen werden.
|-
| -A || Aktivieren (-A1) und deaktivieren (-A0) der Read-Lookahead-Funktion (verbessert die Lese-Performance) eines Datenträgers.
Ist normalerweise standardmäßig aktiviert.
|-
| -B || Advanced Power Management, wenn das Laufwerk dies unterstützt.
 
Ein niedriger Wert bedeutet aggressives Power Management und ein hoher Wert bedeutet bessere Leistung.
 
Mögliche Einstellungen reichen von den Werten 1 bis 127 (die ein Herunterfahren ermöglichen) und den Werten 128 bis 254 (die kein Herunterfahren zulassen).
 
Der höchste Grad an Power Management wird mit einer Einstellung von 1 und die höchste Leistung mit einer Einstellung von 254 erreicht.
 
Wert 255 deaktiviert das Advanced Power Management auf dem Datenträger (wird nicht alle Datenträgern unterstützt, jedoch von den meisten).
|-
| -I || Ausgabe aller verfügbaren Informationen zu einem Datenträger
|-
| -K || Setzen der Flag "keep_features_over_reset".
 
Durch diese Einstellung kann das Laufwerk die Einstellungen für die Optionen -APSWXZ über einen Soft-Reset beibehalten während die Fehlerbehebungssequenz durchgeführt wird.
 
Nicht alle Laufwerke unterstützen diese Funktion.
|-
| -M || Abrufen und Festlegen der AAM-Einstellung (Automatic Acoustic Management). Die meisten modernen Festplattenlaufwerke können die Kopfbewegungen beschleunigen, um das Geräusch zu reduzieren.
 
Werte liegen zwischen 0 und 254.
128 ist die leiseste (und daher langsamste) Einstellung und 254 die schnellste (und lauteste).
 
Einige Laufwerke haben nur zwei Stufen (leise / schnell), während andere unterschiedliche Stufen zwischen 128 und 254 haben können.
 
Im Moment unterstützen die meisten Laufwerke nur 3 Optionen zwischen leise und schnell. Mit den Werten 0, 128 und 254.
|-
| -S || Festplatte in den Standby-Modus (Energiesparmodus) versetzen und einstellen des Standby-Zeitlimit (Spindown), wie lange (ohne Festplattenaktivität) gewartet werden muss, bevor der Spindelmotor ausgeschaltet wird, um Strom zu sparen.
 
Ist dieser ausgeschltet, kann es bis zu 30 Sekunden dauern, bis das Laufwerk auf einen nachfolgenden Festplattenzugriff reagiert.
 
Die meisten Laufwerke sind aber schneller.
 
Die Kodierung der Standby-Zeitlimits ist sehr speziell.
 
Null bedeutet "Standby-Zeitlimit ist deaktiviert": Das Gerät wechselt nicht automatisch in den Standby-Modus.
 
Werte von 1 bis 240 geben ein Vielfaches von 5 Sekunden an (1x5s bis 240x5s).
 
Werte von 241 bis 251 geben 11 Einheiten in 30-Minuten-Schritten an (241 = 30min bis 251 = 5,5h).
 
Wert 252 bedeutet 21 Minuten Standby-Zeitlimit.
 
Wert 253 legt eine vom Hersteller definiertes Standby-Zeitlimit zwischen 8 und 12 Stunden fest.
 
Wert 254 reserviert.
 
Wert 255 wird als 21 Minuten plus 15 Sekunden interpretiert.
|}
 
weitere Information: [https://man7.org/linux/man-pages/man8/hdparm.8.html Manpage hdparm]
 
=== Parameter ===
 
=== Umgebung ===
=== Rückgabewert ===
 
== Konfiguration ==
Fast alle Einstellungen, die mit hdparm verändert werden, bleiben nur bis zum nächsten Systemstart erhalten. Um dem entgegenzuwirken, gibt es unter '''/etc/hdparm.conf''' eine Konfigurationsdatei, die günstiger Weise schon mit selbsterklärenden Beispielen und Beschreibungen gefüllt ist.
Eines muss noch erwähnt werden. Durch die neuen libata Treiber spielt es keine Rolle mehr, an welchem IDE Kanal ein Laufwerk Master oder Slave ist - die Device-Nodes unter '''/dev''' werden beim Start per Zufall nummeriert.
Will man aber für bestimmte Laufwerke bestimmte Einstellungen setzen, bietet es sich an, die automatisch von udev generierten Symbolischen Links unter '''/dev/disk/''' zu verwenden.
Demnach kann ein Block zum Beispiel so aussehen:
/dev/disk/by-id/ata-Hitachi_HDT725050VLA380_VFJ401R41S702K {
        apm = 128
        acoustic_management = 128
        spindown_time = 240
}
 
Sollten Probleme auftreten, weil hdparm zu früh gestartet wird, kann man probieren, das Init-Skript mit einer höheren Startnummer zu versehen.
Beispiel:
{{RootShell|mv /etc/rcS.d/S07hdparm /etc/rcS.d/S38hdparm}}
 
''Anmerkung: Nach dem Resume von einem Suspend-to-ram/to-disk wird die hdparm.conf leider übergangen und die getätigten Einstellungen überschrieben. Zur Abhilfe muss man sich entweder an der Datei '''/etc/default/hdparm''' oder an entsprechenden pm-util Skripten vergreifen bzw.&nbsp;eigene erstellen, wie hier vorgeschlagen: {{DebianforumDiskussion|138254}}''
 
=== Dateien ===
 
== Anwendung ==
=== Alle Informationen anzeigen ===
# '''hdparm -I /dev/sdb'''
/dev/sdb:
 
ATA device, with non-removable media
        Model Number:      Hitachi HDS722020ALA330               
        Serial Number:      JK1160YAGMUVRT
        Firmware Revision:  JKAOA3MA
        Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6; Revision: ATA8-AST T13 Project D1697 Revision 0b
Standards:
        Used: unknown (minor revision code 0x0029)
        Supported: 8 7 6 5
        Likely used: 8
Configuration:
        Logical        max    current
        cylinders      16383  16383
        heads          16      16
        sectors/track  63      63
        --
        CHS current addressable sectors:    16514064
        LBA    user addressable sectors:  268435455
        LBA48  user addressable sectors:  3907029168
        Logical/Physical Sector size:          512 bytes
        device size with M = 1024*1024:    1907729 MBytes
        device size with M = 1000*1000:    2000398 MBytes (2000 GB)
        cache/buffer size  = 29999 KBytes (type=DualPortCache)
        Form Factor: 3.5 inch
        Nominal Media Rotation Rate: 7200
Capabilities:
        LBA, IORDY(can be disabled)
        Queue depth: 32
        Standby timer values: spec'd by Standard, no device specific minimum
        R/W multiple sector transfer: Max = 16  Current = 0
        Advanced power management level: disabled
        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
              Cycle time: min=120ns recommended=120ns
        PIO: pio0 pio1 pio2 pio3 pio4
              Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
        Enabled Supported:
            *    SMART feature set
                Security Mode feature set
            *    Power Management feature set
                Write cache
            *    Look-ahead
            *    Host Protected Area feature set
            *    WRITE_BUFFER command
            *    READ_BUFFER command
            *    DOWNLOAD_MICROCODE
                Advanced Power Management feature set
                Power-Up In Standby feature set
            *    SET_FEATURES required to spinup after power up
                SET_MAX security extension
            *    48-bit Address feature set
            *    Device Configuration Overlay feature set
            *    Mandatory FLUSH_CACHE
            *    FLUSH_CACHE_EXT
            *    SMART error logging
            *    SMART self-test
                Media Card Pass-Through
            *    General Purpose Logging feature set
            *    WRITE_{DMA|MULTIPLE}_FUA_EXT
            *    64-bit World wide name
            *    URG for READ_STREAM[_DMA]_EXT
            *    URG for WRITE_STREAM[_DMA]_EXT
            *    WRITE_UNCORRECTABLE_EXT command
            *    Segmented DOWNLOAD_MICROCODE
            *    Gen1 signaling speed (1.5Gb/s)
            *    Gen2 signaling speed (3.0Gb/s)
            *    Native Command Queueing (NCQ)
            *    Host-initiated interface power management
            *    Phy event counters
            *    NCQ priority information
                Non-Zero buffer offsets in DMA Setup FIS
            *    DMA Setup Auto-Activate optimization
                Device-initiated interface power management
                In-order data delivery
            *    Software settings preservation
            *    SMART Command Transport (SCT) feature set
            *    SCT Write Same (AC2)
            *    SCT Error Recovery Control (AC3)
            *    SCT Features Control (AC4)
            *    SCT Data Tables (AC5)
Security:
        Master password revision code = 65534
                supported
        not    enabled
        not    locked
        not    frozen
        not    expired: security count
        not    supported: enhanced erase
        500min for SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5000cca221c90422
        NAA            : 5
        IEEE OUI        : 000cca
        Unique ID      : 221c90422
Checksum: correct
 
=== Bestimmte Information anzeigen ===
# hdparm -I /dev/sdb | grep "cache"
        cache/buffer size  = 29999 KBytes (type=DualPortCache)
        Write cache
 
* Datenträger sdb hat eine "cache size" von 29,999 MB.
 
=== Advanced Power Management einstellen ===
# '''hdparm -B 254 /dev/sda'''
/dev/sda:
  setting Advanced Power Management level to 0xfe (254)
  APM_level      = 254
 
* Datenträger sda ist auf höchst mögliche Leistung eingestellt => beste Performance, aber höchster Stromverbrauch.
 
=== Standby-Modus (Spindown) ===
* Hier auf ein Standby-Zeitlimit von 2min.
# '''hdparm -S 24 /dev/sda'''
/dev/sda:
  setting standby to 24 (2 minutes)
 
=== hdparm-Einstellungen nach einem Software-Reset beibehalten ===
* Hier Aktivierung bei Datenträger sda.
# '''hdparm -K 1 /dev/sda'''
/dev/sda:
  setting drive keep features to 1 (on)
 
=== Read-Lookahead-Funktion ===
* Hier Aktivierung beim Datenträger sda.
# '''hdparm -A 1 /dev/sda'''
/dev/sda:
  setting drive read-lookahead to 1 (on)
  look-ahead    =  1 (on)
 
=== Akkustik ===
==== Akkustiklevel anzeigen ====
# hdparm -M /dev/sda
/dev/sda:
  acoustic      = 254 (128=quiet ... 254=fast)
 
* Akkustiklevel des Datenträgers sda ist auf "fast" eingestellt => schnell, aber laut.
 
==== Akkustiklevel einstellen ====
* Hier auf "quiet" => geringere Performance.
 
# '''hdparm -M 128 /dev/sda'''
/dev/sda:
  setting acoustic management to 128
  acoustic      = 128 (128=quiet ... 254=fast)
 
=== Lesegeschwindigkeit messen ===
==== Mit Cache ====
# '''hdparm -Tt /dev/sda'''
/dev/sda:
  Timing cached reads:  6962 MB in  2.00 seconds = 3482.67 MB/sec
  Timing buffered disk reads: 358 MB in  3.01 seconds = 119.12 MB/sec
 
==== Ohne Cache ====
# hdparm -Tt --direct /dev/sda
/dev/sda:
  Timing O_DIRECT cached reads:  498 MB in  2.00 seconds = 248.49 MB/sec
  Timing O_DIRECT disk reads: 360 MB in  3.01 seconds = 119.60 MB/sec
 
== 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.
 
 
=== Temperatur: Hitachi ===
;-H
:Speziell für Hitachi Festplatten, lässt sich die Temperatur auslesen und anzeigen, ob dieser Wert im ''grünen'' Bereich ist. Besonders für sehr alte Geräte, oder welche, die kein SMART unterstützen (z.&nbsp;B.&nbsp;CF-Microdrives).
{{Hinweis|Erst ab hdparm Version 6.7 und Debian Etch verfügbar. }}
 
Beispiel:
 
Temperatur eines 4GB Microdrives:
{{RootShell|hdparm -H /dev/sdb
 
/dev/sdb:
drive temperature (celsius) is:  26
drive temperature in range:  yes}}
 
 
... einer Desktop Festplatte:
{{RootShell|hdparm -H /dev/sdc
 
/dev/sdc:
drive temperature (celsius) is:  41
drive temperature in range:  yes}}
Hier stimmt sie mit der von SMART übermittelten überein (RAW_VALUE):
<pre>ID# ATTRIBUTE_NAME          FLAG    VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
[...]
194 Temperature_Celsius    0x0002  146  146  000    Old_age  Always      -      41 (Min/Max 3/59)
[...]</pre>
 
=== Fragmentierung einer Datei ===
 
;--fibmap
:Wenn man herausfinden möchte, welche Sektoren eine Datei belegt, oder wie fragmentiert sie ist, bietet sich diese Option an. Hdparm benötigt nach dieser Option ausschließlich den Absoluten Pfad zur gewünschten Datei. Bei Erfolg wird eine Liste der belegten Bereiche ausgegeben. Die Sektorzahlen sind absolute LBA Nummern der betreffenden Festplatte und <u>keine</u> Blockzahlen des Dateisystems! Laut Manpage scheint diese Option mit fast jedem Dateisystem umgehen zu können. Nur nach einem sync soll es auch bei ext4/xfs gut funktionieren.
{{Hinweis|Erst ab hdparm Version 8.7 und Debian Lenny verfügbar.}}
Beispiel:
 
{{RootShell|hdparm --fibmap /boot/vmlinuz-2.6.38.3-1000hz
 
/boot/vmlinuz-2.6.38.3-1000hz:
filesystem blocksize 4096, begins at LBA 63; assuming 512 byte sectors.
byte_offset  begin_LBA    end_LBA    sectors
          0  10682503  10682558        56
      28672  10685159  10685174        16
      36864  10687167  10687190        24
      49152  10687199  10687278        80
      90112  10693263  10693270          8
      94208  10693919  10693966        48
      118784  10694047  10694670        624
      438272  10695807  10696190        384
      634880  10696639  10698814      2176
    1748992  10699647  10700294        648
    2080768  10700415  10701102        688
    2433024  10702399  10702702        304}}
 
 
=== 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.
{{Hinweis|Erst ab hdparm Version 9.0 und Debian Squeeze verfügbar.}}
Abschaltbare Funktionen anzeigen:
{{RootShell|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:
{{RootShell|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''.
 
 
=== Security ===
Das "security feature set" ist Teil des ATA Standards und ermöglicht das Sperren der Festplatte durch ein Passwort, sowie deren automatische Löschung.
 
==== Passwort-Schutz ====
Die Passwörter werden direkt auf den Plattern der Festplatte gespeichert, lassen sich so durch Tausch der Laufwerkselektronik (wovon generell abzuraten ist)  nicht umgehen. Die Passwörter sollten also mit Vorsicht gesetzt werden, denn theoretisch kann selbst der Hersteller diese nicht umgehen. Es ist jedoch möglich. Für hohe Sichereitsansprüche ist eine Vollverschlüsselung der Daten deshalb effektiver.
;--user-master PASSWORT-TYP
:Grundsätzlich lassen sich zwei unterschiedliche, 32 Byte lange Passwörter setzen. Mit "u" wird das User-Passwort gewählt; mit "m" das Master-Passwort, welches als Not-Schlüssel dient. Dieser Schalter lässt sich mit dem "security mode" und den anderen kombinieren, als Standard ist immer das User-Passwort gewählt.
;--security-set-pass PASSWORT
:Dieser Schalter setzt das gegebene Passwort und aktiviert damit die Sicherheitsfunktion, "NULL" für ein leeres. Ist dies das User-Passwort, wird die Sperrung aktiviert.
;--security-mode SICHERHEITSSTUFE
:Mit "h" wird die Stufe "high security", mit "m" "maximal security" gewählt. Bei ersterem ist die Entsperrung mit beiden Passwörtern, bei "maximal" nur mit dem User-Passwort möglich. Mit dem Master-Passwort lässt sich die Festplatte nur durch ein "security erase" entsperren, wobei alle Daten gelöscht werden. Ohne Angabe wird auf "high" gesetzt. Mit "user-master" und den anderen Schaltern kombinierbar.
;--security-unlock PASSWORT
:Hiermit wird die Festplatte temporär, also bis zum nächsten Start (Reset), entsperrt.
;--security-disable PASSWORT
:Im entsperrten Zustand lässt sich die Sicherheitsfunktion so dauerhaft ausschalten.
;--security-freeze PASSWORT
:Damit werden alle Sicherheitseinstellungen eingefroren, bis zum nächsten Start sind keine Änderungen mehr möglich. Diese Funktion wird von einigen BIOS beim Start gesetzt, um ein Sperren mit böswilliger Absicht zu verhindern.
 
Beispiele:<br>
Die Unterstützung prüfen:
 
{{RootShell|hdparm -I /dev/sdg {{Pipe}} grep Security: -A7}}
<pre>Security:
        Master password revision code = 65534
                supported
        not    enabled
        not    locked
        not    frozen
        not    expired: security count
        not    supported: enhanced erase</pre>Das "not" zeigt jeweils, was inaktiv ist. Je nach Gerät sind hier Informationen über die Dauer eines "security-erase" angegeben.
Die Aktivierung geschieht mit dem Setzen eines Passwortes.
{{RootShell|hdparm --security-set-pass Test /dev/sdg}}Da Passwortmode und Sicherheitsstufe nicht angegeben sind, wird der Standard verwendet.
<pre>security_password="Test"
 
/dev/sdg:
Issuing SECURITY_SET_PASS command, password="Test", user=user, mode=high</pre>
Unter "Security" ist nun das ''not'' vor ''enabled'' verschwunden:
<pre>              enabled</pre>Würde der Rechner oder die Festplatte jetzt neu gestartet werden, würde diese nicht mehr zugreifbar sein, ohne diese zu entsperren oder den Schutz ganz aufzuheben:
{{RootShell|hdparm --security-unlock Test /dev/sdg}}
<pre>security_password="Test"
 
/dev/sdg:
Issuing SECURITY_UNLOCK command, password="Test", user=user</pre>Schutz abschalten:
{{RootShell|hdparm --security-disable Test /dev/sdg}}
<pre>security_password="Test"
 
/dev/sdg:
Issuing SECURITY_DISABLE command, password="Test", user=user</pre>Die Festplatte ist dauerhaft entsperrt:
<pre>        not    enabled</pre>
Das Master-Passwort ließe sich so setzen:
{{RootShell|hdparm --user-master m --security-set-pass Passwort2 /dev/sdg}}
<pre>security_password="Passwort2"
 
/dev/sdg:
Issuing SECURITY_DISABLE command, password="Passwort2", user=master</pre>
Den aktuellen Schutzzustand ''einfrieren'':
<pre>hdparm --security-freeze /dev/sdg
 
/dev/sdg:
issuing security freeze command</pre>Das fehlende ''not'' zeigt wieder den Zustand:
<pre>                frozen</pre>
Ein Versuch, den Schutz danach ein zu schalten:
{{RootShell|hdparm --security-set-pass TEST /dev/sdg}}
schlägt dann fehl:
<pre>security_password="TEST"
 
/dev/sda:
Issuing SECURITY_SET_PASS command, password="TEST", user=user, mode=high
SECURITY_SET_PASS: Input/output error</pre>
 
 
==== Security Erase ====
;--security-erase PASSWORT
:Es wird eine gesperrte Festplatte so entsperrt und automatisch komplett mit Nullen beschrieben.
;--security-erase-enhanced PASSWORT
:Führt ein "enhanced security erase" aus und bewirkt ansonsten das selbe wie "security erase". Insbesondere bei SSDs kann es hier Unterschiede geben.
{{Hinweis|Die Festplatte oder SSD ist während des ''Security-Erase'' meist blockiert und es ist möglich, dass dies ebenfalls mit dem System geschieht!}}
 
Beispiel:<br />
Nachdem man zuvor den Schutz, durch setzen eines User-Passwortes, aktiviert hat, ist ein ''Security-Erase'' möglich mit:
{{RootShell|hdparm --user-master u --security-erase TEST /dev/sdg}}
<pre>security_password="TEST"
 
/dev/sdc:
Issuing SECURITY_ERASE command, password="TEST", user=user</pre>
Ob die Festplatte ein ''enhanced erase'' unterstützt, wird mit "-I" angezeigt:
<pre>        not    supported: enhanced erase</pre>
''Anmerkung: Wenn die Dauer des Löschens nicht angegeben ist, kann man abhängig von der Kapazität und der mittleren Schreibgeschwindigkeit auf die Zeit schließen. Unterstützt die Festplatte SMART, entspricht die benötigte Zeit ungefähr der, welche für einen erweiterten Selbsttest angegeben wird:''
<pre>Extended self-test routine
recommended polling time:        (  54) minutes.</pre>
''So ist besonders bei Festplatten an einem langsamen IDE/SATA Chipsatz das Löschen mit der maximalen Geschwindigkeit erreichbar, da die Operation von der Festplattenfirmware selbst durchgeführt wird und so unabhängig von der Bus-Anbindung ist. Bei SSDs müssen nur die Blöcke der NAND Flash gelöscht werden, dadurch muss nicht jedes Byte geschrieben werden und die Gesamtdauer kann so wenige Minuten betragen. Das ist jedoch sehr Herstellerspezifisch.''
 
 
=== HPA - Host Protect Area ===
 
;-N
:Zeigt und setzt die LBA Sektoren.
:Mit ATA/ATAPI 4 wurde das Host Protect Area eingeführt. Damit lässt sich ein definierter Bereich der Festplatte selbst vor Partitionierprogrammen verstecken und die Gesamtkapazität so scheinbar schrumpfen. HPA verhält sich so wie eine unsichtbare Grenze, die nichts anderes bewirkt. Gerne für Wiederherstellungspartitionen in OEM Systemen verwendet und so manches BIOS kopiert sich ungefragt in einen selbst erstellten HPA-Bereich ({{DebianforumBeitrag|792021}}). Vom Kernel standardmäßig zurückgesetzt, lässt sich dieser von hdparm erkennen und sogar setzen.
{{Hinweis|Erst ab hdparm Version 8.0 und Debian Lenny verfügbar.}}
 
Beispiel:
<pre>hdparm -N /dev/sdc
 
/dev/sdc:
max sectors  = 156250000/156250000, HPA is disabled</pre>
Die maximale LBA Zahl kann flüchtig wie folgt gesetzt werden:
<pre>hdparm --yes-i-know-what-i-am-doing -N156200000 /dev/sdc
 
/dev/sdc:
setting max visible sectors to 156200000 (temporary)
max sectors  = 156200000/156250000, HPA is enabled</pre>
Nach einem Reset oder Neustart wäre diese Einstellung zurückgesetzt. Das permanente, also nichtflüchtige, Setzen wird durch ein kleines '''p''' vor der Sektorzahl bewirkt:
<pre>hdparm --yes-i-know-what-i-am-doing -Np156200000 /dev/sdc
 
/dev/sdc:
setting max visible sectors to 156200000 (permanent)
max sectors  = 156200000/156250000, HPA is enabled</pre>
Hier hat die Ausführung funktioniert. Damit wissen aber fdisk, dd & Co noch nichts davon:
<pre>fdisk -luc /dev/sdc
 
Disk /dev/sdc: 80.0 GB, 80000000000 bytes
255 heads, 63 sectors/track, 9726 cylinders, total 156250000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000be68d
[...]</pre>
Erst nach einem Neustart wäre dies der Fall.
 
 
Als weiteres Beispiel folgend das Erkennen und rückgängig machen, eines vom BIOS gesetzten HPA. Die Meldung vom Kernel lässt Verdacht schöpfen:
{{UserShell|dmesg {{Pipe}} grep -i hpa
[  12.523134] ata7.00: HPA detected: current 156247887, native 156250000}}
<pre>hdparm -N /dev/sdd
 
/dev/sdd:
max sectors  = 156247887/156250000, HPA is enabled</pre> (156250000-156247887)*512 Byte = 1.081.856 Byte wurden geschluckt! Nun den HPA löschen:
<pre>hdparm -Np156250000 /dev/sdd
 
/dev/sdd:
setting max visible sectors to 156250000 (permanent)
max sectors  = 156250000/156250000, HPA is disabled</pre>
Danach neu starten um mit dd zu schauen ob, und was da nun versteckt war:
<pre>dd if=/dev/sdd of=hpa.bin bs=512 skip=156247887
2113+0 Datensätze ein
2113+0 Datensätze aus
1081856 Bytes (1,1 MB) kopiert, 0,00426143 s, 254 MB/s</pre>
Mit hexdump gucken:
<pre>hexdump -Cn40 hpa.bin
00000000  25 e4 2d 6c 68 35 2d 7f  42 01 00 00 00 02 00 00  |%.-lh5-.B.......|
00000010  00 00 50 20 01 0c 4b 38  4e 53 43 39 33 39 2e 42  |..P ..K8NSC939.B|
00000020  49 4e fe 0f 20 00 00 2c                          |IN.. ..,|
00000028c</pre>
Etwas lha-komprimiertes.
<pre>lha -x hpa.bin
k8nsc939.bin    - Melted  :  oooooooooooooooo
LHa: Error: CRC error k8nsc939.bin</pre>
<pre>ls -l k8nsc939.bin
-rw-r--r-- 1 ich ich 131072 30. Nov 2019  k8nsc939.bin</pre> So wurde in den versteckten Bereich ein BIOS Image gepackt. Bei manchen lässt sich das abstellen.
 
 
'''HPA ignorieren:'''
Es ist möglich den Kernel anzuweisen, eine eventuell gesetzte HPA Limitierung zu ignorieren. Es ist lediglich nötig, als Kernel Bootparameter folgendes mitzugeben:
libata.ignore_hpa=1
Eine 0 ist Standard und würde die ''limits'' beibehalten. Äquivalent libata als Modulparameter ''ignore_hpa=1''.
Oder durch IDE Treiber unterstützte Controller ''ide-core.nohpa'' zum Boot mitgeben.
 
 
=== 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.&nbsp;B.&nbsp;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.''
 
== Sicherheit ==
 
== Dokumentation ==
=== RFC ===
=== Man-Page ===
# https://man7.org/linux/man-pages/man8/hdparm.8.html
 
=== Info-Pages ===
=== Siehe auch ===
 
== Links ==
=== Projekt ===
=== Weblinks ===
# [https://de.wikipedia.org/wiki/Hdparm https://de.wikipedia.org/wiki/Hdparm]
# [https://linuxwiki.de/hdparm https://linuxwiki.de/hdparm]
# [https://wiki.ubuntuusers.de/Festplatten-Geschwindigkeitstest/ https://wiki.ubuntuusers.de/Festplatten-Geschwindigkeitstest/]
# [https://askubuntu.com/questions/87035/how-to-check-hard-disk-performance https://askubuntu.com/questions/87035/how-to-check-hard-disk-performance]
# {{DebianforumDiskussion|131836}} zum Artikel
# http://sourceforge.net/projects/hdparm
# http://de.wikipedia.org/wiki/Hdparm
# http://debiananwenderhandbuch.de/hdparm%20Festplattenparameter.html
# http://wiki.ubuntuusers.de/Archiv/DMA
# http://linuxwiki.de/hdparm
# http://de.wikipedia.org/wiki/ATA/ATAPI
# http://de.wikipedia.org/wiki/Host_Protected_Area
# http://www.heise.de/ct/artikel/Baerendienst-289866.html
# http://wiki.ubuntuusers.de/SSD/Secure-Erase
# https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase
# http://www.serialata.org
 
 
 
 
 
 
= TMP =
== Leistungsoptimierungen  ==
 
Insbesondere bei älterer Hardware kann es vorkommen, dass sich das System träge anfühlt, Kopiervorgänge ewig dauern oder Videos beim Abspielen ruckeln. Da die Festplatte oft das langsamste Element in einem PC ist, sollte man hier mit der Suche ansetzen.
 
=== Durchsatztest  ===
 
{{Hinweis|Um hier wirklich akkurate und realistische Ergebnisse zu erhalten, sollte man sicherstellen, dass zum Zeitpunkt der jeweiligen Tests keine anderen Anwendungen intensiv genau das betreffende Laufwerk oder die CPU belasten (z.&nbsp;B.&nbsp;im Hintergrund arbeitende Indizierungsdienste, Backups, automatische Updates usw.). Das kann man sehr praktisch mit {{Deb|iotop}}, {{Deb|atop}}, {{Deb|htop}}, ''top'' oder anderen Tools feststellen.}}
Hierfür dienen die hdparm-Schalter „-t“ und „-T“.
 
;-T
:Testet die Performance des System Caches. Hierbei wird ohne Festplattenzugriff direkt aus dem Linux Puffer Cache gelesen und somit der Durchsatz des Prozessors, Caches und Arbeitsspeichers bestimmt. Der Aufruf sollte 2 oder mehrmals wiederholt werden, um einen stabilen Wert zu erhalten. Auch wenn es keinen Einfluss hat, muss trotzdem ein ''device'' angegeben werden.
:Beispielsweise auf einem modernen System mit Mehrkern-CPU und DDR3 Ram könnte die Ausgabe so aus sehen:
:{{RootShell|hdparm -T /dev/sda}}
 
:<pre>/dev/sda:
:Timing cached reads: 6678 MB in 2.00 seconds = 3345.76 MB/sec</pre>
:Auf einem älteren Pentium 4 mit DDR1 Speicher:
:{{RootShell|hdparm -T /dev/hda}}
 
:<pre>/dev/hda:
:Timing cached reads: 540 MB in 2.01 seconds = 269.23 MB/sec</pre>
 
;-t
:Dieser Test liest direkt über den System Cache vom angegebenen Laufwerk. Hierbei ist zu beachten, dass dies die reine Netto-Datenrate zwischen Laufwerk und Chipsatz und dem vorhandenen Kernel Modul ist. Deshalb sollte der Test wie bei „-T“ mehrmals wiederholt werden, wobei möglichst darauf geachtet werden sollte, dass keine weiteren Festplattenzugriffe stattfinden, die das Ergebnis verfälschen würden.
;--direct
:Dieser Schalter, in Verbindung mit „-t“, übergeht selbst den System Cache und liest so direkt vom Laufwerk. Der Wert gibt so den reinen Durchsatz, welchen Laufwerk, Chipsatz und Treiber bieten.
 
{{Hinweis|Erst ab hdparm Version 5.7 und Debian Sarge vorhanden.}}
 
;--offset
:Hier kann ein Versatz in GiB angegeben werden, ab dem "hdparm -t" die Messung vor nimmt. Mit dem Hintergrund, dass mechanische Laufwerke (z.&nbsp;B.&nbsp;Festplatten) am Anfang, also im äußersten Bereich der Platter, schneller sind, als im Inneren. Das Verhalten kann mit diesem Schalter nachvollzogen werden. Bei Flash-Speichern gibt es womöglich keine Variationen.
:''Anmerkung: Der Offset sollte maximal ca. 10% unter der Laufwerkskapazität liegen.''
 
{{Hinweis|Erst ab hdparm Version 9.29 und Debian Squeeze vorhanden.}}
 
Beispiele an einer 500 GB SATA Festplatte:
{{RootShell|hdparm  -t /dev/sdc}}
<pre>/dev/sdc:
Timing buffered disk reads: 230 MB in  3.00 seconds =  76.55 MB/sec</pre>
Ein normaler Test.
{{RootShell|hdparm  --direct -t /dev/sdc}}
<pre>/dev/sdc:
Timing O_DIRECT disk reads: 232 MB in  3.02 seconds =  76.86 MB/sec</pre>
Mit --direct gibt es quasi keinen Unterschied auf diesem System.
{{RootShell|hdparm  --direct --offset 250 -t /dev/sdc}}
<pre>/dev/sdc:
Timing O_DIRECT disk reads (offset 250 GB): 196 MB in  3.02 seconds =  64.83 MB/sec</pre>
Bei 250 GiB, also der halben Kapazität, geht der Durchsatz schon deutlich zurück.
{{RootShell|hdparm  --direct --offset 460 -t /dev/sdc}}
<pre>/dev/sdc:
Timing O_DIRECT disk reads (offset 460 GB): 116 MB in  3.03 seconds =  38.34 MB/sec</pre>
Kurz vor Ende ist er auf dem Minimum. Das ist bei allen Festplatten ähnlich, ungefähr ein Unterschied von 50% zum äußersten Bereich.
 
''Anmerkung: Die grafische Darstellung der Schreib- und Leserate sowie der Zugriffzeiten über den gesamten Bereich können seit Squeeze mit palimpsest aus dem Paket {{Deb|gnome-disk-utility}} durchgeführt werden.''
 
=== Optimierungen  ===
Die Wirkung und Unterstützung unterscheidet sich bei den Herstellern und Modellen. Die Schalter mit ihrer Funktion:
 
*'''-a''' Stellt die Sektorenzahl für den FS-Readahead ein.
*'''-A''' schaltet die  „read-lookahead“-Funktion einer IDE-Festplatte ein oder aus. Normalerweise ist diese Funktion bereits aktiviert.
*'''-c''' zeigt den Status oder aktiviert den  (E)IDE-32-Bit-I/O-Support. Die Parameter hier für sind: 0, um den Support zu deaktivieren, und 1, um den Support zu aktivieren. Der Wert 3 aktiviert den 32-Bit-Support mit einer speziellen Sync-Sequenz, die von einigen Chipsets benötigt wird. Diese Option funktioniert mit fast allen Chipsets, bringt jedoch etwas mehr Overhead mit sich. Wird kein Parameter angegeben, so wird die aktuelle Einstellung angezeigt. Wirkt sich nur auf die Verbindung zwischen Chipsatz und PCI Bus aus.
*'''-d''' zeigt, ob für das genannte Gerät der DMA-Modus benutzt wird, oder aktiviert/deaktiviert den Modus. Das Flag „using_dma“ funktioniert nur mit wenigen Kombinationen aus Festplatte und Controllern. Beispielsweise wird beim Intel Triton Chipset der Bus-Master-DMA-Modus in Verbindung mit vielen Festplatten unterstützt. Wenn möglich, sollte die Option -X34 zusammen mit -d1 benutzt werden, um sicherzustellen, dass das Laufwerk selbst den Multiword DMA Modus 2 unterstützt.
*'''-E''' setzt die CD/DVD Geschwindigkeit. Wird normalerweise nicht benötigt und manchmal ignoriert.
*'''-f''' synchronisiert und speichert den Cache-Puffer der Festplatte beim Beenden des Programms. Dieser Vorgang wird auch bei den Optionen -t und -T durchgeführt. Gleiches wird mit dem Konsolenbefehl "sync" bewirkt.
*'''-F''' schreibt, wenn unterstützt, den Schreibcache des Laufwerks.
*'''-g''' zeigt die Festplattengeometrie, also Angaben zu Zylinder, Köpfe, (Sektoren), die Größe (in Sektoren) des Laufwerkes und den Offset (in Sektoren) des Devices vom Anfang der Festplatte.
*'''-k''' liest oder setzt das Flag ''"keep_settings_over_reset"'' für das Laufwerk. Wenn diese Option gesetzt ist, werden die Optionen -dmu über einen (Soft-) Reset hinaus gespeichert.
*'''-K''' setzt das Flag ''"keep_features_over_reset"''. Das Setzen dieser Option rettet die Einstellungen -APSWXZ über einen (Soft-) Reset hinaus. Diese Option wird nicht von allen Laufwerken unterstützt.
*'''-m''' Gibt an, wie viele Sektoren mit einem I/O Interrupt gleichzeitig geholt werden. Als Wert 0, 2 oder ein vielfaches davon.
*'''-M''' stellt das Automatic Acoustic Management (AAM) ein. Steuert die Geschwindigkeit der Kopfbewegungen, was die Geräuschentwicklung und die Performance beim Suchen beeinflusst. Theoretisch von 1 ...255. Viele unterstützen nur drei Zustände, die oft auf 0 = aus; 128 = leise und 254 = laut fallen.
*'''-p''' versucht, das IDE-Interface-Chipset auf den gewünschten PIO-Modus zu setzen oder den bestmöglichen PIO-Modus einzustellen.
*'''-q''' unterdrückt die Ausgabe von Meldungen für die folgenden Optionen. Dies kann eingesetzt werden, wenn  hdparm aus einer Datei beim Systemstart heraus aufgerufen wird. Diese Option hat keine Auswirkungen auf die Optionen -i,  -v, -t oder  -T.
*'''-r''' liest oder setzt das ''„Read-Only-Flag“''. Damit ist kein Schreiben auf das Laufwerk mehr möglich.
*'''-u''' liest oder setzt das ''„interrupt-unmask“''-Flag. Dies kann auf vielen Systemen die Reaktionszeit des Systems verbessern, ist aber mit Vorsicht einzusetzen, da nicht alle Chipsets diese Funktion richtig umsetzen können. Ein Wert von 1 aktiviert diese Funktion.
*'''-W''' aktiviert oder deaktiviert bei einem IDE-Laufwerk die Funktion ''"write-caching"'' Erhöht die Schreibleistung, riskiert bei plötzlichem Stromausfall aber Datenverlust (da der Festplattencache nicht geschrieben werden kann). Dies ist Standardmäßig aktiviert.
*'''-X''' setzt den IDE-Übertragungsmodus bei neueren (E)IDE/ATA2-Laufwerken. Diese Option wird meistens zusammen mit -d1 benutzt, um den DMA-Modus von/zu einem Laufwerk mit Chipsets, die dies unterstützen (beispielsweise Intel 430FX Triton), zu aktivieren. Dort können dann auch mit -X34  „Multiword-DMA-mode2“-Übertragungen aktiviert werden. Die Option -X66 aktiviert UltraDMA-Mode2-Übertragungen. Nützlich, um z.&nbsp;B.&nbsp;Übertragungsfehler (CRC Fehler) zu vermeiden und einem schrittweisen, automatischen herabsetzen durch ein schlechtes Kabel zuvor zu kommen.
 
== Energieverwaltung  ==
Für die Energieverwaltung lassen sich folgende Schalter verwenden.
 
*'''-B''' setzt den APM Parameter, wenn es unterstützt wird. Die Implementierungen der Hersteller sind sehr verschieden, jedoch ist folgende Einteilung üblich: 1 ... 127 beinhaltet ein Spin-Down; 128 ... 254 nicht. Die aggressivste Einstellung ist 1, die schwächste 254. 255 schaltet APM aus, wenn möglich. Eine wichtige Einstellung, um die Lebensdauer bestimmter Festplatten zu verlängern; u.a. hier diskutiert: {{DebianforumDiskussion|101050}}
*'''-C''' zeigt den aktuellen  „Power-Mode-Status“ einer IDE-Festplatte an. Dieser kann folgende Werte annehmen: „unknown“ - Das Laufwerk unterstützt dieses Kommando nicht; „active“/„idle“ - Normalbetrieb; „standby“ - Low Power Modus, die Festplatte dreht sich nicht oder „schläft“ sogar komplett. Die Optionen -S, -y, -Y und -Z können zur Veränderung der IDE-Power-Modes verwendet werden.
*'''--idle-immediate''' versucht einen geringeren Energiemodus zu erreichen. Die Spindel läuft weiter.
*'''--idle-unload''' versucht die Köpfe zu parken. Die Spindel läuft weiter. Beide Optionen erst ab hdparm Version 9.3.
*'''-S''' setzt die Standby-Zeit des Gerätes. Nach der eingestellten Zeit fährt die Festplatte in den Ruhezustand (entspricht -y). Ein Wert von 0 schaltet diese Funktion aus, maximal bis 255. Die Einteilung ist nicht linear, man muss etwas probieren um auf die gewünschte Zeit zu kommen.
*'''-y''' setzt das Laufwerk sofort in den Standby Modus, die Spindel stoppt dabei. Bei Zugriffen wacht es automatisch wieder auf.
*'''-Y''' setzt das Laufwerk in den Sleep Modus, welcher am wenigsten Energie benötigt. Die Spindel stoppt auch hier. Normalerweise wird es bei Zugriffen automatisch aufgeweckt. Die benötigte Startzeit ist etwas länger als im Standby Modus.
*'''-Z''' deaktiviert die automatische Energiespar-Funktion einiger älterer Seagate Festplatten um ungünstige Spin-Downs zu verhindern.
[[Kategorie:Linux/Befehl]]
[[Kategorie:Linux/Storage]]
{{DEFAULTSORT:hdparm}}

Aktuelle Version vom 12. November 2024, 18:45 Uhr

hdparm - anzeigen, testen und setzen von Hardwareparametern für ATA-Festplattenlaufwerke

Beschreibung

Hdparm zeigt und setzt Parameter von Laufwerken, die am (E)IDE,- SATA und SAS Bus angeschlossen sind.

  • Hintergründlich nutzen diese den ATA/ATAPI Befehlssatz.
  • Deshalb ist es nur bei wenigen IDE zu USB Bridge Adaptern möglich, die dahinter liegende Festplatte anzusprechen.
  • Um Adapter/Laufwerke zu finden, welche die nötige "ATA command pass through"-Funktionalität bieten, kann man sich an dieser Liste orientieren.

Festplatten, SSDs und CD/DVD/Blue-Ray-Laufwerke sind typische Geräte, die angesprochen werden können.
Das Paket Vorlage:Deb kann normal über die Paketverwaltung installiert werden.

  • Hdparm muss mit Rootrechten ausgeführt werden.
    Im Gegensatz zum Pendant Vorlage:Deb (Skript-freundlicher) kann hdparm eine ganze Menge mehr (außer SCSI), lässt sich konfigurieren und bringt ein eigenes Initskript mit.
    Weitere ähnliche Werkzeuge finden sich in den Paketen Vorlage:Deb und Vorlage:Deb.

Vorlage:Hinweis Vorlage:Warnung

Hardwareparameter
  • Laufwerks-Caches
  • Ruhemodus
  • Energieverwaltung
  • akustische Verwaltung
  • DMA-Einstellungen

Installation

root@debian:~# apt install hdparm

Aufruf

root@debian:~# hdparm [Optionen] [Gerät ...]

Optionen

Option Beschreibung
-a Abrufen / Festlegen der Sektoranzahl für das Vorauslesen des Dateisystems (Software).

Wird verwendet, um die Leistung beim sequentiellen Lesen von großen Dateien zu verbessern, indem zusätzliche Blöcke vorab abgerufen werden.

-A Aktivieren (-A1) und deaktivieren (-A0) der Read-Lookahead-Funktion (verbessert die Lese-Performance) eines Datenträgers.

Ist normalerweise standardmäßig aktiviert.

-B Advanced Power Management, wenn das Laufwerk dies unterstützt.

Ein niedriger Wert bedeutet aggressives Power Management und ein hoher Wert bedeutet bessere Leistung.

Mögliche Einstellungen reichen von den Werten 1 bis 127 (die ein Herunterfahren ermöglichen) und den Werten 128 bis 254 (die kein Herunterfahren zulassen).

Der höchste Grad an Power Management wird mit einer Einstellung von 1 und die höchste Leistung mit einer Einstellung von 254 erreicht.

Wert 255 deaktiviert das Advanced Power Management auf dem Datenträger (wird nicht alle Datenträgern unterstützt, jedoch von den meisten).

-I Ausgabe aller verfügbaren Informationen zu einem Datenträger
-K Setzen der Flag "keep_features_over_reset".

Durch diese Einstellung kann das Laufwerk die Einstellungen für die Optionen -APSWXZ über einen Soft-Reset beibehalten während die Fehlerbehebungssequenz durchgeführt wird.

Nicht alle Laufwerke unterstützen diese Funktion.

-M Abrufen und Festlegen der AAM-Einstellung (Automatic Acoustic Management). Die meisten modernen Festplattenlaufwerke können die Kopfbewegungen beschleunigen, um das Geräusch zu reduzieren.

Werte liegen zwischen 0 und 254. 128 ist die leiseste (und daher langsamste) Einstellung und 254 die schnellste (und lauteste).

Einige Laufwerke haben nur zwei Stufen (leise / schnell), während andere unterschiedliche Stufen zwischen 128 und 254 haben können.

Im Moment unterstützen die meisten Laufwerke nur 3 Optionen zwischen leise und schnell. Mit den Werten 0, 128 und 254.

-S Festplatte in den Standby-Modus (Energiesparmodus) versetzen und einstellen des Standby-Zeitlimit (Spindown), wie lange (ohne Festplattenaktivität) gewartet werden muss, bevor der Spindelmotor ausgeschaltet wird, um Strom zu sparen.

Ist dieser ausgeschltet, kann es bis zu 30 Sekunden dauern, bis das Laufwerk auf einen nachfolgenden Festplattenzugriff reagiert.

Die meisten Laufwerke sind aber schneller.

Die Kodierung der Standby-Zeitlimits ist sehr speziell.

Null bedeutet "Standby-Zeitlimit ist deaktiviert": Das Gerät wechselt nicht automatisch in den Standby-Modus.

Werte von 1 bis 240 geben ein Vielfaches von 5 Sekunden an (1x5s bis 240x5s).

Werte von 241 bis 251 geben 11 Einheiten in 30-Minuten-Schritten an (241 = 30min bis 251 = 5,5h).

Wert 252 bedeutet 21 Minuten Standby-Zeitlimit.

Wert 253 legt eine vom Hersteller definiertes Standby-Zeitlimit zwischen 8 und 12 Stunden fest.

Wert 254 reserviert.

Wert 255 wird als 21 Minuten plus 15 Sekunden interpretiert.

weitere Information: Manpage hdparm

Parameter

Umgebung

Rückgabewert

Konfiguration

Fast alle Einstellungen, die mit hdparm verändert werden, bleiben nur bis zum nächsten Systemstart erhalten. Um dem entgegenzuwirken, gibt es unter /etc/hdparm.conf eine Konfigurationsdatei, die günstiger Weise schon mit selbsterklärenden Beispielen und Beschreibungen gefüllt ist. Eines muss noch erwähnt werden. Durch die neuen libata Treiber spielt es keine Rolle mehr, an welchem IDE Kanal ein Laufwerk Master oder Slave ist - die Device-Nodes unter /dev werden beim Start per Zufall nummeriert. Will man aber für bestimmte Laufwerke bestimmte Einstellungen setzen, bietet es sich an, die automatisch von udev generierten Symbolischen Links unter /dev/disk/ zu verwenden. Demnach kann ein Block zum Beispiel so aussehen:

/dev/disk/by-id/ata-Hitachi_HDT725050VLA380_VFJ401R41S702K { 
       apm = 128
       acoustic_management = 128
       spindown_time = 240
}

Sollten Probleme auftreten, weil hdparm zu früh gestartet wird, kann man probieren, das Init-Skript mit einer höheren Startnummer zu versehen. Beispiel: Vorlage:RootShell

Anmerkung: Nach dem Resume von einem Suspend-to-ram/to-disk wird die hdparm.conf leider übergangen und die getätigten Einstellungen überschrieben. Zur Abhilfe muss man sich entweder an der Datei /etc/default/hdparm oder an entsprechenden pm-util Skripten vergreifen bzw. eigene erstellen, wie hier vorgeschlagen: Vorlage:DebianforumDiskussion

Dateien

Anwendung

Alle Informationen anzeigen

# hdparm -I /dev/sdb

/dev/sdb:
 
ATA device, with non-removable media
        Model Number:       Hitachi HDS722020ALA330                 
        Serial Number:      JK1160YAGMUVRT
        Firmware Revision:  JKAOA3MA
        Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6; Revision: ATA8-AST T13 Project D1697 Revision 0b
Standards:
        Used: unknown (minor revision code 0x0029) 
        Supported: 8 7 6 5 
        Likely used: 8
Configuration:
        Logical         max     current
        cylinders       16383   16383
        heads           16      16
        sectors/track   63      63
        --
        CHS current addressable sectors:    16514064
        LBA    user addressable sectors:   268435455
        LBA48  user addressable sectors:  3907029168
        Logical/Physical Sector size:           512 bytes
        device size with M = 1024*1024:     1907729 MBytes
        device size with M = 1000*1000:     2000398 MBytes (2000 GB)
        cache/buffer size  = 29999 KBytes (type=DualPortCache)
        Form Factor: 3.5 inch
        Nominal Media Rotation Rate: 7200
Capabilities:
        LBA, IORDY(can be disabled)
        Queue depth: 32
        Standby timer values: spec'd by Standard, no device specific minimum
        R/W multiple sector transfer: Max = 16  Current = 0
        Advanced power management level: disabled
        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
             Cycle time: min=120ns recommended=120ns
        PIO: pio0 pio1 pio2 pio3 pio4 
             Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
        Enabled Supported:
           *    SMART feature set
                Security Mode feature set
           *    Power Management feature set
                Write cache
           *    Look-ahead
           *    Host Protected Area feature set
           *    WRITE_BUFFER command
           *    READ_BUFFER command
           *    DOWNLOAD_MICROCODE
                Advanced Power Management feature set
                Power-Up In Standby feature set
           *    SET_FEATURES required to spinup after power up
                SET_MAX security extension
           *    48-bit Address feature set
           *    Device Configuration Overlay feature set
           *    Mandatory FLUSH_CACHE
           *    FLUSH_CACHE_EXT
           *    SMART error logging
           *    SMART self-test
                Media Card Pass-Through
           *    General Purpose Logging feature set
           *    WRITE_{DMA|MULTIPLE}_FUA_EXT
           *    64-bit World wide name
           *    URG for READ_STREAM[_DMA]_EXT
           *    URG for WRITE_STREAM[_DMA]_EXT
           *    WRITE_UNCORRECTABLE_EXT command
           *    Segmented DOWNLOAD_MICROCODE
           *    Gen1 signaling speed (1.5Gb/s)
           *    Gen2 signaling speed (3.0Gb/s)
           *    Native Command Queueing (NCQ)
           *    Host-initiated interface power management
           *    Phy event counters
           *    NCQ priority information
                Non-Zero buffer offsets in DMA Setup FIS
           *    DMA Setup Auto-Activate optimization
                Device-initiated interface power management
                In-order data delivery
           *    Software settings preservation
           *    SMART Command Transport (SCT) feature set
           *    SCT Write Same (AC2)
           *    SCT Error Recovery Control (AC3)
           *    SCT Features Control (AC4)
           *    SCT Data Tables (AC5)
Security: 
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
        not     supported: enhanced erase
        500min for SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5000cca221c90422
        NAA             : 5
        IEEE OUI        : 000cca
        Unique ID       : 221c90422
Checksum: correct

Bestimmte Information anzeigen

# hdparm -I /dev/sdb | grep "cache"
        cache/buffer size  = 29999 KBytes (type=DualPortCache)
        Write cache
  • Datenträger sdb hat eine "cache size" von 29,999 MB.

Advanced Power Management einstellen

# hdparm -B 254 /dev/sda

/dev/sda:
 setting Advanced Power Management level to 0xfe (254)
 APM_level      = 254
  • Datenträger sda ist auf höchst mögliche Leistung eingestellt => beste Performance, aber höchster Stromverbrauch.

Standby-Modus (Spindown)

  • Hier auf ein Standby-Zeitlimit von 2min.
# hdparm -S 24 /dev/sda

/dev/sda:
 setting standby to 24 (2 minutes)

hdparm-Einstellungen nach einem Software-Reset beibehalten

  • Hier Aktivierung bei Datenträger sda.
# hdparm -K 1 /dev/sda

/dev/sda:
 setting drive keep features to 1 (on)

Read-Lookahead-Funktion

  • Hier Aktivierung beim Datenträger sda.
# hdparm -A 1 /dev/sda
/dev/sda:
 setting drive read-lookahead to 1 (on)
 look-ahead    =  1 (on)

Akkustik

Akkustiklevel anzeigen

# hdparm -M /dev/sda

/dev/sda:
 acoustic      = 254 (128=quiet ... 254=fast)
  • Akkustiklevel des Datenträgers sda ist auf "fast" eingestellt => schnell, aber laut.

Akkustiklevel einstellen

  • Hier auf "quiet" => geringere Performance.
# hdparm -M 128 /dev/sda

/dev/sda:
 setting acoustic management to 128
 acoustic      = 128 (128=quiet ... 254=fast)

Lesegeschwindigkeit messen

Mit Cache

# hdparm -Tt /dev/sda

/dev/sda:
 Timing cached reads:   6962 MB in  2.00 seconds = 3482.67 MB/sec
 Timing buffered disk reads: 358 MB in  3.01 seconds = 119.12 MB/sec

Ohne Cache

# hdparm -Tt --direct /dev/sda

/dev/sda:
 Timing O_DIRECT cached reads:   498 MB in  2.00 seconds = 248.49 MB/sec
 Timing O_DIRECT disk reads: 360 MB in  3.01 seconds = 119.60 MB/sec

Erweiterte Funktionen

Vorlage:Warnung Vorlage:Hinweis

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.


Temperatur: Hitachi

-H
Speziell für Hitachi Festplatten, lässt sich die Temperatur auslesen und anzeigen, ob dieser Wert im grünen Bereich ist. Besonders für sehr alte Geräte, oder welche, die kein SMART unterstützen (z. B. CF-Microdrives).

Vorlage:Hinweis

Beispiel:

Temperatur eines 4GB Microdrives: Vorlage:RootShell


... einer Desktop Festplatte: Vorlage:RootShell Hier stimmt sie mit der von SMART übermittelten überein (RAW_VALUE):

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
[...]
194 Temperature_Celsius     0x0002   146   146   000    Old_age   Always       -       41 (Min/Max 3/59)
[...]

Fragmentierung einer Datei

--fibmap
Wenn man herausfinden möchte, welche Sektoren eine Datei belegt, oder wie fragmentiert sie ist, bietet sich diese Option an. Hdparm benötigt nach dieser Option ausschließlich den Absoluten Pfad zur gewünschten Datei. Bei Erfolg wird eine Liste der belegten Bereiche ausgegeben. Die Sektorzahlen sind absolute LBA Nummern der betreffenden Festplatte und keine Blockzahlen des Dateisystems! Laut Manpage scheint diese Option mit fast jedem Dateisystem umgehen zu können. Nur nach einem sync soll es auch bei ext4/xfs gut funktionieren.

Vorlage:Hinweis Beispiel:

Vorlage:RootShell


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.

Vorlage:Hinweis Abschaltbare Funktionen anzeigen: Vorlage:RootShell 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: Vorlage:RootShell ... 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.


Security

Das "security feature set" ist Teil des ATA Standards und ermöglicht das Sperren der Festplatte durch ein Passwort, sowie deren automatische Löschung.

Passwort-Schutz

Die Passwörter werden direkt auf den Plattern der Festplatte gespeichert, lassen sich so durch Tausch der Laufwerkselektronik (wovon generell abzuraten ist) nicht umgehen. Die Passwörter sollten also mit Vorsicht gesetzt werden, denn theoretisch kann selbst der Hersteller diese nicht umgehen. Es ist jedoch möglich. Für hohe Sichereitsansprüche ist eine Vollverschlüsselung der Daten deshalb effektiver.

--user-master PASSWORT-TYP
Grundsätzlich lassen sich zwei unterschiedliche, 32 Byte lange Passwörter setzen. Mit "u" wird das User-Passwort gewählt; mit "m" das Master-Passwort, welches als Not-Schlüssel dient. Dieser Schalter lässt sich mit dem "security mode" und den anderen kombinieren, als Standard ist immer das User-Passwort gewählt.
--security-set-pass PASSWORT
Dieser Schalter setzt das gegebene Passwort und aktiviert damit die Sicherheitsfunktion, "NULL" für ein leeres. Ist dies das User-Passwort, wird die Sperrung aktiviert.
--security-mode SICHERHEITSSTUFE
Mit "h" wird die Stufe "high security", mit "m" "maximal security" gewählt. Bei ersterem ist die Entsperrung mit beiden Passwörtern, bei "maximal" nur mit dem User-Passwort möglich. Mit dem Master-Passwort lässt sich die Festplatte nur durch ein "security erase" entsperren, wobei alle Daten gelöscht werden. Ohne Angabe wird auf "high" gesetzt. Mit "user-master" und den anderen Schaltern kombinierbar.
--security-unlock PASSWORT
Hiermit wird die Festplatte temporär, also bis zum nächsten Start (Reset), entsperrt.
--security-disable PASSWORT
Im entsperrten Zustand lässt sich die Sicherheitsfunktion so dauerhaft ausschalten.
--security-freeze PASSWORT
Damit werden alle Sicherheitseinstellungen eingefroren, bis zum nächsten Start sind keine Änderungen mehr möglich. Diese Funktion wird von einigen BIOS beim Start gesetzt, um ein Sperren mit böswilliger Absicht zu verhindern.

Beispiele:
Die Unterstützung prüfen:

Vorlage:RootShell

Security: 
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
        not     supported: enhanced erase

Das "not" zeigt jeweils, was inaktiv ist. Je nach Gerät sind hier Informationen über die Dauer eines "security-erase" angegeben.

Die Aktivierung geschieht mit dem Setzen eines Passwortes. Vorlage:RootShellDa Passwortmode und Sicherheitsstufe nicht angegeben sind, wird der Standard verwendet.

security_password="Test"

/dev/sdg:
 Issuing SECURITY_SET_PASS command, password="Test", user=user, mode=high

Unter "Security" ist nun das not vor enabled verschwunden:

               enabled

Würde der Rechner oder die Festplatte jetzt neu gestartet werden, würde diese nicht mehr zugreifbar sein, ohne diese zu entsperren oder den Schutz ganz aufzuheben:

Vorlage:RootShell

security_password="Test"

/dev/sdg:
 Issuing SECURITY_UNLOCK command, password="Test", user=user

Schutz abschalten:

Vorlage:RootShell

security_password="Test"

/dev/sdg:
 Issuing SECURITY_DISABLE command, password="Test", user=user

Die Festplatte ist dauerhaft entsperrt:

        not     enabled

Das Master-Passwort ließe sich so setzen: Vorlage:RootShell

security_password="Passwort2"

/dev/sdg:
 Issuing SECURITY_DISABLE command, password="Passwort2", user=master

Den aktuellen Schutzzustand einfrieren:

hdparm --security-freeze /dev/sdg

/dev/sdg:
 issuing security freeze command

Das fehlende not zeigt wieder den Zustand:

                frozen

Ein Versuch, den Schutz danach ein zu schalten: Vorlage:RootShell schlägt dann fehl:

security_password="TEST"

/dev/sda:
 Issuing SECURITY_SET_PASS command, password="TEST", user=user, mode=high
SECURITY_SET_PASS: Input/output error


Security Erase

--security-erase PASSWORT
Es wird eine gesperrte Festplatte so entsperrt und automatisch komplett mit Nullen beschrieben.
--security-erase-enhanced PASSWORT
Führt ein "enhanced security erase" aus und bewirkt ansonsten das selbe wie "security erase". Insbesondere bei SSDs kann es hier Unterschiede geben.

Vorlage:Hinweis

Beispiel:
Nachdem man zuvor den Schutz, durch setzen eines User-Passwortes, aktiviert hat, ist ein Security-Erase möglich mit: Vorlage:RootShell

security_password="TEST"

/dev/sdc:
 Issuing SECURITY_ERASE command, password="TEST", user=user

Ob die Festplatte ein enhanced erase unterstützt, wird mit "-I" angezeigt:

        not     supported: enhanced erase

Anmerkung: Wenn die Dauer des Löschens nicht angegeben ist, kann man abhängig von der Kapazität und der mittleren Schreibgeschwindigkeit auf die Zeit schließen. Unterstützt die Festplatte SMART, entspricht die benötigte Zeit ungefähr der, welche für einen erweiterten Selbsttest angegeben wird:

Extended self-test routine
recommended polling time:        (  54) minutes.

So ist besonders bei Festplatten an einem langsamen IDE/SATA Chipsatz das Löschen mit der maximalen Geschwindigkeit erreichbar, da die Operation von der Festplattenfirmware selbst durchgeführt wird und so unabhängig von der Bus-Anbindung ist. Bei SSDs müssen nur die Blöcke der NAND Flash gelöscht werden, dadurch muss nicht jedes Byte geschrieben werden und die Gesamtdauer kann so wenige Minuten betragen. Das ist jedoch sehr Herstellerspezifisch.


HPA - Host Protect Area

-N
Zeigt und setzt die LBA Sektoren.
Mit ATA/ATAPI 4 wurde das Host Protect Area eingeführt. Damit lässt sich ein definierter Bereich der Festplatte selbst vor Partitionierprogrammen verstecken und die Gesamtkapazität so scheinbar schrumpfen. HPA verhält sich so wie eine unsichtbare Grenze, die nichts anderes bewirkt. Gerne für Wiederherstellungspartitionen in OEM Systemen verwendet und so manches BIOS kopiert sich ungefragt in einen selbst erstellten HPA-Bereich (Vorlage:DebianforumBeitrag). Vom Kernel standardmäßig zurückgesetzt, lässt sich dieser von hdparm erkennen und sogar setzen.

Vorlage:Hinweis

Beispiel:

hdparm -N /dev/sdc

/dev/sdc:
 max sectors   = 156250000/156250000, HPA is disabled

Die maximale LBA Zahl kann flüchtig wie folgt gesetzt werden:

hdparm --yes-i-know-what-i-am-doing -N156200000 /dev/sdc

/dev/sdc:
 setting max visible sectors to 156200000 (temporary)
 max sectors   = 156200000/156250000, HPA is enabled

Nach einem Reset oder Neustart wäre diese Einstellung zurückgesetzt. Das permanente, also nichtflüchtige, Setzen wird durch ein kleines p vor der Sektorzahl bewirkt:

hdparm --yes-i-know-what-i-am-doing -Np156200000 /dev/sdc

/dev/sdc:
 setting max visible sectors to 156200000 (permanent)
 max sectors   = 156200000/156250000, HPA is enabled

Hier hat die Ausführung funktioniert. Damit wissen aber fdisk, dd & Co noch nichts davon:

fdisk -luc /dev/sdc

Disk /dev/sdc: 80.0 GB, 80000000000 bytes
255 heads, 63 sectors/track, 9726 cylinders, total 156250000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000be68d
[...]

Erst nach einem Neustart wäre dies der Fall.


Als weiteres Beispiel folgend das Erkennen und rückgängig machen, eines vom BIOS gesetzten HPA. Die Meldung vom Kernel lässt Verdacht schöpfen: Vorlage:UserShell

hdparm -N /dev/sdd

/dev/sdd:
 max sectors   = 156247887/156250000, HPA is enabled

(156250000-156247887)*512 Byte = 1.081.856 Byte wurden geschluckt! Nun den HPA löschen:

hdparm -Np156250000 /dev/sdd

/dev/sdd:
 setting max visible sectors to 156250000 (permanent)
 max sectors   = 156250000/156250000, HPA is disabled

Danach neu starten um mit dd zu schauen ob, und was da nun versteckt war:

dd if=/dev/sdd of=hpa.bin bs=512 skip=156247887
2113+0 Datensätze ein
2113+0 Datensätze aus
1081856 Bytes (1,1 MB) kopiert, 0,00426143 s, 254 MB/s

Mit hexdump gucken:

hexdump -Cn40 hpa.bin
00000000  25 e4 2d 6c 68 35 2d 7f  42 01 00 00 00 02 00 00  |%.-lh5-.B.......|
00000010  00 00 50 20 01 0c 4b 38  4e 53 43 39 33 39 2e 42  |..P ..K8NSC939.B|
00000020  49 4e fe 0f 20 00 00 2c                           |IN.. ..,|
00000028c

Etwas lha-komprimiertes.

lha -x hpa.bin
k8nsc939.bin    - Melted   :  oooooooooooooooo
LHa: Error: CRC error k8nsc939.bin
ls -l k8nsc939.bin 
-rw-r--r-- 1 ich ich 131072 30. Nov 2019  k8nsc939.bin

So wurde in den versteckten Bereich ein BIOS Image gepackt. Bei manchen lässt sich das abstellen.


HPA ignorieren: Es ist möglich den Kernel anzuweisen, eine eventuell gesetzte HPA Limitierung zu ignorieren. Es ist lediglich nötig, als Kernel Bootparameter folgendes mitzugeben:

libata.ignore_hpa=1 

Eine 0 ist Standard und würde die limits beibehalten. Äquivalent libata als Modulparameter ignore_hpa=1. Oder durch IDE Treiber unterstützte Controller ide-core.nohpa zum Boot mitgeben.


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.

Sicherheit

Dokumentation

RFC

Man-Page

  1. https://man7.org/linux/man-pages/man8/hdparm.8.html

Info-Pages

Siehe auch

Links

Projekt

Weblinks

  1. https://de.wikipedia.org/wiki/Hdparm
  2. https://linuxwiki.de/hdparm
  3. https://wiki.ubuntuusers.de/Festplatten-Geschwindigkeitstest/
  4. https://askubuntu.com/questions/87035/how-to-check-hard-disk-performance
  5. Vorlage:DebianforumDiskussion zum Artikel
  6. http://sourceforge.net/projects/hdparm
  7. http://de.wikipedia.org/wiki/Hdparm
  8. http://debiananwenderhandbuch.de/hdparm%20Festplattenparameter.html
  9. http://wiki.ubuntuusers.de/Archiv/DMA
  10. http://linuxwiki.de/hdparm
  11. http://de.wikipedia.org/wiki/ATA/ATAPI
  12. http://de.wikipedia.org/wiki/Host_Protected_Area
  13. http://www.heise.de/ct/artikel/Baerendienst-289866.html
  14. http://wiki.ubuntuusers.de/SSD/Secure-Erase
  15. https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase
  16. http://www.serialata.org




TMP

Leistungsoptimierungen

Insbesondere bei älterer Hardware kann es vorkommen, dass sich das System träge anfühlt, Kopiervorgänge ewig dauern oder Videos beim Abspielen ruckeln. Da die Festplatte oft das langsamste Element in einem PC ist, sollte man hier mit der Suche ansetzen.

Durchsatztest

Vorlage:Hinweis Hierfür dienen die hdparm-Schalter „-t“ und „-T“.

-T
Testet die Performance des System Caches. Hierbei wird ohne Festplattenzugriff direkt aus dem Linux Puffer Cache gelesen und somit der Durchsatz des Prozessors, Caches und Arbeitsspeichers bestimmt. Der Aufruf sollte 2 oder mehrmals wiederholt werden, um einen stabilen Wert zu erhalten. Auch wenn es keinen Einfluss hat, muss trotzdem ein device angegeben werden.
Beispielsweise auf einem modernen System mit Mehrkern-CPU und DDR3 Ram könnte die Ausgabe so aus sehen:
Vorlage:RootShell
/dev/sda:
Timing cached reads: 6678 MB in 2.00 seconds = 3345.76 MB/sec
Auf einem älteren Pentium 4 mit DDR1 Speicher:
Vorlage:RootShell
/dev/hda:
Timing cached reads: 540 MB in 2.01 seconds = 269.23 MB/sec
-t
Dieser Test liest direkt über den System Cache vom angegebenen Laufwerk. Hierbei ist zu beachten, dass dies die reine Netto-Datenrate zwischen Laufwerk und Chipsatz und dem vorhandenen Kernel Modul ist. Deshalb sollte der Test wie bei „-T“ mehrmals wiederholt werden, wobei möglichst darauf geachtet werden sollte, dass keine weiteren Festplattenzugriffe stattfinden, die das Ergebnis verfälschen würden.
--direct
Dieser Schalter, in Verbindung mit „-t“, übergeht selbst den System Cache und liest so direkt vom Laufwerk. Der Wert gibt so den reinen Durchsatz, welchen Laufwerk, Chipsatz und Treiber bieten.

Vorlage:Hinweis

--offset
Hier kann ein Versatz in GiB angegeben werden, ab dem "hdparm -t" die Messung vor nimmt. Mit dem Hintergrund, dass mechanische Laufwerke (z. B. Festplatten) am Anfang, also im äußersten Bereich der Platter, schneller sind, als im Inneren. Das Verhalten kann mit diesem Schalter nachvollzogen werden. Bei Flash-Speichern gibt es womöglich keine Variationen.
Anmerkung: Der Offset sollte maximal ca. 10% unter der Laufwerkskapazität liegen.

Vorlage:Hinweis

Beispiele an einer 500 GB SATA Festplatte: Vorlage:RootShell

/dev/sdc:
 Timing buffered disk reads: 230 MB in  3.00 seconds =  76.55 MB/sec

Ein normaler Test. Vorlage:RootShell

/dev/sdc:
 Timing O_DIRECT disk reads: 232 MB in  3.02 seconds =  76.86 MB/sec

Mit --direct gibt es quasi keinen Unterschied auf diesem System. Vorlage:RootShell

/dev/sdc:
 Timing O_DIRECT disk reads (offset 250 GB): 196 MB in  3.02 seconds =  64.83 MB/sec

Bei 250 GiB, also der halben Kapazität, geht der Durchsatz schon deutlich zurück. Vorlage:RootShell

/dev/sdc:
 Timing O_DIRECT disk reads (offset 460 GB): 116 MB in  3.03 seconds =  38.34 MB/sec

Kurz vor Ende ist er auf dem Minimum. Das ist bei allen Festplatten ähnlich, ungefähr ein Unterschied von 50% zum äußersten Bereich.

Anmerkung: Die grafische Darstellung der Schreib- und Leserate sowie der Zugriffzeiten über den gesamten Bereich können seit Squeeze mit palimpsest aus dem Paket Vorlage:Deb durchgeführt werden.

Optimierungen

Die Wirkung und Unterstützung unterscheidet sich bei den Herstellern und Modellen. Die Schalter mit ihrer Funktion:

  • -a Stellt die Sektorenzahl für den FS-Readahead ein.
  • -A schaltet die „read-lookahead“-Funktion einer IDE-Festplatte ein oder aus. Normalerweise ist diese Funktion bereits aktiviert.
  • -c zeigt den Status oder aktiviert den (E)IDE-32-Bit-I/O-Support. Die Parameter hier für sind: 0, um den Support zu deaktivieren, und 1, um den Support zu aktivieren. Der Wert 3 aktiviert den 32-Bit-Support mit einer speziellen Sync-Sequenz, die von einigen Chipsets benötigt wird. Diese Option funktioniert mit fast allen Chipsets, bringt jedoch etwas mehr Overhead mit sich. Wird kein Parameter angegeben, so wird die aktuelle Einstellung angezeigt. Wirkt sich nur auf die Verbindung zwischen Chipsatz und PCI Bus aus.
  • -d zeigt, ob für das genannte Gerät der DMA-Modus benutzt wird, oder aktiviert/deaktiviert den Modus. Das Flag „using_dma“ funktioniert nur mit wenigen Kombinationen aus Festplatte und Controllern. Beispielsweise wird beim Intel Triton Chipset der Bus-Master-DMA-Modus in Verbindung mit vielen Festplatten unterstützt. Wenn möglich, sollte die Option -X34 zusammen mit -d1 benutzt werden, um sicherzustellen, dass das Laufwerk selbst den Multiword DMA Modus 2 unterstützt.
  • -E setzt die CD/DVD Geschwindigkeit. Wird normalerweise nicht benötigt und manchmal ignoriert.
  • -f synchronisiert und speichert den Cache-Puffer der Festplatte beim Beenden des Programms. Dieser Vorgang wird auch bei den Optionen -t und -T durchgeführt. Gleiches wird mit dem Konsolenbefehl "sync" bewirkt.
  • -F schreibt, wenn unterstützt, den Schreibcache des Laufwerks.
  • -g zeigt die Festplattengeometrie, also Angaben zu Zylinder, Köpfe, (Sektoren), die Größe (in Sektoren) des Laufwerkes und den Offset (in Sektoren) des Devices vom Anfang der Festplatte.
  • -k liest oder setzt das Flag "keep_settings_over_reset" für das Laufwerk. Wenn diese Option gesetzt ist, werden die Optionen -dmu über einen (Soft-) Reset hinaus gespeichert.
  • -K setzt das Flag "keep_features_over_reset". Das Setzen dieser Option rettet die Einstellungen -APSWXZ über einen (Soft-) Reset hinaus. Diese Option wird nicht von allen Laufwerken unterstützt.
  • -m Gibt an, wie viele Sektoren mit einem I/O Interrupt gleichzeitig geholt werden. Als Wert 0, 2 oder ein vielfaches davon.
  • -M stellt das Automatic Acoustic Management (AAM) ein. Steuert die Geschwindigkeit der Kopfbewegungen, was die Geräuschentwicklung und die Performance beim Suchen beeinflusst. Theoretisch von 1 ...255. Viele unterstützen nur drei Zustände, die oft auf 0 = aus; 128 = leise und 254 = laut fallen.
  • -p versucht, das IDE-Interface-Chipset auf den gewünschten PIO-Modus zu setzen oder den bestmöglichen PIO-Modus einzustellen.
  • -q unterdrückt die Ausgabe von Meldungen für die folgenden Optionen. Dies kann eingesetzt werden, wenn hdparm aus einer Datei beim Systemstart heraus aufgerufen wird. Diese Option hat keine Auswirkungen auf die Optionen -i, -v, -t oder -T.
  • -r liest oder setzt das „Read-Only-Flag“. Damit ist kein Schreiben auf das Laufwerk mehr möglich.
  • -u liest oder setzt das „interrupt-unmask“-Flag. Dies kann auf vielen Systemen die Reaktionszeit des Systems verbessern, ist aber mit Vorsicht einzusetzen, da nicht alle Chipsets diese Funktion richtig umsetzen können. Ein Wert von 1 aktiviert diese Funktion.
  • -W aktiviert oder deaktiviert bei einem IDE-Laufwerk die Funktion "write-caching" Erhöht die Schreibleistung, riskiert bei plötzlichem Stromausfall aber Datenverlust (da der Festplattencache nicht geschrieben werden kann). Dies ist Standardmäßig aktiviert.
  • -X setzt den IDE-Übertragungsmodus bei neueren (E)IDE/ATA2-Laufwerken. Diese Option wird meistens zusammen mit -d1 benutzt, um den DMA-Modus von/zu einem Laufwerk mit Chipsets, die dies unterstützen (beispielsweise Intel 430FX Triton), zu aktivieren. Dort können dann auch mit -X34 „Multiword-DMA-mode2“-Übertragungen aktiviert werden. Die Option -X66 aktiviert UltraDMA-Mode2-Übertragungen. Nützlich, um z. B. Übertragungsfehler (CRC Fehler) zu vermeiden und einem schrittweisen, automatischen herabsetzen durch ein schlechtes Kabel zuvor zu kommen.

Energieverwaltung

Für die Energieverwaltung lassen sich folgende Schalter verwenden.

  • -B setzt den APM Parameter, wenn es unterstützt wird. Die Implementierungen der Hersteller sind sehr verschieden, jedoch ist folgende Einteilung üblich: 1 ... 127 beinhaltet ein Spin-Down; 128 ... 254 nicht. Die aggressivste Einstellung ist 1, die schwächste 254. 255 schaltet APM aus, wenn möglich. Eine wichtige Einstellung, um die Lebensdauer bestimmter Festplatten zu verlängern; u.a. hier diskutiert: Vorlage:DebianforumDiskussion
  • -C zeigt den aktuellen „Power-Mode-Status“ einer IDE-Festplatte an. Dieser kann folgende Werte annehmen: „unknown“ - Das Laufwerk unterstützt dieses Kommando nicht; „active“/„idle“ - Normalbetrieb; „standby“ - Low Power Modus, die Festplatte dreht sich nicht oder „schläft“ sogar komplett. Die Optionen -S, -y, -Y und -Z können zur Veränderung der IDE-Power-Modes verwendet werden.
  • --idle-immediate versucht einen geringeren Energiemodus zu erreichen. Die Spindel läuft weiter.
  • --idle-unload versucht die Köpfe zu parken. Die Spindel läuft weiter. Beide Optionen erst ab hdparm Version 9.3.
  • -S setzt die Standby-Zeit des Gerätes. Nach der eingestellten Zeit fährt die Festplatte in den Ruhezustand (entspricht -y). Ein Wert von 0 schaltet diese Funktion aus, maximal bis 255. Die Einteilung ist nicht linear, man muss etwas probieren um auf die gewünschte Zeit zu kommen.
  • -y setzt das Laufwerk sofort in den Standby Modus, die Spindel stoppt dabei. Bei Zugriffen wacht es automatisch wieder auf.
  • -Y setzt das Laufwerk in den Sleep Modus, welcher am wenigsten Energie benötigt. Die Spindel stoppt auch hier. Normalerweise wird es bei Zugriffen automatisch aufgeweckt. Die benötigte Startzeit ist etwas länger als im Standby Modus.
  • -Z deaktiviert die automatische Energiespar-Funktion einiger älterer Seagate Festplatten um ungünstige Spin-Downs zu verhindern.