web-dev-qa-db-fra.com

Mettre les disques durs en veille après X minutes d'utilisation de hdparm ne fonctionne pas

J'utilise Ubuntu 12.04 sur un serveur domestique. Il y a 5 disques durs: un SSD avec le système d'exploitation et 4 disques durs (Samsung HD204UI) configurés en RAID5 à l'aide de mdadm.

Je n'ai pas besoin du RAID très souvent (environ une fois par jour en moyenne); il contient des données multimédias et des sauvegardes. J'ai donc décidé de mettre les lecteurs en veille la plupart du temps.

J'ai configuré les lecteurs pour qu'ils s'éteignent automatiquement après 20 minutes avec hdparm, ici /dev/sda à titre d'exemple:

hdparm -S 240 /dev/sda

La sortie de la commande a confirmé ceci:

/dev/sdb:
 setting standby to 240 (20 minutes)

Mais le problème est que le lecteur ralentit au bout de 5 secondes environ (au lieu de 20 minutes) après le dernier accès.

hdparm -C /dev/sdb

affiche:

/dev/sdb:
 drive state is:  standby

Pourquoi le lecteur n'attend-il pas les 20 minutes configurées? Cela a-t-il quelque chose à voir avec la configuration RAID? (Je ne pense pas ...)

Ce délai très court est problématique car il s’agit d’un RAID5 et lorsque j’accède à un fichier, il se propage en blocs autour des quatre disques. Comme le lecteur 1 n'est pas nécessaire lors de la lecture du lecteur 2, il s'est endormi lors de sa prochaine utilisation (après la lecture du lecteur 3). Ainsi, les disques continuent à monter et descendre tout le temps, ce qui donne un débit proche de zéro.

Pour les personnes qui s’inquiètent de la vie de mes disques: Ce n’est pas grave si les disques sont tourbillonnés une fois par jour en moyenne, car je préfère économiser de l’énergie et de la chaleur par rapport à leur santé (j’utilise RAID5 et le contenu pas très important).

9
leemes

AHCI est-il activé dans votre BIOS? Sinon, essayez de l'allumer et de réessayer.

Si cela ne fonctionne toujours pas, vous devrez peut-être essayer quelque chose d'un peu plus compliqué, car hdparm ne fonctionne pas toujours bien avec les disques SATA, ce que je suppose que vous avez.

Découvrez cette page pour la solution relativement simple suivante qui utilise crontab:

Sudo apt-get install sg3-utils
crontab -e

Maintenant, ajoutez ceci au bas de votre crontab (remplacez sdx par le lecteur que vous souhaitez mettre en veille):

0-59/15 * * * * ( if [ ! -f /dev/shm/1 ] ; then touch /dev/shm/1 /dev/shm/2; fi ; mv /dev/shm/1 /dev/shm/2; cat /proc/diskstats > /dev/shm/1 ) >/dev/null 2>&1
0-59/15 * * * * ( export HD="sdx "; if [ "$(diff /dev/shm/1 /dev/shm/2 | grep $HD )" =  "" ] ; then /usr/bin/sg_start --stop /dev/$HD; fi ) >/dev/null 2>&1

Bien sûr, avant de tenter quoi que ce soit, il est fortement recommandé d'effectuer une sauvegarde complète du contenu de vos disques durs.

8
SirCharlo

Peut-être qu'un meilleur moyen pourrait être:

hdparm -B 1 -Y/dev/device
hdparm -B 255/dev/device

Le premier hdparm met immédiatement l'appareil en veille. Le second désactive APM, de sorte que le disque reste en mode veille jusqu'au prochain accès au disque.

1
mat