¿Cómo puedo ejecutar un comando hdparm después del arranque y reanudar en Fedora 19?


10

Compré un nuevo HD (WD5000BPVT) que desafortunadamente intenta dormir cada 5-8 segundos. El ruido de clic no solo es bastante audible, sino que el tiempo de rotación de 1 segundo agrega una latencia muy notable en el uso diario.

He descubierto hdparm -B 254 /dev/sdaque deshabilitará la suspensión muy breve, pero no sé cómo aplicar esta configuración cada vez que se enciende la unidad. Las aplicaciones dconf-editory 'Preferencias de administración de energía' no hacen nada con respecto a la configuración de HD. No tengo ninguno /etc/hdparmni /etc/acpicaminos. MATE es el administrador de ventanas.

En Fedora 19, ¿cómo puedo forzar este comando para que se ejecute siempre que se active la unidad?

Respuestas:


12

Tuve el mismo problema, ninguna de las soluciones aquí satisfizo mis necesidades. El uso de cron es realmente una solución alternativa, no una solución, las reglas de udev se ejecutan cuando se conecta / desconecta la alimentación, pero no después de suspender / reanudar y pm-utilsya no se usan de manera predeterminada en Fedora 19 cuando, por ejemplo, cierra la tapa de su computadora portátil.

Como systemdahora es responsable de suspender / hibernar, creo que la única forma adecuada de manejar esta situación es crear una systemdunidad que se ejecute tanto después del arranque como después de reanudar la suspensión.

Notas:

  • Al usar en /dev/disk/by-id/...lugar de /dev/sda, siempre está seguro de obtener el disco correcto (sda, b, c depende del orden en que el núcleo los detecte)
  • Puede tener varias ExecStartlíneas para poder configurar múltiples discos

Aquí está la unidad que escribí:

[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

Guarde este archivo como /etc/systemd/system/hdsilence.servicey luego habilítelo usando:

systemctl enable hdsilence.service
systemctl daemon-reload

También funciona muy bien aquí en Fedora 20. ¡Gracias!
Jakob

Entonces, ¿esto hace que los cambios a /etc/hdparm.conf sean obsoletos?
domih

@domih: Por lo que puedo decir, hdparm.conf es una cosa de Debian y no es compatible con Fedora.
Krzysztof Adamski

6

Puede hacer que el sistema ejecute el comando durante el arranque creando su propio servicio systemd o agregando el comando a /etc/rc.d/rc.local.

Si desea que el comando se ejecute cada vez que activa el sistema después de dormir / hibernar, puede agregar un script que comience con 2 dígitos a /etc/pm/sleep.d/, mire los otros scripts en / usr / lib64 / pm-utils / sleep.d (suponiendo x86_64) para más detalles. Básicamente, toma un parámetro dependiendo de qué estado está ingresando. Es posible que también deba agregar algún inicio de sesión a power.d / en el mismo directorio principal si desea operar de manera diferente con la batería en comparación con cuando está enchufado.


1
creating your own systemd service¿Puedes ser mas específico? No tengo un archivo /etc/rc.d/rc.local.
Pete

1
La documentación de systemd explica la sintaxis de una unidad de servicio systemd. El /etc/rc.d/rc.localarchivo es solo un script de shell, créelo y asegúrese de que sea ejecutable.
jsbillings

3

Para diferentes configuraciones cuando se ejecuta con CA / batería, lo haría a través de una udevregla simple , por ejemplo
/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"

Esto establecería apmpara 254cuando el portátil está conectado y, respectivamente, 128cuando se desconecta. Además, siempre debería funcionar, incluso después de reanudar la suspensión.


1
Para aquellos que gustan de la copia literal, las versiones más recientes tienen hdparmen /usr/sbin, por lo que ajustar los caminos.
Romano

2

Tengo el mismo disco (y el mismo problema). Mi solución estúpida pero funcional: he puesto eso en /etc/crontab:

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

¿Esto simplemente no accede al disco cada 12 segundos? Pensé en algo a lo largo de esa línea, pero me gustaría un poco de sueño al desacoplarlo.
Pete

Cada cinco minutos Puede escribir un script de envoltura que verifique el estado de energía del sistema.
Hauke ​​Laging

1

Las reglas de udev funcionan bien en los eventos de conexión, pero para obtener el comportamiento correcto después de reanudar la suspensión, necesito algo como esto en /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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.