Como posso executar um comando hdparm após a inicialização e continuar no Fedora 19?

10

Comprei um novo HD (WD5000BPVT) que infelizmente tenta dormir a cada 5-8 segundos. Não apenas o ruído do clique é bastante audível, o tempo de rotação de 1 segundo adiciona latência muito perceptível no uso diário.

Eu descobri hdparm -B 254 /dev/sdaque desativará o sono muito curto, mas não sei como aplicar essa configuração toda vez que a unidade for ligada. Os dconf-editoraplicativos e 'Preferências de gerenciamento de energia' não fazem nada em relação às configurações de HD. Eu não tenho qualquer /etc/hdparmou /etc/acpicaminhos. MATE é o gerenciador de janelas.

No Fedora 19, como posso forçar esse comando a executar sempre que a unidade é ativada?

Pete
fonte

Respostas:

12

Eu tive o mesmo problema, nenhuma das soluções aqui atendeu às minhas necessidades. Usar o cron é realmente uma solução alternativa, não uma solução, as regras do udev são executadas quando a energia é conectada / desconectada, mas não após a suspensão / retomada e pm-utilsnão são mais usadas por padrão no Fedora 19 quando você, por exemplo, fecha a tampa do seu laptop.

Como systemdagora é responsável por suspender / hibernar, acho que a única maneira adequada de lidar com essa situação é criar uma systemdunidade que será executada após a inicialização e depois de retomar a suspensão.

Notas:

  • Ao usar em /dev/disk/by-id/...vez de /dev/sda, você sempre terá o disco certo (sda, b, c depende da ordem em que são detectados pelo kernel)
  • Você pode ter várias ExecStartlinhas para configurar vários discos

Aqui está a unidade que escrevi:

[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

Salve este arquivo como /etc/systemd/system/hdsilence.servicee, em seguida, habilite-o usando:

systemctl enable hdsilence.service
systemctl daemon-reload
Krzysztof Adamski
fonte
Também funciona muito bem aqui no Fedora 20. Obrigado!
Jakob
Portanto, isso torna obsoletas as alterações no /etc/hdparm.conf?
18718 Domih
@domih: Até onde eu sei, o hdparm.conf é uma coisa do Debian e não é suportada no Fedora.
precisa
6

Você pode fazer com que o sistema execute o comando durante a inicialização, criando seu próprio serviço systemd ou adicionando o comando ao /etc/rc.d/rc.local.

Se você deseja que o comando seja executado sempre que ativar o sistema após suspensão / hibernação, você pode adicionar um script que comece com 2 dígitos a /etc/pm/sleep.d/, veja os outros scripts em / usr / lib64 / pm-utils / sleep.d (assumindo x86_64) para obter mais detalhes. Basicamente, é necessário um parâmetro, dependendo do estado em que está entrando. Também pode ser necessário adicionar algum login ao power.d / no mesmo diretório pai, se você deseja operar de maneira diferente com a energia da bateria, em comparação com quando conectado.

jsbillings
fonte
1
creating your own systemd servicevocê pode ser mais específico? Não tenho um arquivo /etc/rc.d/rc.local.
Pete
1
A documentação do systemd explica a sintaxe de uma unidade de serviço do systemd. O /etc/rc.d/rc.localarquivo é apenas um script de shell, crie-o e verifique se é executável.
Jsbillings
3

Para configurações diferentes ao executar com AC / bateria, eu faria isso através de uma udevregra simples , por exemplo
/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"

Este seria definido apmpara 254quando o laptop está conectado e, respectivamente, 128quando desconectado. Além disso, ele sempre deve funcionar, mesmo após o retorno da suspensão.

don_crissti
fonte
1
Para quem gosta de copiar literalmente, versões mais recentes têm hdparmna /usr/sbin, então ajustar os caminhos.
Roman
2

Eu tenho o mesmo disco (e o mesmo problema). Minha solução estúpida, mas funcional: coloquei isso em /etc/crontab:

-*/5  * * * *   root  hdparm -B 254 /dev/sda
Hauke ​​Laging
fonte
Isso simplesmente não acessa a unidade a cada 12 segundos? Eu considerei algo nessa linha, mas eu meio que gostaria de dormir um pouco quando desencaixado.
Pete
A cada cinco minutos. Você pode escrever um script de wrapper que verifique o estado de energia do sistema.
Hauke ​​Laging
1

As regras do udev funcionam bem em eventos de plug-in, mas para obter o comportamento correto após o resumo da suspensão, preciso de algo como /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
roubar
fonte