Hdparm (Français)
hdparm et sdparm sont des utilitaires en ligne de commande pour définir et visualiser les paramètres matériels des Disque Dur. hdparm peut également être utilisé comme un simple outil de benchmarking.
A l'origine, hdparm a été créé pour les disques IDE et sdparm pour les disques SCSI. Comme les interfaces des périphériques de stockage depuis 2010 environ sont un mélange amélioré d'IDE et de SCSI, hdparm et sdparm se complètent.
Installation
Installez le paquet hdparm. Pour une utilisation avec des périphériques SCSI, installez le paquet sdparm.
Utilisation
Informations sur le disque
Pour obtenir des informations sur les disques durs, exécutez ce qui suit :
# hdparm -I /dev/sda
Benchmarking
hdparm peut être utilisé pour du Benchmarking#hdparm.
Configuration de la gestion de l'alimentation
Les disques durs modernes prennent en charge de nombreuses fonctions de gestion de l'alimentation, les plus courantes sont résumées dans le tableau suivant. Consultez hdparm(8) pour la liste complète.
Paramètre | Description |
---|---|
-B |
Définit la fonction Advanced Power Management. Les valeurs possibles sont comprises entre 1 et 255, les valeurs faibles signifiant une gestion de l'énergie plus agressive et les valeurs élevées une meilleure performance. Les valeurs de 1 à 127 autorisent le spin-down, tandis que les valeurs de 128 à 254 ne le permettent pas. Une valeur de 255 désactive complètement la fonction. |
-S |
Définissez le délai d'attente en mode veille (spin down) pour le disque. Ce délai spécifie le temps d'attente en mode veille (sans activité du disque) avant de couper le moteur pour économiser de l'énergie. La valeur 0 désactive le spindown, les valeurs de 1 à 240 spécifient des multiples de 5 secondes et les valeurs de 241 à 251 des multiples de 30 minutes. |
-M |
Définit la fonction Automatic Acoustic Management. La plupart des disques durs modernes ont la capacité d'accélérer les mouvements de la tête afin de réduire leur niveau de bruit. La valeur possible dépend du disque, certains disques peuvent ne pas prendre en charge cette fonctionnalité. |
-B
et -S
, les valeurs APM inférieures à 128 peuvent provoquer l'arrêt du disque avant la valeur de timeout -S
. Consultez [1].Pour demander la valeur actuelle, passez le paramètre sans valeur. Par exemple :
# hdparm -B /dev/sda
Pour appliquer une valeur différente, par exemple définir APM à 127 :
# hdparm -B 127 /dev/sda
Cache en écriture
La mise en cache en écriture est le processus de mise en cache temporaire des fichiers dans la mémoire intégrée du disque avant de les écrire sur le disque, ce qui constitue essentiellement une amélioration des performances. La mise en cache en écriture est une fonctionnalité fournie par la plupart des disques durs, et elle est activée par défaut dans la plupart des cas. Pour vérifier si c'est le cas, exécutez :
$ hdparm -W /dev/sdX
S'il est désactivé, on peut l'activer avec :
$ hdparm -W 1 /dev/sdX.
À l'inverse, pour le désactiver, on peut utiliser :
$ hdparm -W 0 /dev/sdX
Mettre hors tension un disque dur
Un cas d'utilisation typique, où une telle fonctionnalité est recherchée, est celui des disques connectés à un boîtier externe USB/SATA/FireWire bon marché, ou à un concentrateur. S'il n'émet pas correctement une commande d'arrêt au disque lors de la mise hors tension, le disque est forcé d'effectuer un retrait d'urgence de la tête. Si vous faites cela régulièrement, tôt ou tard, le disque sera cassé. Une solution consiste, une fois que l'on est sûr que les données ont été écrites sur le support, à exécuter une commande pour éteindre le lecteur :
# hdparm -Y /dev/sdX
- Les données ont bien été écrites sur le support. Il est également conseillé d'attendre un certain temps pour que le lecteur devienne inactif.
- Le périphérique,
/dev/sdX
dans l'exemple, est celui que vous voulez éteindre.
Trucs et astuces
Interroger l'état du disque sans le réveiller
L'invocation de hdparm avec l'option query est connue pour réveiller certains disques. Dans ce cas, considérez smartctl
fourni par smartmontools pour interroger le périphérique qui ne réveillera pas un disque endormi. Par exemple :
# smartctl -i -n standby /dev/sda
smartctl 6.5 2016-05-07 r4318 [x86_64-linux-4.10.13-1-ARCH] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org Device is in STANDBY mode, exit(2)
Configuration persistante à l'aide de la règle udev
Pour que la configuration soit persistante après un redémarrage, on peut utiliser une règle udev :
/etc/udev/rules.d/69-hdparm.rules
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda", RUN+="/usr/bin/hdparm -B 254 -S 0 /dev/sda"
Étant donné qu'un disque peut être attribué de manière aléatoire à un /dev/sdX
en tant que périphérique, le disque peut également être identifié par son numéro de série comme expliqué dans Udev (Français)#Identifier un disque par son numéro de série.
Les systèmes dotés de plusieurs disques durs peuvent appliquer la règle de manière flexible en fonction de certains critères. Par exemple, pour appliquer les paramètres d'économie d'énergie à tous les disques rotatifs (disque dur avec tête rotative, excluant en particulier les solid state drives), utilisez la règle suivante :
/etc/udev/rules.d/69-hdparm.rules
ACTION=="add|change", KERNEL=="sd[a-z]", ATTRS{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 /dev/%k"
Ré-application de la configuration après le réveil
Si la configuration est perdue après une suspension/hibernation du système, elle peut être réappliquée en utilisant systemd-sleep.
Placez un script dans /usr/lib/systemd/system-sleep
et rendez-le exécutable :
/usr/lib/systemd/system-sleep/hdparm
#!/bin/sh case $1 in post) /usr/bin/hdparm -B 254 -S 0 /dev/sda ; ; esac
Mise en veille d'un lecteur directement après le démarrage
Un périphérique qui est rarement utilisé peut être mis en veille directement à la fin du processus de démarrage. Cela ne fonctionne pas avec la règle udev ci-dessus car cela se produit trop tôt. Pour lancer la commande lorsque le démarrage est terminé, il suffit de créer un service systemd puis activez-le :
/etc/systemd/system/hdparm.service
[Unit] Description=hdparm sleep [Service] Type=oneshot ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sdb [Install] WantedBy=multi-user.target
Utilisation de matériel non pris en charge
Certains disques ne prennent pas en charge l'extinction via hdparm. Un message d'erreur de diagnostic similaire au suivant est une bonne indication que c'est le cas :
# hdparm -S 240 /dev/sda
/dev/sda: setting standby to 240 (20 minutes) HDIO_DRIVE_CMD(setidle) failed: Invalid argument
Pour certains autres disques, la commande hdparm est reconnue mais le disque ne respecte pas les paramètres (soit APM ou spin down timer). Ceci a été observé avec un disque dur Toshiba P300 (modèle HDWD120).
De tels disques peuvent être mis hors tension en utilisant hd-idleAUR qui est fourni avec un service systemd (Français). Éditez /etc/conf.d/hd-idle
et la valeur HD_IDLE_OPTS
, puis démarrez et activez hd-idle.service
.
Exemple utilisant un temps d'inactivité de 10 min pour /dev/sda
et un temps d'inactivité de 1 min pour /dev/disk/by-uuid/01CF0AC9AA5EAF70
:
HD_IDLE_OPTS="-i 0 -a /dev/sda -i 600 -a /dev/disk/by-uuid/01CF0AC9AA5EAF70 -i 60"
le paramètre de départ -i 0
indique que la fonction hd-idle est désactivée sur les autres disques.
Gestion de l'alimentation pour les disques Western Digital Green
Les disques durs Western Digital Green ont une minuterie spéciale idle3 qui contrôle le temps d'attente du disque avant de positionner ses têtes dans leur position de parking et d'entrer dans un état de faible consommation d'énergie. Le réglage d'usine par défaut est agressivement fixé à 8 secondes, ce qui peut entraîner des milliers de cycles de chargement/déchargement des têtes en un court laps de temps et éventuellement une défaillance prématurée, sans parler de l'impact sur les performances du disque qui doit souvent se réveiller avant d'effectuer des E/S de routine. Western Digital a publié une information, affirmant que Linux n'est pas optimisé pour les périphériques de stockage à faible consommation et conseillant de réduire la fréquence d'enregistrement. Il existe différentes façons de modifier l'état idle3 :
- Western Digital fournit un utilitaire DOS wdidle3.exe à télécharger permettant de modifier ce paramètre. Cet utilitaire est conçu pour mettre à jour uniquement le firmware des disques durs suivants : WD1000FYPS, WD7500AYPS, WD7501AYPS mais il est connu pour être capable de modifier la minuterie idle3 d'autres modèles Green également.
- hdparm propose une implémentation de rétro-ingénierie derrière le paramètre
-J
, qui n'est pas aussi complète que le programme officiel original, même si elle semble fonctionner sur au moins quelques disques. Un réglage de 30 secondes est recommandé pour une utilisation sous Linux. Spécifiez une valeur de zéro (0) pour désactiver complètement la minuterie idle3 de WD ('non recommandé):# hdparm -J 30 --please-destroy-my-drive /dev/sda
Consultez #Configuration persistante à l'aide de la règle udev pour utiliser automatiquement ce paramètre sur les disques durs pris en charge. - Un autre utilitaire non officiel est fourni par le paquet idle3-tools. Une valeur brute
idle3
est passée en paramètre de la commande idle3ctl. La correspondance entre cette valeur et le délai d'attente en secondes est fournie dans le tableau inférieur de idle3ctl(8). La commande suivante définit le temporisateur à 30 secondes:# idle3ctl -s 129 /dev/sdc
La commande suivante désactive complètement le timer (non recommandé):# idle3ctl -d /dev/sdc
- Un cycle d'alimentation complet est nécessaire pour que tout changement prenne effet, quel que soit le programme ci-dessus utilisé. Cela signifie que le disque doit être mis hors tension puis sous tension, un simple redémarrage ne suffit pas.
- Certains disques Western Digital Green sont également connus pour avoir une interprétation différente du paramètre de délai de mise en veille de hparm,
-S 1
, ce qui entraîne un délai de 10 minutes au lieu de 5 secondes. - La consommation d'énergie d'un disque Green est généralement d'environ 5,3 W en lecture/écriture, 4,7 W en mode veille et 0,7 W en mode veille.
Dépannage
Réinitialisation du niveau APM après la suspension
Le niveau APM peut être réinitialisé après une suspension, ce qui nécessite de le réexécuter après chaque reprise. Ceci peut être automatisé avec l'unité systemd suivante (adaptée d'un fil du forum) :
/etc/systemd/system/apm.service
[Unit] Description=Local system resume actions After=suspend.target hybrid-sleep.target hibernate.target [Service] Type=simple ExecStart=/usr/bin/hdparm -B 254 /dev/sda [Install] WantedBy=sleep.target
sleep.target
est requise par toutes les cibles suspend
, hybrid-sleep
et hibernate
, mais elle termine le démarrage avant que le système soit suspendu, donc les trois cibles doivent être spécifiées explicitement. Consultez [2].Vous pouvez également créer un hook dans /usr/lib/systemd/system-sleep.
Consulter aussi
- https://sourceforge.net/projects/hdparm/ - hdparm sur SourceForge