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?

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

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.


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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.