Table des matières

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

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.

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.

sd-standby
#!/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