Você pode colocar um script em /usr/lib/systemd/systemd-sleep
, que executa o hdparm. E você pode usar o hdparm com /dev/disk/by-uuid/
em vez de /dev/sda...
Ou tente usar /bin/sh -c "/bin/hdparm -B 200 /dev/disk/by-uuid/XY"
Eu tenho um desses hdds, que têm um gerenciamento de energia muito agressivo. Para evitar que os ciclos de carga subam para números críticos, escrevi uma regra do udev:
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="TOSHIBA MK2555GS", RUN+="/usr/bin/hdparm -B 200 /dev/%k"
O problema é que essa regra não é acionada depois que eu acordo meu notebook do modo de suspensão. Portanto, eu tenho o seguinte serviço systemd:
[Unit]
Description=root resume actions
After=suspend.target
[Service]
Type=simple
ExecStart=/bin/hdparm -B 200 /dev/sda
[Install]
WantedBy=suspend.target
Eu prefiro que o comando ExecStart
seja algo como /bin/udevadm trigger --subsystem-match="block"
. Portanto, não preciso declarar o nome do kernel explicitamente. Se eu fizer esse comando manualmente, o gerenciamento de energia será ajustado corretamente, mas não funcionará no serviço systemd.
Existe uma maneira de fazer isso? btw estou usando o arch-linux
Eu estava quase na mesma situação e gostaria de adicionar mais informações a essa pergunta devido à sua proeminência no Google por systemd udevadm trigger
e como um resumo geral de como controlar os padrões absurdos nessas campanhas.
Uma vez que percebi que minha unidade Western Digital Blue tem um absurdo paternalista, contraprodutivo, anti-SMART, sem energia ativado por padrão, acompanhei quase o mesmo processo que o OP. Desativei o recurso de firmware, mas também precisei desativar o APM e o modo de espera usando hdparm
; sem todos os 3, o desenfreado ciclo de carga continuou a enlouquecer.
A primeira diferença é que, porque meus hdparm.rules
foram configurados para invocar apenas no dispositivo add (boot), udevadm trigger
não funcionaria para mim, a menos que eu dissesse a ele qual gatilho a ser aplicado, adicionando --action=add
. Isso efetivamente simula a desconexão do HD no currículo - o que é exatamente o que eu preciso.
Mas acabei com uma confusão semelhante ao OP, incapaz de descobrir por que meu udevadm trigger
para recarregar meu hdparm rule
funcionou no terminal, mas não de um systemd service
. Parece que eu tinha diferentes razões, que eram:
service
, devemos especificar explicitamente o local do executável para ExecStart /bin/udevadm
porque os arquivos de unidade não estão cientes de $path
; systemd/user
, que pode ter sido executado como eu e, portanto, não obtive as permissões root
necessárias para /sbin/hdparm
. (Eu corro o Debian 8, mas não acredito que nada disso seja específico da distribuição).
Tags systemd udev arch-linux