====== hdparm - Gestion disque dur ====== ===== Mise en veille avec hdparm ===== Contrôler l'état actuel du disque root@edmchome:/media# hdparm -C /dev/sda /dev/sda: drive state is: active/idle Mettre en veille le disque root@edmchome:/media# hdparm -y /dev/sda /dev/sda: issuing standby command Vérifier root@edmchome:/media# hdparm -C /dev/sda /dev/sda: drive state is: standby Un accès au disque le réveillera root@edmchome:/media# ls backup/ lost+found p2pfr.com root@edmchome:/media# hdparm -C /dev/sda /dev/sda: drive state is: active/idle root@edmchome:/media# Programmer une veille pour dans 20min hdparm -S 240 /dev/sda 240 car la valeur est un multiple de 5 sec Pour que tous ces paramètres soient actifs au redémarrage de la machine, il faut écrire dans le fichier de config **/etc/hdparm.conf** >Plus d'info sur http://doc.ubuntu-fr.org/hdparm >Man en français http://www.delafond.org/traducmanfr/man/man8/hdparm.8.html ===== Configuration ===== Ouvrez le fichier de config et rajoutez les lignes suivantes pour automatiser cette tâche au démarrage de la machine vi /etc/hdparm.conf /dev/sda { spindown_time = 120 } service hdparm restart ===== Utiliser l'ID du disque dur ===== Si vous voulez être certain qu'au redémarrage de la machine cette config s'applique au bon disque dur, utilisé l'id plutôt que le chemin standard. Tapez la commande ls -l /dev/disk/by-id/ total 0 lrwxrwxrwx 1 root root 9 janv. 1 1970 ata-ST3120022A_3JT2JDW8 -> ../../sda lrwxrwxrwx 1 root root 10 janv. 1 1970 ata-ST3120022A_3JT2JDW8-part1 -> ../../sda1 lrwxrwxrwx 1 root root 13 janv. 1 1970 memstick-SD02G_0xa9baae34 -> ../../mmcblk0 lrwxrwxrwx 1 root root 15 janv. 1 1970 memstick-SD02G_0xa9baae34-part1 -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 15 juin 20 07:17 memstick-SD02G_0xa9baae34-part2 -> ../../mmcblk0p2 lrwxrwxrwx 1 root root 9 janv. 1 1970 scsi-SST3120022A_J32TDJ8W -> ../../sda lrwxrwxrwx 1 root root 10 janv. 1 1970 scsi-SST3120022A_J32TDJ8W-part1 -> ../../sda1 Dans mon cas, je remplacerai /dev/sda par /dev/disk/by-id/ata-ST3120022A_3JT2JDW8 ===== Particularité ===== J'ai pu remarquer que sur certain disque, la commande de mise en veille fonctionne mais la commande de timeout ne fonctionne pas. Il y a aurai apparemment un timeout minimum sur certain disque. * 10min pour les disques de 1To **hdparm -S 60 /dev/...** * 20min pour les disques de 2To **hdparm -S 120 /dev/...** ===== Si ça ne marche pas ===== Dans mon cas, le disque se met bien en veille lorsque je lance la commande de mise en veille mais rien ne se passe avec la commande de timeout. J'ai donc créé un petit script qui détecte l'activité du disque et lance la commande à notre place au bout d'un temps défini. Repérez votre le nom de votre disque [root]# blkid /dev/mmcblk0p1: SEC_TYPE="msdos" UUID="C522-EA52" TYPE="vfat" /dev/mmcblk0p2: UUID="62ba9ec9-47d9-4421-aaee-71dd6c0f3707" TYPE="ext4" /dev/sda1: UUID="489f7c23-38e0-442f-abaa-10c569e48b0d" UUID_SUB="51e04e91-847f-4158-aeaf-4b9d3ab057b6" TYPE="btrfs" [root]# ls -l /dev/disk/by-uuid total 0 lrwxrwxrwx 1 root root 9 oct. 1 17:05 336ec491-71d3-4a7b-8a1c-9f3ec44a9ef7 -> ../../sda lrwxrwxrwx 1 root root 10 oct. 1 17:05 489f7c23-38e0-442f-abaa-10c569e48b0d -> ../../sda1 lrwxrwxrwx 1 root root 15 oct. 1 17:04 62ba9ec9-47d9-4421-aaee-71dd6c0f3707 -> ../../mmcblk0p2 lrwxrwxrwx 1 root root 15 janv. 1 1970 C522-EA52 -> ../../mmcblk0p1 [root@edmchome:~]# readlink -f /dev/disk/by-uuid/489f7c23-38e0-442f-abaa-10c569e48b0d /dev/sda1 Maintenant que vous avez trouvé votre uuid, vous pouvez renseigner le script suivant. #!/bin/bash ############################################################################## # sd-standby # permet de mettre en standby un disque dur après une durée défini en seconde # fait par edmc73 le 23-09-2014 ############################################################################## # définissez le device (hda, hdb, sda, sda1, sdb...) DEV=`readlink -f /dev/disk/by-uuid/89f7c23-38e0-442f-abaa-10c569e48b0d | cut -d/ -f3` # définissez le temps en seconde après lequel le disque doit se mettre en standby TIMEOUT=600 ############################################################################## # Main STATS=`cat /proc/diskstats | grep " $DEV "` # Boucle while true; do sleep $TIMEOUT NEWSTATS=`cat /proc/diskstats | grep " $DEV "` if [[ $STATS == $NEWSTATS ]] then #Aucune activité hdparm -y /dev/$DEV else #Activité sur le disque STATS=$NEWSTATS fi done Copiez ce fichier, ajoutez les permissions d'exécution chmod +x hd-standby Pensez à ajuster les 2 premières variables >DEV : le disque à traiter sda, sdb, hda, hdb etc.. >TIMEOUT : le temps en seconde avant déclenchement de la mise en veille Lancez le script en tache de fond ./hd-standby & __Amélioration prévu__ * Lancer le script comme un service * Pouvoir renseigner un disk via son id