Empêcher un HDD externe de se mettre en veille sur macOS

Le problème

Lorsqu'un disque dur externe USB n'est pas sollicité pendant quelques minutes, il peut s'arrêter de tourner automatiquement. Ce comportement est souvent géré par le firmware du boîtier USB lui-même, indépendamment des réglages de macOS.

C'est notamment le cas des boîtiers Western Digital Elements dont le firmware impose une mise en veille impossible à désactiver côté système.

Le problème : le disque s'arrête puis redémarre quelques secondes après, provoquant des cycles spin-down/spin-up répétés qui usent prématurément le mécanisme.


Vérification des réglages macOS

Avant toute chose, vérifier que macOS n'impose pas de mise en veille des disques :

pmset -g | grep disksleep

Si la valeur est différente de 0, la modifier :

sudo pmset -a disksleep 0

(Si le disque continue de se mettre en veille malgré ce réglage, c'est que le boîtier USB gère lui-même la mise en veille)


Solution : solliciter le disque périodiquement

La solution consiste à exécuter une boucle en arrière-plan qui écrit et supprime un fichier sur le disque toutes les 5 secondes, forçant ainsi une activité régulière.

Lancer le processus

Remplacer NomDuDisque par le nom exact du volume :

nohup bash -c 'while true; do touch /Volumes/NomDuDisque/.keepawake && rm /Volumes/NomDuDisque/.keepawake; sleep 5; done' > /dev/null 2>&1 &

Le Terminal peut ensuite être fermé, le processus continue en arrière-plan.

Arrêter le processus

pkill -f "touch /Volumes/NomDuDisque/.keepawake"

Vérifier que le processus tourne

pgrep -f "touch /Volumes/NomDuDisque/.keepawake"

(Si un numéro de processus s'affiche, le processus est actif)


Remarques


Pourquoi les LaunchAgents ne fonctionnent pas

Les solutions basées sur LaunchAgent ou LaunchDaemon avec un script exécuté périodiquement ne fonctionnent pas avec certains boîtiers (notamment WD Elements) car :

Seule une boucle continue avec nohup maintient une activité suffisante pour tromper le firmware.


Alternatives



↑ Haut de page