lundi 14 juin 2010

Contrôle du vieillissement prématuré des disques dur des portables


A la différence des PC Fixes, les disque durs utilisés sur les ordinateurs portables doivent répondre à 2 critères importants :
  • Préserver le plus possible l'autonomie de la batterie
  • Résister aux chocs en cours d'utilisation
Ces disques utilisent la technologie SMART et sont capables d'activer le parcage des têtes de lecture quand il n'y a pas de lecture/écriture à faire permettant ainsi de prolonger l'autonomie de la batterie et également de protéger le disque contre d'éventuels chocs.

Le parcage de têtes étant une opération mécanique, entraine une usure du disque et un mauvais réglage peut entrainer le vieillissement prématuré du disque et la perte de vos données. Sur certains portables, le parcage se fait entendre par un petit "clac", sur d'autres le parcage est inaudible.

L'inconvénient est que certains systèmes privilégient l'autonomie de la batterie au détriment de la durée de vie du disque dur. Le nombre de fois qu'une tête peut être parquée et déparquée est variable selon le modèle de disque, les constructeurs de disques durs donnent des durées de vie qui oscillent entre 300000 et 600000 cycles.

Sur de nombreux modèles d'ordinateur portable, une gestion d'énergie agressive peut imposer au disque dur des seuils d'arrêts/parcage trop fréquents.
Ces seuils sont gérés par le firmware du disque et selon les modèles il est possible (ou pas) d'optimiser les réglages à l'aide de l'utilitaire "hdparm", tout dépends du constructeur.

Certains sites conseillent la désactivation complète du parcage à l'aide de la commande hdparm (commande "hdparm -B 254" ou "hdparm -B 255"). Ils ne savent pas que ce type de réglage peut engendrer de pire conséquences :
  • Les têtes du disque ne seront jamais (ou presque jamais) parquées, que l'ordinateur portable soit sur secteur ou batterie. Ce qui veut dire qu'en cas de choc, les têtes pourraient toucher les pistes du disque dur et les endommager.
  • Sans parcages de têtes, le disque dur ne s'arrête pas et reste donc en fonctionnement constant : la température de certains disques peut augmenter de 10°C ou plus que lors d'un fonctionnement avec parcages nombreux. En dessus de 45° le disque souffre
  • Comme les têtes ne sont plus parquées (même sur batterie), c'est l'autonomie du PC qui en est réduite (votre disque dur durera plus longtemps mais votre batterie se déchargera plus vite)
La commande "smartctl" (en tant que root) permet d'obtenir des informations intéressantes sur le disque et son utilisation. Pour utiliser cette commande, il faut avoir le paquet "smartmontools" installé.

Grâce à cet utilitaire, 3 informations essentielles vont vous permettre d'évaluer si le parcage des têtes est trop important :
  • 9 : Power_On_Hours : C'est la durée cumulée en heure de fonctionnement de ce disque depuis sa toute première utilisation (normalement depuis l'achat du portable ou du remplacement du disque).
  • 193 : Load_Cycle_Count (LCC) : C'est le nombre total de fois ou le parcage des têtes a été activé (depuis sa toute première utilisation aussi)
  • 194 Temperature_Celsius : C'est la température actuelle du disque dur
smartctl affichant de nombreuses informations, voici la commande permettant l'affichage uniquement de ces 3 valeurs (à faire avec les droits root) :

smartctl -a /dev/sda|grep "\(Load_Cycle_Count\|Power_On_Hours\|Temperature_Celsius\)"

Il suffit de faire le calcul Power_On_Hours/Load_Cycle_Count pour obtenir le nombre moyen de LCC par heures depuis la toute première utilisation du disque dur.

Exemple pour mon portable :
[root@localhost ~]# smartctl -a /dev/sda|grep "\(Load_Cycle_Count\|Power_On_Hours\|Temperature_Celsius\)"
9 Power_On_Hours          0x0032   096   096   000    Old_age   Always       -       3640
193 Load_Cycle_Count        0x0032   073   073   000    Old_age   Always       -       55940
194 Temperature_Celsius     0x0022   040   049   000    Old_age   Always       -       40 (0 8 0 0)
[root@localhost ~]#

En résumé :
  • 3640 heures de fonctionnement
  • 55940 parcages de têtes
  • Température de 40°
55940/3640 donne un LCC moyen de 15,36

Un rapide calcul de cette moyenne me permet d'estimer pour mon disque plus de 39 000 heures de fonctionnement en se basant sur les 600.000 parcages moyens des disques. Je pourrais donc même optimiser mes réglages pour préserver un peu plus mon autonomie de batterie tout en m'assurant que la température du disque n'augmente pas trop.

Pour savoir si votre distribution installée récemment applique une gestion agressive pour les disques, il faut faire le test sur plusieurs heures / jours tout en continuant de se servir de votre PC normalement. Si le LCC est supérieur à 50, ce n'est pas normal (plus de 100 votre disque est en danger). Il convient de tester les différents réglages pour abaisser cette moyenne.

Réglages et Optimisations :
Les paquets "smartmontools" et "laptop-mode-tools" quand ils sont installés, permettent la surveillance et l’application de réglages optimisés en fonction du contexte (fonctionnement sur batterie ou sur secteur).

Les réglages se font dans le fichier /etc/laptop-mode/laptop-mode.conf
Ci dessous les principaux réglages que j'ai appliqué sur mon portable

ENABLE_LAPTOP_MODE_TOOLS=1
ENABLE_LAPTOP_MODE_ON_BATTERY=1 # Active le laptop-mode quand le portable est sur batterie
ENABLE_LAPTOP_MODE_ON_AC=1 # Active le laptop-mode quand le portable est sur secteur
ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED=1 # Active le laptop-mode en sortie de veille
MINIMUM_BATTERY_CHARGE_PERCENT=3
DISABLE_LAPTOP_MODE_ON_CRITICAL_BATTERY_LEVEL=1 # Quand la batterie est déchargée, permet de vider le cache en écriture
LM_BATT_MAX_LOST_WORK_SECONDS=3600
LM_AC_MAX_LOST_WORK_SECONDS=3600 
# Durée en secondes de conservations des données en cache avant écriture sur le disque. Avec un cache très long, il y a moins d'écritures disque et la seule gène serait une coupure de courant (ce qui est quand même rare sur un portable avec batterie) ou un crash (ce qui devient aussi rare si vous utilisez Linux)
CONTROL_HD_IDLE_TIMEOUT=1 # on autorise laptop-mode à gérer les timeouts disque(s)
LM_AC_HD_IDLE_TIMEOUT_SECONDS=300 # Durée avant parcage des têtes (PC sur secteur)
LM_BATT_HD_IDLE_TIMEOUT_SECONDS=20 # Durée avant parcage des têtes  (PC sur batterie)
CONTROL_HD_POWERMGMT=1 # Autorise laptop-mode à appliquer des réglages hdparm
BATT_HD_POWERMGMT=30 # Valeur hdparm sur batterie
LM_AC_HD_POWERMGMT=200 # Valeur hdparm sur secteur
NOLM_AC_HD_POWERMGMT=200 # Valeur hdparm quand le mode de fonctionnement n'est pas connu
CONTROL_HD_WRITECACHE=1
NOLM_AC_HD_WRITECACHE=0
NOLM_BATT_HD_WRITECACHE=0
LM_HD_WRITECACHE=1 #Cache activé en écriture quand le portable est sur batterie
LM_SECONDS_BEFORE_SYNC=20  # Ceci mettra à 20 secondes le temps entre chaque synchronisation sur le disque.

Pour contrôler si les valeurs de hdparm fixées dans le fichier de configuration sont bien appliquée, utiliser la commande suivante :

hdparm -I /dev/sda | grep Advanced

Sur secteur, la réponse doit être : Advanced power management level: 200 
Sur batterie, la réponse doit être :  Advanced power management level: 30

Ajustements :
Il se peut qu'il soit necessaire d'ajuster ces valeurs pour votre disque. Il convient de trouver une valeur qui permet de passer sous la barre des 50 parcages à l'heure tout en s'assurant que le disque ne chauffe pas.

Faire un test pendant 10 minutes avec :
hdparm -B 255 /dev/sda

Le LCC ne devrait plus s'incrémenter

Faire un test pendant 10 minutes avec :
hdparm -B 254 /dev/sda

Puis contrôler la veleur du LCC et la température disque

Continuer ainsi de suite en décrémentant jusqu'au meilleur compromis (moins de 5 LCC par heure sur secteur et moins de 50 sur batterie)

Une fois les bonnes valeurs trouvées, il suffit de les indiquer dans les options du fichier laptop-mode.conf

BATT_HD_POWERMGMT=xxx # Valeur hdparm sur batterie
LM_AC_HD_POWERMGMT=xxx # Valeur hdparm sur secteur
NOLM_AC_HD_POWERMGMT=xxx # Valeur hdparm quand le mode de fonctionnement n'est pas connu

Mon fstab pour economiser ler les écritures disque et améliorer les temps de réponse. (partie en cours de rédaction)
/dev/shm /tmp tmpfs defaults,nosuid,nodev,noexec 0 0

Sites traitant du sujet :
Wiki mandriva
http://fr.pardus-wiki.org/Parcage_de_tetes
http://samwel.tk/laptop_mode/faq
http://doc.ubuntu-fr.org/laptop_mode
http://www.thinkwiki.org/wiki/Problem_with_hard_drive_clicking