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
- Intervalle : La valeur de 5 secondes peut être ajustée selon le délai de mise en veille du boîtier. Certains boîtiers tolèrent 10 ou 15 secondes.
- Redémarrage : Le processus ne survit pas à un redémarrage du Mac. Il faut relancer la commande après chaque démarrage.
- Fermeture de session : Le processus ne survit pas à une fermeture de session. Il faut relancer la commande après chaque ouverture de session.
- Disque déconnecté : Si le disque est déconnecté, la commande génère des erreurs silencieuses (redirigées vers /dev/null) sans impact.
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 :
- Le script s'exécute mais le fichier disparaît entre deux exécutions
- Les commandes SMART sont bloquées par le boîtier USB
- L'accès au périphérique bloc (/dev/diskX) est verrouillé
- Le firmware ignore l'activité fichier et ne regarde que l'activité I/O réelle
Seule une boucle continue avec nohup maintient une activité suffisante pour tromper le firmware.
Alternatives
- Windows + WD Drive Utilities : Peut parfois désactiver le sleep timer via l'utilitaire officiel Western Digital.
- Changer de boîtier : Extraire le disque et le placer dans un boîtier USB tiers sans gestion d'énergie agressive (Sabrent, Inateck, etc.).
↑ Haut de page