Jak mogę uruchomić polecenie hdparm po uruchomieniu i wznowieniu w Fedorze 19?

10

Kupiłem nowy HD (WD5000BPVT), który niestety próbuje spać co 5-8 sekund. Hałas kliknięcia jest nie tylko dość słyszalny, ale 1-sekundowy czas uruchamiania powoduje bardzo zauważalne opóźnienie w codziennym użytkowaniu.

Odkryłem, że hdparm -B 254 /dev/sdawyłączy bardzo krótki sen, ale nie wiem, jak wymusić to ustawienie przy każdym włączeniu napędu. Zarówno dconf-editoraplikacje, jak i „Preferencje zarządzania energią” nie robią nic w odniesieniu do ustawień HD. I nie ma żadnych /etc/hdparmlub /etc/acpiścieżki. MATE jest menedżerem okien.

Jak w Fedorze 19 mogę wymusić uruchomienie tego polecenia za każdym razem, gdy dysk jest aktywowany?

Pete
źródło

Odpowiedzi:

12

Miałem ten sam problem, żadne z rozwiązań tutaj nie odpowiadało moim potrzebom. Używanie crona jest naprawdę obejściem, a nie rozwiązaniem, reguły udev są uruchamiane, gdy zasilanie jest podłączone / odłączone, ale nie po zawieszeniu / wznowieniu i pm-utilsnie są już domyślnie używane w Fedorze 19, gdy na przykład zamykasz pokrywę laptopa.

Ponieważ systemdjest teraz odpowiedzialny za zawieszanie / hibernację, myślę, że jedynym właściwym sposobem radzenia sobie z tą sytuacją jest stworzenie systemdjednostki, która będzie działała zarówno po rozruchu, jak i po wznowieniu z zawieszenia.

Uwagi:

  • Używając /dev/disk/by-id/...zamiast /dev/sda, zawsze masz pewność, że otrzymujesz właściwy dysk (sda, b, c zależy od kolejności, w jakiej są wykrywane przez jądro)
  • Możesz mieć wiele ExecStartlinii, dzięki czemu możesz skonfigurować wiele dysków

Oto jednostka, którą napisałem:

[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

Zapisz ten plik jako, /etc/systemd/system/hdsilence.servicea następnie włącz go, używając:

systemctl enable hdsilence.service
systemctl daemon-reload
Krzysztof Adamski
źródło
Działa też świetnie tutaj na Fedorze 20. Dziękuję Ci!
Jakob
Czy to powoduje, że zmiany w /etc/hdparm.conf są przestarzałe?
domih
@domih: O ile mogę stwierdzić, hdparm.conf jest kwestią Debiana i nie jest obsługiwana w Fedorze.
Krzysztof Adamski
6

Możesz uruchomić system podczas uruchamiania polecenia, tworząc własną usługę systemd lub dodając polecenie do /etc/rc.d/rc.local.

Jeśli chcesz, aby polecenie było uruchamiane za każdym razem, gdy budzisz system po uśpieniu / hibernacji, możesz dodać skrypt, który zaczyna się od 2 cyfr do /etc/pm/sleep.d/, spójrz na inne skrypty w / usr / lib64 / pm-utils / sleep.d (przy założeniu x86_64) po więcej szczegółów. Zasadniczo wymaga parametru w zależności od tego, do jakiego stanu wchodzi. Być może trzeba będzie dodać login do power.d / w tym samym katalogu nadrzędnym, jeśli chcesz działać inaczej na zasilaniu bateryjnym niż w przypadku podłączenia.

jsbillings
źródło
1
creating your own systemd serviceczy mógłbyś to sprecyzować? Nie mam pliku /etc/rc.d/rc.local.
Pete
1
Dokumentacja systemd wyjaśnia składnię jednostki systemd. /etc/rc.d/rc.localPliku jest tylko skrypt powłoki, utwórz go i upewnij się jej wykonywalny.
jsbillings
3

W przypadku różnych ustawień w przypadku zasilania sieciowego / bateryjnego zrobiłbym to według prostej udevzasady, np .
/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"

Ustawiałoby się apmto 254wtedy, gdy laptop jest podłączony i odpowiednio 128po odłączeniu. Ponadto powinien on zawsze działać, nawet po wznowieniu pracy w trybie zawieszenia.

don_crissti
źródło
1
Dla tych, którzy lubią kopiowania verbatim, nowsze wersje mają hdparmw /usr/sbintak wyregulować ścieżki.
Rzym.
2

Mam ten sam dysk (i ten sam problem). Moje głupie, ale działające rozwiązanie: umieściłem to w /etc/crontab:

-*/5  * * * *   root  hdparm -B 254 /dev/sda
Hauke ​​Laging
źródło
Czy to nie tylko dostęp do dysku co 12 sekund? Zastanawiałem się nad tym, ale po dokowaniu chciałbym trochę spać.
Pete
Co pięć minut. Możesz napisać skrypt otoki, który sprawdza stan zasilania systemu.
Hauke ​​Laging
1

Reguły udev działają dobrze na zdarzeniach wtyczki, ale aby uzyskać prawidłowe zachowanie po wznowieniu zawieszenia, potrzebuję czegoś takiego /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
obrabować
źródło