Comment puis-je exécuter une commande hdparm après le démarrage et reprendre sur Fedora 19?


10

J'ai acheté un nouveau HD (WD5000BPVT) qui essaie malheureusement de dormir toutes les 5-8 secondes. Non seulement le bruit de cliquetis est assez audible, mais le temps de rotation de 1 seconde ajoute une latence très perceptible dans l'utilisation quotidienne.

J'ai trouvé que hdparm -B 254 /dev/sdacela désactivera le sommeil très court, mais je ne sais pas comment appliquer ce paramètre à chaque mise sous tension du lecteur. Les applications dconf-editoret les «Préférences de gestion de l'alimentation» ne font rien en ce qui concerne les paramètres HD. Je n'en ai /etc/hdparmni /etc/acpi. MATE est le gestionnaire de fenêtres.

Sur Fedora 19, comment puis-je forcer l'exécution de cette commande chaque fois que le lecteur est activé?

Réponses:


12

J'ai eu le même problème, aucune des solutions ici ne convenait à mes besoins. L'utilisation de cron est vraiment une solution de contournement, pas une solution, les règles udev sont exécutées lorsque l'alimentation est connectée / déconnectée mais pas après la suspension / la reprise et pm-utilsne sont plus utilisées par défaut dans Fedora 19 lorsque vous fermez par exemple le couvercle de votre ordinateur portable.

Étant donné qu'il systemdest désormais responsable de la suspension / de l'hibernation, je pense que la seule façon appropriée de gérer cette situation est de créer une systemdunité qui fonctionnera à la fois après le démarrage et après la reprise de la suspension.

Remarques:

  • En utilisant /dev/disk/by-id/...au lieu de /dev/sda, vous êtes toujours sûr d'obtenir le bon disque (sda, b, c dépend de l'ordre dans lequel ils sont détectés par le noyau)
  • Vous pouvez avoir plusieurs ExecStartlignes pour configurer plusieurs disques

Voici l'unité que j'ai écrite:

[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

Enregistrez ce fichier sous /etc/systemd/system/hdsilence.service, puis activez-le en utilisant:

systemctl enable hdsilence.service
systemctl daemon-reload

Fonctionne très bien ici sur Fedora 20 également. Je vous remercie!
— Jakob

Ainsi, les modifications apportées à /etc/hdparm.conf sont obsolètes?
— domih

@domih: Pour autant que je sache, le hdparm.conf est une chose Debian et il n'est pas pris en charge sur Fedora.
— Krzysztof Adamski

6

Vous pouvez demander au système d'exécuter la commande lors du démarrage en créant votre propre service systemd ou en ajoutant la commande à /etc/rc.d/rc.local.

Si vous souhaitez que la commande s'exécute à chaque fois que vous réveillez le système après la mise en veille / veille prolongée, vous pouvez ajouter un script commençant par 2 chiffres dans /etc/pm/sleep.d/, consultez les autres scripts dans / usr / lib64 / pm-utils / sleep.d (en supposant x86_64) pour plus de détails. Fondamentalement, il prend un paramètre en fonction de l'état dans lequel il entre. Vous devrez peut-être également ajouter une connexion à power.d / dans le même répertoire parent si vous souhaitez fonctionner différemment sur batterie par rapport à la connexion.


1
creating your own systemd servicePeux-tu être plus précis? Je n'ai pas de fichier /etc/rc.d/rc.local.
— Pete

1
La documentation systemd explique la syntaxe d'une unité de service systemd. Le /etc/rc.d/rc.localfichier n'est qu'un script shell, créez-le et assurez-vous de son exécutable.
— jsbillings

3

Pour différents paramètres lors de l'exécution sur AC / batterie, je le ferais via une udevrègle simple , par exemple
/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"

Cela mis apmà 254quand l'ordinateur portable est branché et respectivement 128lorsqu'il est débranché. En outre, cela devrait toujours fonctionner, même après la reprise de la suspension.


1
Pour ceux qui aiment la copie mot pour mot, les nouvelles versions ont hdparmen /usr/sbin, de sorte que les chemins régler.
— Roman

2

J'ai le même disque (et le même problème). Ma solution stupide mais fonctionnelle: je l'ai mise dans /etc/crontab:

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

Cela n'accède-t-il pas simplement au lecteur toutes les 12 secondes? J'ai envisagé quelque chose dans ce sens, mais j'aimerais un peu de sommeil quand je suis désamarré.
— Pete

Toutes les cinq minutes. Vous pouvez écrire un script wrapper qui vérifie l'état d'alimentation du système.
— Hauke ​​Laging

1

Les règles udev fonctionnent bien sur les événements de plug, mais pour obtenir le comportement correct après la reprise de la suspension, j'ai besoin de quelque chose comme ceci dans /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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.