Hdparm: Unterschied zwischen den Versionen
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“ |
|||
(79 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{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 | |||
*Laufwerks-Caches | * Ruhemodus | ||
*Ruhemodus | * Energieverwaltung | ||
*Energieverwaltung | * akustische Verwaltung | ||
*akustische Verwaltung | * DMA-Einstellungen | ||
*DMA-Einstellungen | |||
= | == Installation == | ||
'''root@debian:~#''' apt install hdparm | |||
hdparm [ | == Aufruf == | ||
'''root@debian:~#''' hdparm [Optionen] [Gerät ...] | |||
=== Optionen === | |||
{|class="wikitable" | {|class="wikitable" | ||
! | !Option !! Beschreibung | ||
|- | |- | ||
| -a || Abrufen / Festlegen der Sektoranzahl für das Vorauslesen des Dateisystems (Software). | | -a || Abrufen / Festlegen der Sektoranzahl für das Vorauslesen des Dateisystems (Software). | ||
Zeile 73: | Zeile 87: | ||
Wert 255 wird als 21 Minuten plus 15 Sekunden interpretiert. | 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. eigene erstellen, wie hier vorgeschlagen: {{DebianforumDiskussion|138254}}'' | |||
=== Dateien === | |||
/dev/ | == Anwendung == | ||
=== Alle Informationen anzeigen === | |||
# '''hdparm -I /dev/sdb''' | |||
/dev/sdb: | |||
ATA device, with non-removable media | ATA device, with non-removable media | ||
Model Number: | Model Number: Hitachi HDS722020ALA330 | ||
Serial Number: | Serial Number: JK1160YAGMUVRT | ||
Firmware Revision: | Firmware Revision: JKAOA3MA | ||
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6 | 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: | Standards: | ||
Used: unknown (minor revision code | Used: unknown (minor revision code 0x0029) | ||
Supported: 8 7 6 5 | Supported: 8 7 6 5 | ||
Likely used: 8 | Likely used: 8 | ||
Zeile 106: | Zeile 138: | ||
CHS current addressable sectors: 16514064 | CHS current addressable sectors: 16514064 | ||
LBA user addressable sectors: 268435455 | LBA user addressable sectors: 268435455 | ||
LBA48 user addressable sectors: | LBA48 user addressable sectors: 3907029168 | ||
Logical | Logical/Physical Sector size: 512 bytes | ||
device size with M = 1024*1024: 1907729 MBytes | |||
device size with M = 1024*1024: | device size with M = 1000*1000: 2000398 MBytes (2000 GB) | ||
device size with M = 1000*1000: | cache/buffer size = 29999 KBytes (type=DualPortCache) | ||
cache/buffer size = | |||
Form Factor: 3.5 inch | Form Factor: 3.5 inch | ||
Nominal Media Rotation Rate: 7200 | Nominal Media Rotation Rate: 7200 | ||
Zeile 118: | Zeile 149: | ||
Queue depth: 32 | Queue depth: 32 | ||
Standby timer values: spec'd by Standard, no device specific minimum | Standby timer values: spec'd by Standard, no device specific minimum | ||
R/W multiple sector transfer: Max = 16 Current = | R/W multiple sector transfer: Max = 16 Current = 0 | ||
Advanced power management level: | Advanced power management level: disabled | ||
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 | DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 | ||
Cycle time: min=120ns recommended=120ns | Cycle time: min=120ns recommended=120ns | ||
Zeile 135: | Zeile 165: | ||
* WRITE_BUFFER command | * WRITE_BUFFER command | ||
* READ_BUFFER command | * READ_BUFFER command | ||
* DOWNLOAD_MICROCODE | * DOWNLOAD_MICROCODE | ||
Advanced Power Management feature set | |||
Power-Up In Standby feature set | Power-Up In Standby feature set | ||
* SET_FEATURES required to spinup after power up | * SET_FEATURES required to spinup after power up | ||
SET_MAX security extension | SET_MAX security extension | ||
* 48-bit Address feature set | * 48-bit Address feature set | ||
* Device Configuration Overlay feature set | * Device Configuration Overlay feature set | ||
Zeile 148: | Zeile 176: | ||
* SMART error logging | * SMART error logging | ||
* SMART self-test | * SMART self-test | ||
Media Card Pass-Through | |||
* General Purpose Logging feature set | * General Purpose Logging feature set | ||
* WRITE_{DMA|MULTIPLE}_FUA_EXT | |||
* 64-bit World wide name | * 64-bit World wide name | ||
* URG for READ_STREAM[_DMA]_EXT | |||
* URG for WRITE_STREAM[_DMA]_EXT | |||
* WRITE_UNCORRECTABLE_EXT command | * WRITE_UNCORRECTABLE_EXT command | ||
* Segmented DOWNLOAD_MICROCODE | * Segmented DOWNLOAD_MICROCODE | ||
* Gen1 signaling speed (1.5Gb/s) | * Gen1 signaling speed (1.5Gb/s) | ||
Zeile 159: | Zeile 190: | ||
* Phy event counters | * Phy event counters | ||
* NCQ priority information | * NCQ priority information | ||
Non-Zero buffer offsets in DMA Setup FIS | |||
* DMA Setup Auto-Activate optimization | * DMA Setup Auto-Activate optimization | ||
Device-initiated interface power management | Device-initiated interface power management | ||
In-order data delivery | |||
* Software settings preservation | * Software settings preservation | ||
* SMART Command Transport (SCT) feature set | * SMART Command Transport (SCT) feature set | ||
* SCT Write Same (AC2) | * SCT Write Same (AC2) | ||
* SCT Error Recovery Control (AC3) | * SCT Error Recovery Control (AC3) | ||
Zeile 175: | Zeile 207: | ||
not frozen | not frozen | ||
not expired: security count | not expired: security count | ||
not supported: enhanced erase | |||
500min for SECURITY ERASE UNIT. | |||
Logical Unit WWN Device Identifier: | Logical Unit WWN Device Identifier: 5000cca221c90422 | ||
NAA : 5 | NAA : 5 | ||
IEEE OUI : | IEEE OUI : 000cca | ||
Unique ID : | Unique ID : 221c90422 | ||
Checksum: correct | 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: | /dev/sda: | ||
setting Advanced Power Management level to 0xfe (254) | setting Advanced Power Management level to 0xfe (254) | ||
APM_level = 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: | /dev/sda: | ||
setting standby to 24 (2 minutes) | setting standby to 24 (2 minutes) | ||
==hdparm-Einstellungen nach einem Software-Reset beibehalten== | === hdparm-Einstellungen nach einem Software-Reset beibehalten === | ||
* Hier Aktivierung bei Datenträger sda. | |||
# hdparm -K 1 /dev/sda | # '''hdparm -K 1 /dev/sda''' | ||
/dev/sda: | /dev/sda: | ||
setting drive keep features to 1 (on) | setting drive keep features to 1 (on) | ||
==Read-Lookahead-Funktion | === Read-Lookahead-Funktion === | ||
* Hier Aktivierung beim Datenträger sda. | |||
#hdparm -A 1 /dev/sda | # '''hdparm -A 1 /dev/sda''' | ||
/dev/sda: | /dev/sda: | ||
setting drive read-lookahead to 1 (on) | setting drive read-lookahead to 1 (on) | ||
look-ahead = 1 (on) | look-ahead = 1 (on) | ||
==Akkustiklevel | === Akkustik === | ||
==== Akkustiklevel anzeigen ==== | |||
# hdparm -M /dev/sda | # hdparm -M /dev/sda | ||
/dev/sda: | /dev/sda: | ||
acoustic = 254 (128=quiet ... 254=fast) | acoustic = 254 (128=quiet ... 254=fast) | ||
* Akkustiklevel des Datenträgers sda ist auf "fast" eingestellt => schnell, aber laut. | |||
==Akkustiklevel | ==== Akkustiklevel einstellen ==== | ||
* Hier auf "quiet" => geringere Performance. | |||
# '''hdparm -M 128 /dev/sda''' | |||
/dev/sda: | /dev/sda: | ||
setting acoustic management to 128 | setting acoustic management to 128 | ||
acoustic = 128 (128=quiet ... 254=fast) | acoustic = 128 (128=quiet ... 254=fast) | ||
==Lesegeschwindigkeit messen | === Lesegeschwindigkeit messen === | ||
==== Mit Cache ==== | |||
#hdparm -Tt /dev/sda | # '''hdparm -Tt /dev/sda''' | ||
/dev/sda: | /dev/sda: | ||
Timing cached reads: 6962 MB in 2.00 seconds = 3482.67 MB/sec | 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 | Timing buffered disk reads: 358 MB in 3.01 seconds = 119.12 MB/sec | ||
== | ==== Ohne Cache ==== | ||
# hdparm -Tt --direct /dev/sda | # hdparm -Tt --direct /dev/sda | ||
/dev/sda: | /dev/sda: | ||
Timing O_DIRECT cached reads: 498 MB in 2.00 seconds = 248.49 MB/sec | 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 | 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. B. 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. 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. 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. B. 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. 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.'' | |||
{{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. 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: {{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).
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:
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:
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:
security_password="Test" /dev/sdg: Issuing SECURITY_UNLOCK command, password="Test", user=user
Schutz abschalten:
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.
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.
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
Info-Pages
Siehe auch
Links
Projekt
Weblinks
- https://de.wikipedia.org/wiki/Hdparm
- https://linuxwiki.de/hdparm
- https://wiki.ubuntuusers.de/Festplatten-Geschwindigkeitstest/
- https://askubuntu.com/questions/87035/how-to-check-hard-disk-performance
- Vorlage:DebianforumDiskussion 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
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.
- --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.
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.