Comment puis-je contrôler le temps de rotation du disque dur?

71

J'ai 2 disques durs sur mon PC. Ubuntu éteint très rapidement le disque dur secondaire après environ 15 minutes, ce qui est court pour moi. J'ai besoin de contrôler ce moment. Comment puis-je le faire?

J'ai essayé la gestion de l'alimentation GNOME mais je ne l'ai pas trouvé utile.

utilisateur16295
la source

Réponses:

67

Regarde hdparm.

À partir du manuel ( man hdparmsur la ligne de commande):

-S Définit le délai d'attente pour le lecteur. Cette valeur est utilisée par le lecteur pour déterminer le délai d'attente (sans activité du disque) avant d'éteindre le moteur de broche afin d'économiser de l'énergie. Dans ce cas, le lecteur peut prendre jusqu'à 30 secondes pour répondre à un accès ultérieur au disque, bien que la plupart des lecteurs soient beaucoup plus rapides.

Le codage de la valeur de délai d'attente est un peu particulier. Une valeur de zéro signifie que "les délais d'attente sont désactivés": l'appareil ne passera pas automatiquement en mode veille. Les valeurs comprises entre 1 et 240 spécifient des multiples de 5 secondes, générant des délais d'attente de 5 secondes à 20 minutes. Les valeurs de 241 à 251 spécifient de 1 à 11 unités de 30 minutes, avec des délais d'attente de 30 minutes à 5,5 heures. Une valeur de 252 signifie un délai d'attente de 21 minutes. Une valeur de 253 définit un délai d'expiration défini par le fournisseur compris entre 8 et 12 heures, et la valeur 254 est réservée. 255 est interprété comme 21 minutes plus 15 secondes. Notez que certains lecteurs plus anciens peuvent avoir des interprétations très différentes de ces valeurs.

Ainsi sudo hdparm -I /dev/sdb | grep levelva montrer la valeur actuelle de spindown, par exemple:

Advanced power management level: 254

D'après le manuel: 254 est réservé, donc je suppose qu'il s'agira du réglage par défaut d'Ubuntu (quelqu'un peut-il confirmer / développer ceci s'il vous plaît?)

Exemple:

sudo hdparm -S 25 /dev/sdb = spindown après 25 * 5 secondes.

sudo hdparm -S 245 /dev/sdb = visible après (245-240) * 30 minutes.

Rinzwind
la source
merci Rinzwind pour les astuces, cela m’a beaucoup aidé, mais j’aimerais voir cela dans la prochaine version d’ubuntu ou il pourrait être intégré à gnome power manager
user16295
4
En ce qui concerne la réponse de lzap, vous semblez vouloir grepAPM ( -Bparm) mais parlez de -Sla confusion. Savez-vous aussi quelque chose sur APM?
turbo
3
Le -Bréglage actuel est indiqué comme indiqué ci-dessus. Comment puis-je voir le -Sréglage actuel ?
SabreWolfy
5
sudo hdparm -y /dev/sdbtue la bête immédiatement
siamii
1
@SabreWolfy J'ai posé cette question séparément: comment puis-je connaître le temps de
ændrük
46

Utilitaire de disque -> sélectionnez un disque dur -> cliquez sur l'icône "Plus d'actions ..." dans le coin supérieur droit -> Paramètres du lecteur ...

Le mien est comme ça: capture d'écran

Rayon
la source
6
Le plus facile de loin, merci! (Au fait, le paquet que vous devez installer si vous ne le possédez pas gnome-disk-utility.
Gerhard Burger
chemin à parcourir linux! +1
neu-rah
Oui, extrêmement facile - content que ce soit ici.
Zzzach ...
@ Ray, monsieur, sont géniaux! Je n'avais fondamentalement aucun espoir que cela fonctionnerait pour un disque dur externe, mais cela a fonctionné!
UTF-8
1
Pourquoi la plupart des astuces impliquent l’édition de fichiers ou les opérations de console sujettes aux erreurs, alors que des outils conviviaux comme celui-ci existent déjà!
WooYek
30

Si vous êtes intéressé à faire le paramètre de hdparm persistant entre les redémarrages, au lieu de l'ajouter à la crontab, vous pouvez utiliser le fichier /etc/hdparm.conf. J'ai le suivant, notez l'utilisation de majuscule S, pas de minuscule:

command_line {
    hdparm -S 25 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215 
}

Ajoutez cette ligne en remplaçant l'UUID par la vôtre, ou vous pouvez également spécifier le périphérique en utilisant le /dev/sdXformat. Vous pouvez trouver l'UUID de votre disque avec la commande sudo blkid.

sergio.hs84
la source
3
Est-il correct d'utiliser de command_linenos jours? J'ai différents exemples dans mon /etc/hdparm?
Dims
1
La réponse d'Ondra Žižka semble être plus à jour.
Raphael
9
  1. Trouvez l'UUID de votre disque .

    sudo lsblk --output NAME,FSTYPE,LABEL,UUID,MODE
    
  2. Modifier /etc/hdparm.conf

    sudo -H gedit /etc/hdparm.conf  # Be careful from now on
    
  3. Recherchez spindown-timeou votre section de paramètres de disque.

    /dev/disk/by-label/4TB {
        spindown_time = 1200
    }
    
  4. Je préfère faire référence au disque par un UUID qui reste le même pour différentes installations (à moins que vous ne le changiez dans le HW lui-même).

    /dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
        spindown_time = 1200
    }
    
  5. Si le script init pose des problèmes de démarrage, vous pouvez passer nohdparm sur la ligne de commande du noyau et le script ne sera pas exécuté.

Ondra Žižka
la source
Quelles sont les unités pour ce paramètre?
Détly
IIRC, c'est quelques secondes. Ou peut-être est-ce le paramètre qui comportait des règles génériques telles que "s'il est inférieur à 10, alors ses dizaines de secondes, s'il est inférieur à 100, alors il s'agit de minutes", et ainsi de suite. J'aurais besoin de trouver.
Ondra Žižka Le
2
Ce n'est pas des unités, vérifiez ceci: wiki.archlinux.org/index.php/Hdparm
Ondra Žižka
Des cris de joie, pour une raison quelconque , je ne pouvais pas le trouver dans man hdparm.conf.
Détly
man hdparm.conflit indirectement que la valeur est passée à -Sdonc pour des valeurs <255 devrait être compatible avec la règle dans la réponse du haut . Toute information supplémentaire est la bienvenue.
dma_k
8

Après avoir passé des heures et des heures, j'ai découvert que mon lecteur WDC ne prend pas en charge la commande hdparm -S, quelle que soit la valeur de l'attribut idle3 (google: idle3ctl). Et c'est un problème commun avec les disques WD. Mais je suis heureux d’annoncer que hd-idle ( http://hd-idle.sourceforge.net/ ) fonctionne parfaitement. S'il est installé à partir d'un paquetage construit par dpkg (voir Notes d'installation), il crée un démon à la fois sur Ubuntu et Debian (la configuration est dans / etc / default / hd-idle). Fonctionne bien après la reprise de l'hibernation.

mc default # ps aux | grep hd-idle | grep -v grep | coupe -c 66-; pour f dans [ad]; faire hdparm -C / dev / sd $ f | grep -v "^ $"; terminé
/ usr / sbin / hd-idle -i 1800 -a sdc -i 600 -a sdd -i 60 -l /var/log/hd-idle.log
/ dev / sda:
 l'état du lecteur est: actif / inactif
/ dev / sdb:
 l'état du lecteur est: en veille
/ dev / sdc:
 l'état du lecteur est: en veille
/ dev / sdd:
 l'état du lecteur est: en veille

utilisateur306935
la source
Pour obtenir des instructions sur l’installation, reportez-vous à la section Définition de la durée de spindown du disque dur SATA pour les disques Western Digital Green
KrisWebDev,
5

J'ai découvert que le comportement spécifique de Samsung HD204UI dépend du niveau APM ( hdparm -B). Si le niveau APM est égal à 127, le délai d’apparition est de 10 s. Si le niveau APM est 150, le délai d'expiration est défini par l' -Soption.

Beroal
la source
hdparm peut définir mais ne pas obtenir l’ -Soption (voir Comment déterminer la durée de rotation du disque ). Pour l'obtenir, utilisez le logiciel d'interface graphique "Disk". Voir l' autre réponse avec la capture d'écran.
KrisWebDev
5

J'ajoute quelque chose comme:

@reboot sudo hdparm -S244 /dev/disk/by-uuid/71492809-e463-41fa-99e2-c09e9ca90c8e  > /dev/null 2> /dev/null

root crontab. Utiliser uuid est préférable, car sda/ sdbetc semble changer à chaque redémarrage

vidar uslingsen
la source
10
Pourquoi ne pas utiliser hdparm.conf?
ændrük
3

Dans Ubuntu 14.04

Disques> mettre en surbrillance le lecteur> cliquez sur l'engrenage dans le coin supérieur droit> Paramètres du lecteur> vous disposez maintenant des paramètres Veille, APM, AAM et Cache en écriture dans une interface graphique conviviale!

utilisateur245219
la source
Comment faites-vous ce travail? Je l'ai défini, et après le redémarrage, si je retourne, il s'est rappelé que le lecteur devrait s'éteindre, mais il ne le fait jamais. hdparm -C montre toujours qu'il est actif et que le fait d'exécuter hdparm -S xxx à partir de la ligne de commande permet de le faire fonctionner.
dan carter
1
Où trouvez-vous "Disks"?
nealmcb
1

Sur Debian, avec les lecteurs WD, je trouve que si vous définissez un niveau avec hdparm -S, le lecteur renvoie un niveau 254 lors de la prochaine utilisation de hdparm -I . Donc, je ne suis vraiment pas sûr si elles sont en train de tourner ou non. Je pense qu'ils sont encore en train de tourner.

Ces disques se trouvent sur un groupe de serveurs et je ne veux vraiment pas qu’ils cessent de fonctionner. Dans le passé, j’avais déjà fait cela en configurant un travail cron pour mettre à jour un fichier toutes les quelques minutes.

Dwasifar
la source
1

Je n'ai pas eu de chance avec hdparm sur un disque dur externe monté dans un boîtier USB, que j'utilise pour servir les médias avec minidlna.

Je suis tombé sur une idée d'ici: https://serverfault.com/questions/562738/keeping-usb-backup-drive-from-sleeping-while-mounted

Les meilleurs résultats proviennent de l'utilisation de l'uuid du disque, que vous pouvez trouver avec:

sudo blkid

La méthode suivante nécessite un accès root, mais hdparm aussi. Cela utilise crontab pour lire un bloc aléatoire du lecteur toutes les 5 minutes et ignore tous les messages. Pour vous assurer que vous avez le bon UUID, testez-le sur la ligne de commande comme ceci (assurez-vous d'utiliser votre UUID souhaité, pas celui-ci):

sudo dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM

Vous devriez voir la sortie comme ceci:

1+0 records in
1+0 records out
512 bytes copied, 0.000738308 s, 693 kB/s`

Pour supprimer ce message, qui pourrait éventuellement finir par être écrit quelque part, potentiellement le système de fichiers / (qui se trouve sur un disque SSD dans mon cas), voici ce que j'utilise dans la crontab racine. Vous y arrivez avec

sudo crontab -e

Puis, sous les commentaires:

*/5 * * * * bash -c 'dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM' >/dev/null 2>&1

J'espère que cela aide quelqu'un d'autre avec des problèmes similaires. Malheureusement, cela reste écrit dans le syslog, mais il existe potentiellement des moyens de le supprimer. voir cette publication ServerFault .

[modifier] 2017-01-07 09:02:

J'ai pu supprimer ces messages en modifiant /etc/rsyslog.d/50-default.conf pour changer cette ligne:

*.*;auth,authpriv.none -/var/log/syslog

pour ça:

*.*;cron,auth,authpriv.none -/var/log/syslog

Malheureusement, cela supprime tous les messages cron; Je ne pouvais pas obtenir que cron redirige la journalisation à partir du système de fichiers racine (qui est sur un disque SSD vieillissant, donc je veux limiter les écritures), mais comme il ne s'agit que d'un serveur domestique, je ne manque probablement pas grand-chose. Ne recommanderais certainement pas cette stratégie pour une machine de production.

LawyerOnLinux
la source