Mise en veille auto des disques durs sous Linux

Un disque dur

Pour qu’un disque dur (/dev/sdX) se mette en veille de manière automatique il faut que sa configuration de gestion de l’alimentation ait une certaine valeur. Vous pouvez récupérer cette valeur avec :

$ hdparm -B /dev/sdX

Dans le cas où ce n’est pas supporté (pas de chance) :

/dev/sdX:
 APM_level      = not supported

Si c’est supporté :

/dev/sdX:
 APM_level      = 128

En regardant le manuel de hdparm (man hdparm) :

-B     Get/set  Advanced  Power  Management feature, if the drive supports it. A low value means aggressive power management and a high value means better performance.  Possible settings range from  values 1 through 127 (which permit spin-down), and values 128 through 254 (which do not permit spin-down).  The highest degree of power management is attained with a setting  of 1, and  the  highest I/O performance with a setting of 254.  A value of 255 tells hdparm to disable Advanced Power Management altogether on the drive (not all drives support disabling  it, but most do).

Comme expliqué, une valeur comprise entre 128 et 254 interdit au disque dur de s’arrêter. Une valeur de 255 désactive cette gestion avancée de l’alimentation. Une valeur inférieure à 128 permet l’arrêt de la rotation des plateaux en cas d’inactivité. Pour ne pas sacrifier les performances je vous conseille de mettre une valeur de 127 si vous pouvez vous permettre une latence de quelques secondes lors d’un accès le temps que les disques se remettent en route.

$ hdparm -B 127 /dev/sdX
/dev/sdX:
 setting Advanced Power Management level to 0x7f (127)
 APM_level      = 127

Et voilà !

Bonus : smartmontools et smartd

smartd est un démon permettant la vérification périodique de l’état smart des disques. En cas d’erreur un mail est envoyé à root.

Vous pouvez modifier la configuration de smartd avec le fichier « /etc/smartd.conf » ou « /etc/smartmontools/smartd.conf ». Vous pouvez notamment décider de ne surveiller que certains disques et de ne relever que certaines erreurs SMART en particulier.

Voyons le status de smartd :

$ systemctl status smartd
● smartd.service - Self Monitoring and Reporting Technology (SMART) Daemon
     Loaded: loaded (/usr/lib/systemd/system/smartd.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Sun 2023-04-23 07:37:55 CEST; 12h ago
       Docs: man:smartd(8)
             man:smartd.conf(5)
   Main PID: 1064 (smartd)
     Status: "Next check of 7 devices will start at 20:07:55"
      Tasks: 1 (limit: 38343)
     Memory: 4.1M
        CPU: 58ms
     CGroup: /system.slice/smartd.service
             └─1064 /usr/sbin/smartd -n -q never --capabilities=mail

avril 23 07:37:55 lan smartd[1064]: Device: /dev/sdf, type changed from 'scsi' to 'sat'
avril 23 07:37:55 lan smartd[1064]: Device: /dev/sdf [SAT], opened
avril 23 07:37:55 an smartd[1064]: Device: /dev/sdf [SAT], ST500DM002-1BD142, S/N:REDACTED, WWN:REDACTED, FW:KC48, 500 GB
avril 23 07:37:55 lan smartd[1064]: Device: /dev/sdf [SAT], found in smartd database 7.3/5417: Seagate Barracuda 7200.14 (AF)
avril 23 07:37:55 lan smartd[1064]: Device: /dev/sdf [SAT], is SMART capable. Adding to "monitor" list.
avril 23 07:37:55 lan smartd[1064]: Device: /dev/nvme0, opened
avril 23 07:37:55 lan smartd[1064]: Device: /dev/nvme0, WDC WDS500G2B0C-00PXH0, S/N:REDACTED, FW:211070WD, 500 GB
avril 23 07:37:55 lan smartd[1064]: Device: /dev/nvme0, is SMART capable. Adding to "monitor" list.
avril 23 07:37:55 lan smartd[1064]: Monitoring 6 ATA/SATA, 0 SCSI/SAS and 1 NVMe devices
avril 23 07:37:55 lan systemd[1]: Started smartd.service - Self Monitoring and Reporting Technology (SMART) Daemon.

On voit que sur ma machine 7 disques sont surveillés, 6 disques SATA et 1 disque NVMe. La ligne intéressante est « Status » en haut. Celle-ci indique que la prochaine vérification SMART démarrera à 20h07. Problème, cette vérification va redémarrer la rotation des disques, réveillant ainsi vos disques durs et va donc ruiner nos efforts précédents. Plusieurs solutions possibles : désactiver la monitoring de manière totale (systemctl disable –now smartd), partielle (avec smartd.conf) ou en allongeant les périodes de vérification de smartd. Il se trouve que dans la plupart des distributions (Debian, Fedora, …) le fichier smartd.conf est configuré avec l’option « -n standby » ce qui évite à smartd de vérifier les disques dans les états « sleep » ou « standby ». Les disques seront donc bien laissés tranquille car ils sont dans un état « standby » où les plateaux ne tournent plus mais le disque se tient prêt à démarrer.

Bonne chance ! On se retrouve dans un prochain mini tuto.