Wie kann ich nach dem Booten einen hdparm-Befehl ausführen und unter Fedora 19 fortfahren?

10

Ich habe eine neue HD (WD5000BPVT) gekauft, die leider alle 5-8 Sekunden versucht zu schlafen. Das Klickgeräusch ist nicht nur gut hörbar, die 1-Sekunden-Spinup-Zeit sorgt für eine sehr spürbare Latenz im täglichen Gebrauch.

Ich habe festgestellt hdparm -B 254 /dev/sda, dass der sehr kurze Ruhezustand deaktiviert wird, aber ich weiß nicht, wie diese Einstellung bei jedem Einschalten des Laufwerks erzwungen werden soll. Die dconf-editorApps und die Energieverwaltungseinstellungen tun beide nichts in Bezug auf die HD-Einstellungen. Ich habe keine /etc/hdparmoder /etc/acpiPfade. MATE ist der Fenstermanager.

Wie kann ich unter Fedora 19 erzwingen, dass dieser Befehl ausgeführt wird, wenn das Laufwerk aktiviert wird?

Pete
quelle

Antworten:

12

Ich hatte das gleiche Problem, keine der Lösungen hier entsprach meinen Bedürfnissen. Die Verwendung von cron ist wirklich eine Problemumgehung, keine Lösung. Udev-Regeln werden ausgeführt, wenn die Stromversorgung angeschlossen / getrennt wird, jedoch nicht nach dem Anhalten / Fortsetzen. Sie pm-utilswerden in Fedora 19 nicht mehr standardmäßig verwendet, wenn Sie beispielsweise den Deckel Ihres Laptops schließen.

Da systemdjetzt für das Anhalten / Ruhezustand verantwortlich ist, denke ich, dass der einzig richtige Weg, um mit dieser Situation umzugehen, darin besteht, eine systemdEinheit zu erstellen , die sowohl nach dem Booten als auch nach der Wiederaufnahme des Suspendierens ausgeführt wird.

Anmerkungen:

  • Wenn Sie /dev/disk/by-id/...anstelle von verwenden /dev/sda, stellen Sie immer sicher, dass Sie die richtige Festplatte erhalten (sda, b, c hängt von der Reihenfolge ab, in der sie vom Kernel erkannt werden).
  • Sie können mehrere ExecStartLeitungen haben, um mehrere Festplatten zu konfigurieren

Hier ist die Einheit, die ich geschrieben habe:

[Unit]
Description=Silence HD
After=suspend.target

[Service]
Type=oneshot
# Disable automatic head parking for the main disk
ExecStart=/sbin/hdparm -B 254 /dev/disk/by-id/ata-ST3250824AS_4N127FD1
# Enable automatic spin down after 30 seconds for the second, infrequently used disk
ExecStart=/sbin/hdparm -S 6 /dev/disk/by-id/ata-ST31000528AS_BVP5H5X1

[Install]
WantedBy=suspend.target basic.target

Speichern Sie diese Datei als /etc/systemd/system/hdsilence.serviceund aktivieren Sie sie dann mit:

systemctl enable hdsilence.service
systemctl daemon-reload
Krzysztof Adamski
quelle
Funktioniert auch hier auf Fedora 20 hervorragend. Vielen Dank!
Jakob
Änderungen an /etc/hdparm.conf sind also veraltet?
Domih
@domih: Soweit ich das beurteilen kann, ist die hdparm.conf eine Debian-Sache und wird von Fedora nicht unterstützt.
Krzysztof Adamski
6

Sie können das System den Befehl während des Startvorgangs ausführen lassen, indem Sie einen eigenen systemd-Dienst erstellen oder den Befehl zu /etc/rc.d/rc.local hinzufügen.

Wenn Sie den Befehl wollen jedes Mal , die Sie ausführen wecken das System nach dem Schlaf / Hibernate, können Sie ein Skript , das beginnt mit zwei Ziffern /etc/pm/sleep.d/, um einige der anderen Skripte in / usr / lib64 / add pm-utils / sleep.d (unter der Annahme von x86_64) für weitere Details. Grundsätzlich wird ein Parameter verwendet, der davon abhängt, in welchen Status er eintritt. Möglicherweise müssen Sie auch ein Login zu power.d / im selben übergeordneten Verzeichnis hinzufügen, wenn Sie mit Batteriestrom anders arbeiten möchten als mit angeschlossenem.

jsbillings
quelle
1
creating your own systemd servicekannst du genauer sein? Ich habe keine /etc/rc.d/rc.local-Datei.
Pete
1
In der systemd-Dokumentation wird die Syntax einer systemd-Serviceeinheit erläutert. Die /etc/rc.d/rc.localDatei ist nur ein Shell-Skript. Erstellen Sie sie und stellen Sie sicher, dass sie ausführbar ist.
jsbillings
3

Für verschiedene Einstellungen bei Betrieb mit Wechselstrom / Batterie würde ich dies über eine einfache udevRegel tun , z
/etc/udev/rules.d/98-apmsettings.rules.

SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/hdparm -B 128 /dev/sda"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/hdparm -B 254 /dev/sda"

Dies wird eingestellt apm, 254wenn der Laptop angeschlossen bzw. 128ausgesteckt ist. Außerdem sollte es immer funktionieren, auch nachdem die Suspendierung wieder aufgenommen wurde.

don_crissti
quelle
1
Für diejenigen , die wie das Kopieren wörtlich, neuere Versionen haben hdparmin /usr/sbin, passen so die Pfade.
Roman
2

Ich habe die gleiche Festplatte (und das gleiche Problem). Meine dumme, aber funktionierende Lösung: Ich habe das eingegeben /etc/crontab:

-*/5  * * * *   root  hdparm -B 254 /dev/sda
Hauke ​​Laging
quelle
Greifen Sie nicht einfach alle 12 Sekunden auf das Laufwerk zu? Ich habe über etwas in dieser Richtung nachgedacht, aber ich möchte ein bisschen Schlaf, wenn ich nicht angedockt bin.
Pete
Alle fünf Minuten. Sie können ein Wrapper-Skript schreiben, das den Energiezustand des Systems überprüft.
Hauke ​​Laging
1

Die udev-Regeln funktionieren gut bei Plug-Events, aber um das richtige Verhalten nach dem Fortsetzen von Suspend zu erhalten, brauche ich Folgendes /etc/pm/sleep.d:

#!/bin/sh

case "${1}" in
    resume|thaw)
    if grep -q 1 /sys/class/power_supply/ADP1/online; then
      /usr/sbin/hdparm -B 254 /dev/sda
    else
      /usr/sbin/hdparm -B 128 /dev/sda
    fi
;;
esac
rauben
quelle