Table des matières

, , , , ,

Parcage des têtes de lecture et gestion d'énergie : disques durs en danger ?

Le problème de parcage des têtes de lecture a été partiellement corrigé dans Ubuntu (toutes versions) grâce à la mise à jour du 15 janvier 2009 (FIXME source?). La correction complète arrivera bientôt (FIXME source?). Maintenant (FIXME source?), le parcage est effectué à une fréquence normale, plus ou moins élevée selon que l'ordinateur soit sur batterie ou sur secteur, selon l'utilisation intensive ou non…

Par contre on peut remarquer que la température du disque monte de 10°C pour certains modèles de l'ordinateur comme les Toshiba Satellites (FIXME source?).

Vous trouverez ici une proposition récente pour régler ce problème avec les disques WD. Ce post du forum peut également vous être utile.

Description

Il y a eu d'importantes discussions (cf section "Voir aussi" en bas de page) concernant certaines distributions Linux, y compris Ubuntu, au sujet de la défaillance des disques durs des ordinateurs portables. Dans certaines conditions, le disque dur se place de manière très – trop… – régulière en mode « tête parquée » (plusieurs fois par minute), ce qui conduit à une usure prématurée de la mécanique du disque. La durée de vie s'en trouve parfois réduite à moins d'un an.

Ce sont certaines combinaisons de tous ces paramètres qui conduisent parfois à une mauvaise gestion du parcage de la tête du disque. Sont concernés :

Pour votre information, surtout les débutants :

Nous allons voir par la suite comment détecter ce problème et y remédier de différentes manières.

Les rumeurs et le danger réel

Certains sites font état de rumeurs concernant ce problème. Vu l'activité engendrée par cette affaire sur de nombreux sites, dont le site launchpad on peut être sûr que ce n'est pas seulement une rumeur, mais un risque matériel et aussi un risque fort de perdre vos données personnelles si vous ne vous occupez pas de ce problème dans les semaines qui suivent.

Ce n'est pas parce que vous n'êtes pas concernés par votre configuration matérielle que ce problème n'existe pas. Les circonstances exactes de ce défaut de fonctionnement ne sont pour l'instant pas précisément connues. Afin de cerner le problème, il serait intéressant d'écrire des scripts de supervision des valeurs considérées et de les insérer sur un site communautaire en base de données avec la configuration matérielle et logicielle.

Détection du problème

La détection du problème repose sur la lecture d'informations inscrites dans une zone mémoire non volatile embarquée sur le disque dur. Ces informations sont gérées de manière autonome par le disque qui répond aux spécifications du standard SMART. C'est la commande smartctl du paquet smartmontools qui permet d'extraire ces informations.

Préparation

Afin de lire ces informations, commencez par installer le paquet smartmontools.

Vérification

Ensuite, vérifiez si vous pouvez accéder aux informations SMART sur notre disque dur :

sudo smartctl -a /dev/sda  # ou sdb, si vous avez un disque dur de type SATA (récent)
sudo smartctl -a /dev/hda  # ou hdb, si vous avez un disque dur de type PATA (plus ancien)

Il est possible de trouver de manière automatique l'emplacement du périphérique contenant la partition racine de la manière suivante :

device=$(mount | sed -n '/\/ /s/[0-9].*//p')
sudo smartctl -a $device

Si ces dernières commandes semblent ne pas fonctionner, sachez que les principales sources d'erreur lors d'une telle manipulation sont :

Il est donc possible de simplement copier coller la ligne suivante dans un terminal pour obtenir le résultat :

sudo smartctl -a $(mount | sed -n '/\/ /s/[0-9].*//p') | grep 'Cycle\|Power'

voici un exemple de ce qu'on peut apercevoir quand on lance cette commande :

sudo smartctl -a $(mount | sed -n '/\/ /s/[0-9].*//p') | grep 'Cycle\|Power'
  9 Power_On_Hours          0x0012   100   100   000    Old_age   Always       -       345
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       249
193 Load_Cycle_Count        0x0012   094   094   000    Old_age   Always       -       62251

dans ce cas :

Cause des erreurs de lecture :

Si vous n'avez accès à aucune de ces informations:

Dans certains cas, il se peut que la commande précédente vous retourne quelques informations sans qu'il y ait trace des variables "techniques" de votre disque. Si vous apercevez ceci (et uniquement dans ce cas)

SMART support is: Available - device has SMART capability.
SMART support is: Disabled

Vous pouvez lancer la commande suivante pour activer l'enregistrement des paramètres (non persistant en cas de redémarrage):

sudo smartctl -a $(mount | sed -n '/\/ /s/[0-9].*//p') -s on

Vous pouvez maintenant reprendre ce tutoriel en tapant

sudo smartctl -a $(mount | sed -n '/\/ /s/[0-9].*//p') | grep 'Cycle\|Power'

Diagnostic

Si les commandes précédentes ont bien fonctionné, vous devriez obtenir, dans votre terminal, toute une série d'informations. La valeur qui nous intéresse en particulier est intitulée Load_Cycle_Count (LCC = nombre de parcages). Si pour un ordinateur fixe, cette valeur devrait être en théorie assez proche du nombre d'extinctions, donnée par le Power_Cycle_Count, il n'en va pas de même pour un portable. Le rapport entre ces deux valeurs pour le disque dur d'un portable dépend de la fréquence des arrêts et des redémarrages de l'ordinateur (c'est à dire de la durée des sessions). Il est bien sûr plus important pour un ordinateur fonctionnant 24h/24 ou presque… et ce n'est pas un problème en soi.

Il arrive que les données smart ne comportent aucune ligne "Load_Cycle_Count" : le fabriquant du disque dur n'a pas prévu l'enregistrement de cette valeur. S'il s'agit du disque dur d'un portable, c'est dommage : dans ce cas, vous ne pouvez établir de diagnostic.
Dans quelques rares cas, les données Smart de durée de fonctionnement (Power_On_Hours - Minutes ou Seconds) sont aberrantes… Dans ces cas, une autre méthode de diagnostic est disponible… (voir plus bas).
Les données smart : Dans la colonne "type", les indications "Old_age" et "Pre_fail" inquiètent beaucoup de monde. Mais ces mentions indiquent seulement le type de données fournies, et ne sont pas des alertes.

Les données de type "Old_age" indiquent l'usure normale liée au vieillissement du disque dur… c'est le cas par exemple du nombre de démarrages/arrêts du pc (Start_Stop_Count). Ce sont des indications de durée de vie validées par le contructeur. Elles ne signifient pas toujours grand chose : un disque peut lacher avant d'être "vieux" ou tenir encore pas mal de temps en étant "agé". Ce ne sont que des données indicatives qui permettent d'évaluer s'il faut prévoir de remplacer le disque.

Les données de type "Pre_fail" sont des indications pouvant laisser suspecter une usure anormale ou une panne… au-delà de certaines valeurs. Elles indiquent des problèmes sur le fonctionnement normal du disque. C'est le cas par exemple du nombre de secteurs réalloués (Reallocated_Sector_Ct). Ce sont les valeurs "Pre_fail" qui déclenchent des alertes smart.

Ceci étant dit, la colonne "type" indiquant seulement le type de données, les mentions "Pre_fail" et "Old_age" apparaissent dans cette colonne même sur un disque dur neuf. Une alerte est signifiée par la mention "FAILING_NOW" . Enfin, beaucoup de disques lâchent sans que smart ne relève quoi que ce soit, par contre un disque où smart détecte des problèmes ne dure en général pas longtemps.

Pour ceux qui disposent d'une donnée "Power_On_Hours" (Minutes ou Seconds), une autre comparaison est instructive : tant que les valeurs "VALUE" de "Power On Hours" et "Load Cycle Count" restent proches, a priori c'est que tout est en règle. Dans les cas à problèmes, le "VALUE" de Load_cycle_Count est très supérieur à celui de "Power_On_Hours". Ceci est logique : si le disque parque trop les têtes par rapport à sa durée de fonctionnement, il y a une usure prématurée donc des valeurs avec un écart important. Quand tout va bien, les valeurs d'usures (colonne "VALUE") doivent rester proches.

Si le diagnostic de votre disque dur montre que vous êtes touché par le problème, PAS DE PANIQUE, nous allons maintenant régler le problème pour ralentir la fréquence du parcage des têtes (et donc la réduction des LCC).

Correction du problème

La manière la plus simple de régler le problème est de changer la valeur d'un paramètre.

FIXME Ces paragraphes sont anciens, vérifier qu'ils ne sont pas obsolètes, et indiquez sur quelle version d'Ubuntu et quel matériel ils ont fonctionné.

Hdparm

Cette solution a été proposée sur http://bugs.debian.org/. Elle permet de changer les paramètres de gestion de l'alimentation du disque dur, ce qui évite le parcage intempestif de la tête de lecture.

Nous allons donc modifier un paramètre du module hdparm grâce à cette ligne de commande.

sudo hdparm -B 254 /dev/hda

ou

sudo hdparm -B 254 /dev/sda

faites attention à cette différence.

Si vous trouvez que la température de votre disque dur est trop élevée, baissez la valeur du paramètre à une valeur permettant à votre disque dur de ne pas trop chauffer, mais pas trop pour éviter le parcage intempestif de votre tête de lecture.(note: pour mon disque dur j'ai mis une valeur de 200)
extrait manpages hdparm : -B modifie les paramètres de gestion d'énergie APM (Advanced Power Management), si le disque le supporte. Une petite valeur spécifie une gestion d'énergie agressive, tandis qu'une valeur élevée configure le disque pour de meilleures performances. La valeur 255 (maximale) désactive la gestion APM du disque.)
Il est possible de consulter la valeur utilisé par votre système en utilisant :
sudo hdparm -B /dev/sda

Pour en vérifier le bon fonctionnement, tapez à différents intervalles de temps, cette ligne de commande.

sudo smartctl -a $(mount | sed -n '/\/ /s/[0-9].*//p') | grep 'Cycle\|Power'

Le nombre au bout de la ligne Load_Cycle_Count ne devrait plus bouger. (Ce nombre est fixe lorsque j'utilise mon ordinateur)

Si après un redémarrage, le problème réapparait, il existe une petite solution.

Source : launchpad

Créez le fichier 99-hdd-spin-fix.sh ( ne pas modifier le nom de fichier ) et mettez-y :

Pensez à modifier le chiffre en fonction de la chaleur que pourrait dégager votre disque dur. Le chemin du disque dur peut-être soit, /dev/hda soit, /dev/sda. Si l'un des deux ne fonctionne pas, essayez l'autre.
#!/bin/sh
hdparm -B 254 /dev/hda

Enfin, copiez le fichier créé dans les 3 emplacements suivants:

sudo install 99-hdd-spin-fix.sh /etc/acpi/start.d/
sudo install 99-hdd-spin-fix.sh /etc/acpi/suspend.d/
sudo install 99-hdd-spin-fix.sh /etc/acpi/resume.d/

Le fix en 10 secondes

Nouvelle méthode

Ne fonctionne pas sous Ubuntu 14.04.

Pour que le fix fonctionne dans tous les cas (également lors d'une mise en veille), il est préférable d'utiliser cette commande :

cmd='hdparm -B 254 /dev/sda';sudo $cmd && echo -e '#!/bin/sh\n'"$cmd" > /tmp/hdfix && sudo install /tmp/hdfix /etc/pm/power.d/99-hdparm.sh && sudo install /tmp/hdfix /etc/pm/sleep.d/99-hdparm.sh

Pour supprimer les effets de cette méthode :

sudo rm /etc/pm/power.d/99-hdparm.sh /etc/pm/sleep.d/99-hdparm.sh

Ancienne méthode

Cette méthode fonctionne, sauf lors d'une mise en veille. Préférez la nouvelle méthode qui prend en compte ce cas également.

sudo hdparm -B 254 /dev/sda && echo -e '#!/bin/sh\nhdparm -B 254 /dev/sda' > /tmp/99-hdd-spin-fix.sh && for i in start suspend resume; do sudo install /tmp/99-hdd-spin-fix.sh /etc/acpi/$i.d; done

Pour supprimer les effets de cette ancienne méthode :

sudo rm /etc/acpi/*.d/99-hdd-spin-fix.sh

Autres solutions

Une autre manière pour résoudre ce problème est d'utiliser les outils que nous avons à disposition pour régler les fonctions de gestion d'énergie des disques dur. Un paquet est spécialement conçu dans ce but, il s'agit du laptop-mode-tools. Par défaut, le laptop-mode est relativement agressif, mais les réglages sont entièrement paramétrables pour obtenir le résultat que vous souhaitez.

Dans ce fichier vous pourrez gérer le délais d'inactivité avant le parcage des têtes du dique dur, mais également beaucoup d'autres paramètres.

Pour améliorer encore la durée de vie du disque, il est aussi possible d'aller plus loin. En effet, par défaut, un système linux accède très fréquemment au HDD (les systèmes de fichiers journalisés, les logs des différents process et du système, etc.). Il convient donc de s'assurer que le système limitera le nombre d'accès au disque pour ne pas le réveiller inutilement.

Installer le laptop-mode

Tout d'abord, installons le paquet laptop-mode-tools.

Pour qu'il soit activé, modifions le fichier /etc/default/acpi-support. La ligne

ENABLE_LAPTOP_MODE=false

doit être changée en

ENABLE_LAPTOP_MODE=true

Pour vérifier (au prochain redémarrage) que le laptop-mode est actif, exécutons

cat /proc/sys/vm/laptop_mode

Si la valeur retournée est 0, laptop-mode ne fonctionne pas. Si la valeur est différente de 0, alors laptop-mode est en fonction. (faire le test avec le pc sur batterie!)

Pour démarrer le laptop-mode sans redémarrer le PC :

sudo /etc/init.d/laptop-mode start

Configurer le laptop-mode

Avant de commencer à modifier le fichier, il est bon d'en faire une sauvegarde :

cd /etc/laptop-mode/
sudo cp laptop-mode.conf laptop-mode.conf.`date +%Y%m%d-%H%M%S`

Le fichier /etc/laptop-mode/laptop-mode.conf contient toute la configuration de laptop-mode. Il est relativement clair et est séparé en différentes sections distinctes. Pour l'éditer :

gksudo gedit /etc/laptop-mode/laptop-mode.conf

Jetons d'abord un coup d'oeil aux valeurs suivantes:

ENABLE_LAPTOP_MODE_ON_BATTERY=1
ENABLE_LAPTOP_MODE_ON_AC=0 #ou 1 (lire ci-dessous)
ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED=0 #ou 1 (lire ci-dessous)

Comme leurs noms l'indique, ces variables permettent d'activer (ou non) le laptop-mode quand l'ordinateur fonctionne respectivement sur batterie, sur secteur ou quand le couvercle est fermé. Un 1 signifie l'activation de cette option, un 0 signifie sa désactivation.

Il faut que vous testiez votre disque pour vérifier si le Load_Cycle_count varie fortement (plus de 5 par quart d'heure) seulement sur batterie, auquel cas il suffit d'activer le laptop-mode sur batterie. Dans le cas contraire, activer le laptop-mode sur secteur et avec le couvercle fermé, selon les cas, peut s'avérer nécessaire.
LM_BATT_MAX_LOST_WORK_SECONDS=1200
LM_AC_MAX_LOST_WORK_SECONDS=360

Ces deux dernières valeurs permettent de déterminer à quel moment au minimum un redémarrage du disque doit avoir lieu, sur batterie et sur secteur respectivement. La valeur est à indiquer en secondes. Avec une valeur à 1200 en mode batterie (comme indiqué au dessus) le disque redémarrera au bout de 20 minutes d'inactivité (même si rien ne l'y oblige) de manière à écrire les petites modifications qui ont été mémorisées mais pas encore appliquées.

CONTROL_HD_IDLE_TIMEOUT=1  

Il est très important que cette valeur soit activée (égale à 1). Ce paramètre autorise le laptop-mode à gérer la fréquence de parcage des têtes.

LM_AC_HD_IDLE_TIMEOUT_SECONDS=20 #durée d'inactivité (en secondes) avant parcage des têtes sur secteur avec le laptop-mode actif
LM_BATT_HD_IDLE_TIMEOUT_SECONDS=60 #durée d'inactivité (en secondes) avant parcage des têtes sur batterie avec le laptop-mode actif
NOLM_HD_IDLE_TIMEOUT_SECONDS=1200 #durée d'inactivité (en secondes) avant parcage des têtes lorsque laptop-mode se désactive

C'est avec ces valeurs qu'il faut jouer si vous voulez simplement désactiver le parcage des têtes. Mettez tout à 1200 (soit 20 minutes d'inactivité avant l'arrêt du HDD) si vous voulez vous assurer que le disque ne s'arrêtera quasiment jamais ; ça n'est évidemment pas bon pour la gestion d'énergie, mais il s'agit parfois de la seule solution efficace. Testez différentes valeurs et choisissez-en une qui convient à votre machine!

CONTROL_HD_WRITECACHE=1 #permet d'autoriser la gestion du cache du HDD par LM
NOLM_AC_HD_WRITECACHE=1 #force l'utilisation du cache du HDD lorsque LM se désactive et que le pc est sur secteur
NOLM_BATT_HD_WRITECACHE=0 #stoppe l'utilisation du cache du HDD lorsque LM se désactive et que le pc est sur batterie
LM_HD_WRITECACHE=1 #force l'utilisation du cache du HDD lorsque LM est actif, cela limite le réveil du hdd en travaillant dans son cache plutôt que directement en dur

Pour limiter les accès au HDD du système de fichier (pour un système de fichier ext3) :

Le système ext3 accède, par défaut, au disque dur toutes les 5 secondes pour mettre à jour certaines données de journalisation dont on peut, la plupart du temps, se passer (certains rares logiciels comme MUTT par exemple ont toutefois besoin de cette journalisation pour fonctionner). Pour désactiver cette journalisation trop régulière qui réveillera votre disque à longueur de temps, il faut monter les partitions ext3 avec l'option noatime. Ceci peut être fait en activant l'option :

CONTROL_NOATIME=1

Si tout cela ne change rien (ou pas assez), vous pouvez aussi modifier les options du power-management, dont la fameuse option hdparm :

#
# Should laptop mode tools control the hard drive power management settings?
#
CONTROL_HD_POWERMGMT=1

#
# Power management for HD (hdparm -B values)
#
BATT_HD_POWERMGMT=0 # testez des valeur entre 120 et 190 ici
LM_AC_HD_POWERMGMT=255 # mettez 254 ici pour avoir un nombre de parquage minimal tout en laissant la gestion d'énergie activée
NOLM_AC_HD_POWERMGMT=255 # vous pouvez mettre 254 ici aussi

Limiter les accès au HDD du système de log

Syslog gère la création et le remplissage des fichiers /var/log. Par défaut, linux logge énormément de choses, ce qui provoque aussi des accès disque permanents, qui empêchent votre HDD de rester arrêté longtemps. Pour régler le problème, laptop-mode propose un outil qui va reconfigurer syslog.

Utilisez le script

sudo lm-syslog-setup

Cela va créer 3 nouveau fichiers de configuration de syslog placés dans /etc:

syslog-on-battery.conf , syslog-on-ac-with-lm.conf, et syslog-on-ac-without-lm.conf

qui sont normalement automatiquement configurés correctement.

Il faut ensuite paramétrer laptop-mode pour utiliser et activer ces 3 fichiers selon que l'on soit sur batterie ou sur secteur. pour cela, retour dans /etc/laptop-mode/laptop-mode.conf.

On vérifie que CONTROL_SYSLOG_CONF=1.

Dernière optimisation

Certains démons peuvent également acceder au HDD de manière régulière. Laptop-mode-tools contient un script capable de détecter ces processus, de les lister et de créer une configuration qui les coupe et les redémarre automatiquement selon que l'on soit sur batterie ou sur secteur. Pour le lancer :

sudo lm-profiler

Le script va lire l'activité de votre pc pendant 10 minutes et vous proposera ensuite tout une liste de modifications qu'il préconise. Certaine modifications seront de forte recommandations (qu'il vaut mieux accepter) d'autre ne seront que de simple possibilités (à vous de choisir). Une fois les choix validés, ce script rajoutera des scripts supplémentaires dans /etc/laptop-mode/start ou stop qui arrêteront et démarreront ces daemons automatiquement.

La création de certains de ces script est assez longue (plus de 3 ou 4 minutes pour certains), donc assurez vous de ne pas arrêter lm-profiler avant qu'il ait réellement fini tout son travail de configuration.

Liens

Sur le forum

Sur Launchpad

Divers

Discussions

Houch, mon disque dur est monté a 65°C au repos alors qu'il ne doit pas depasser les 55° d'apres les constructeurs. comment se fait-i-il qêue pour le meme nombre de parcage, ça ne depasse pas les 50 sous windows? On ne peux pas faire en sorte que sous linux, des que le disque n'est plus solicité, il met sa tete pres de la piste de parquage (alimentation de la bobine minimal) au lieu de le laisser sur en position la plis eloignée que la position parquée (conso maxi, perte effet joule maxi). avant de le parquer?
maintenant il existe des clés usb dont la capacitée va jusqu'a 64Gio, donc on peut installer ubuntu sur ces medias, et avec les peripheries flash, on n'a plus de problemes mecaniques que sont les parcages.
À la lecture de ce qui a été récemment posté sur launchpad par Canonical, peut-être devrions-nous changer entièrement cette doc?
non, il y a des cas ou les valeurs remontées par SMART sont fausses, dans ce cas, il faut les ignorer ou changer le pilote SMART ; dans le cas général, il semble que ce que nous avons indiqué ici est plutôt une bonne synthèse / marc31
Pour info, mon smartctl indique "751 234" parcages de tête pour 9300 heures de fonctionnement, avec laptop-mode désactivé. Le chiffre augmente régulièrement quelle que soit la config. Le disque a 1 an et demi et il ne présente aucun signe de faiblesse jusque là. Donc ces chiffres ne veulent souvent pas dire grand chose. (BohwaZ)
que veut dire "(voir infra)" tout en haut de page ? marc31
"voir infra", ça signifie "voir plus bas dans le texte". "Voir supra", c'est le contraire! /fde
« cf. infra » ou « cf. supra » conviendrait mieux, non ? — Ner0lph Le 24/11/2007, à 19:15
sur la liste de discussion, nous ne sommes pas tous d'accords concernant cette page …
ok pour la page, on laisse comme ça tant qu'on a pas plus de nouvelles /fde
Je suis plutôt d'accord avec la proposition de Matthias Hawran (jahwork) de faire de cette page un tutoriel "tutoriel/gestion_energie_et_parcage_des_tetes_de_lecture", et de garder la page sur laptop-mode pour les explications de bases sur le laptop-mode (même si ça risque fortement de recouper cette page-ci). /fde
Il ne faut pas dupliquer l'info. On garde tout ce qui concerne laptop-mode sur la dite page, avec une section "gerer le parcage intempestif…" et la section "laptop-mode" de la page tutoriel pointe seulement sur cette section. /jahwork

FAQ

  1. le problème ne touche que les portables — Vrai, ou en tout cas, il ne touche que les HDD de portable (personne n'a confirmé ou infirmé que les HDD de portable dans un boitier externe sont touchés ou pas).

Note d'un visiteur: Il semble que mon disque dur externe (de portable) soit touché sur mon portable et sur mon fixe.

  1. Le problème n'existe que si on a activé laptop-mode — Faux ; Il y a une confusion entre le fait que laptop-mode, par défaut, défini un réglage agréssif de la gestion du hdd sur batterie et ce "bug" qui n'a rien a voir avec laptop-mode mais avec une combinaison bios/firmware /os malheureuse.
  2. Gutsy ne présente pas ce problème — Faux, mais il semble que certaines personnes qui avaient ce bug avant Gutsy ne l'aient plus avec une Gutsy à jour (pourquoi? j'en sais rien).
  3. Seul ubuntu et debian sont touchés – Faux, et Windows (2000 en tout cas) l'est aussi – [Edit de Thibault : mon windows vista aussi sur un dell inspiron 1525 !]. Windows 7 également (sur Dell latitude e5410).
  4. Le problème n'existe que sur batterie – Faux. Selon les portables/configuration, le problème peut exister que sur batterie ou sur secteur aussi, la majorité des cas semble montrer que les personnes touchées le sont sur batterie et sur secteur.

Contributeurs : marc31, fde, teke, Sorbus, xXKirastarotHXx , Malizor. Merci à DiCiCat, fournisseur quasi-exclusif des solutions proposées ici.