Come posso eseguire un comando hdparm dopo l'avvio e riprendere su Fedora 19?


10

Ho comprato un nuovo HD (WD5000BPVT) che sfortunatamente cerca di dormire ogni 5-8 secondi. Non solo il rumore del clic è abbastanza udibile, ma il tempo di rotazione di 1 secondo aggiunge una latenza molto evidente nell'uso quotidiano.

Ho scoperto hdparm -B 254 /dev/sdache disabiliterà la sospensione molto breve ma non so come applicare questa impostazione ogni volta che l'unità viene accesa. Le dconf-editorapp e le "Preferenze di risparmio energia" non fanno nulla per quanto riguarda le impostazioni HD. Non ho alcuno /etc/hdparmo /etc/acpipercorsi. MATE è il gestore delle finestre.

Su Fedora 19, come posso forzare l'esecuzione di questo comando ogni volta che l'unità viene attivata?

Risposte:


12

Ho avuto lo stesso problema, nessuna delle soluzioni qui soddisfaceva le mie esigenze. L'uso di cron è davvero una soluzione alternativa, non una soluzione, le regole udev vengono eseguite quando l'alimentazione è collegata / disconnessa ma non dopo la sospensione / ripresa e pm-utilsnon vengono più utilizzate di default in Fedora 19 quando, ad esempio, si chiude il coperchio del laptop.

Poiché systemdora è responsabile della sospensione / ibernazione, penso che l'unico modo corretto per gestire questa situazione sia creare systemdun'unità che verrà eseguita sia dopo l'avvio sia dopo aver ripreso dalla sospensione.

Appunti:

  • Usando /dev/disk/by-id/...invece di /dev/sda, si è sempre sicuri di ottenere il disco giusto (sda, b, c dipende dall'ordine in cui vengono rilevati dal kernel)
  • Puoi avere più ExecStartlinee in modo da poter configurare più dischi

Ecco l'unità che ho scritto:

[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

Salvare questo file come /etc/systemd/system/hdsilence.servicee quindi abilitarlo utilizzando:

systemctl enable hdsilence.service
systemctl daemon-reload

Funziona alla grande anche qui su Fedora 20. Grazie!
Jakob,

Quindi questo rende obsolete le modifiche a /etc/hdparm.conf?
domih

@domih: Per quanto ne so, hdparm.conf è una cosa Debian e non è supportata su Fedora.
Krzysztof Adamski il

6

È possibile fare in modo che il sistema esegua il comando durante l'avvio creando il proprio servizio systemd o aggiungendo il comando a /etc/rc.d/rc.local.

Se vuoi che il comando venga eseguito ogni volta che riattivi il sistema dopo sleep / ibernazione, puoi aggiungere uno script che inizia con 2 cifre in /etc/pm/sleep.d/, guarda gli altri script in / usr / lib64 / pm-utils / sleep.d (presupponendo x86_64) per maggiori dettagli. Fondamentalmente, accetta un parametro a seconda dello stato in cui sta entrando. Potrebbe anche essere necessario aggiungere alcuni accessi a power.d / nella stessa directory principale se si desidera operare in modo diverso con la batteria rispetto a quando è collegato.


1
creating your own systemd servicePuò essere più preciso? Non ho un file /etc/rc.d/rc.local.
Pete,

1
La documentazione di systemd spiega la sintassi di un'unità di servizio di systemd. Il /etc/rc.d/rc.localfile è solo uno script di shell, crealo e assicurati che sia eseguibile.
jsbillings,

3

Per impostazioni diverse quando si utilizza AC / batteria, lo farei tramite una semplice udevregola, ad esempio
/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"

Questo sarebbe impostato apmsu 254quando il laptop è collegato e rispettivamente 128quando è scollegato. Inoltre, dovrebbe sempre funzionare, anche dopo aver ripreso dalla sospensione.


1
Per coloro che come la copia pari pari, nuove versioni sono hdparmin /usr/sbin, in modo da regolare i percorsi.
Roman

2

Ho lo stesso disco (e lo stesso problema). La mia soluzione stupida ma funzionante: l'ho inserita in /etc/crontab:

-*/5  * * * *   root  hdparm -B 254 /dev/sda

Questo non accede semplicemente all'unità ogni 12 secondi? Ho considerato qualcosa del genere, ma mi piacerebbe un po 'di sonno quando non sganciato.
Pete,

Ogni cinque minuti È possibile scrivere uno script wrapper che controlla lo stato di alimentazione del sistema.
Hauke ​​Laging,

1

Le regole udev funzionano bene sugli eventi plug, ma per ottenere il comportamento corretto dopo aver ripreso dalla sospensione ho bisogno di qualcosa del genere in /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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.