Cerebro Seco

Se faciliter la vie informatique sans sacrifier ses principes!

Aller au contenu | Aller au menu | Aller à la recherche

Prévenir l'usure prématurée d'un disque dur rotatif

Je suis tombé sur un excellent billet de blogue et voulu vérifier ce qu'il en était sur ma propre machine, équipée d'un Western Digital Scorpio Black.

Enfer et double bite, le disque se meurt!

Il n'y a pas meilleure formulation pour décrire ma sensation lorsque j'ai trouvé ça:

$ smartctl -a /dev/disk0
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   189   168   021    Pre-fail  Always       -       1533
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       472
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   096   096   000    Old_age   Always       -       3137
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       428
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       72
193 Load_Cycle_Count        0x0032   129   129   000    Old_age   Always       -       215717
194 Temperature_Celsius     0x0022   111   102   000    Old_age   Always       -       36
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       36
200 Multi_Zone_Error_Rate   0x0008   100   253   000    Old_age   Offline      -       0

au ID# 193. 215 717 cycles de chargement pour 3137 heures de fonctionnement, soit tout juste 130 jours, ce qui fait plus de 68 cycles par heure, donc un par minute !! Le disque dur est conçu pour 600 000 de ces cycles.

On peut vérifier l'augmentation de ces cycles avec la commande

while True ; do s="$(date) $(smartctl -a /dev/disk0 | grep 'Load_Cycle_Count')" ; echo $s | tee -a hddLoadCounts.log ; sleep 60 ; done

histoire de se faire une petite frayeur.

Causes et solutions

Mise en veille du système, solution

Typiquement, le disque dur charge et range sa tête pour économiser le courant. C'est très utile sur batterie, mais les effets néfastes seront supérieurs aux bénéfices lorsque la machine fonctionne le plus souvent branchée. On peut se contenter de la méthode simple et décocher la case "Suspendre dès que possible l'activité du disque dur".

Capture_d_e_cran_2014-08-28_a__14.35.11.pngMauvais réglage du APM

Et il y a la méthode plus complexe, qui nécessite de disposer de quelques informations et outils supplémentaires.

Pour les informations, la plus difficile à trouver, hélas, est la liste des valeurs d'APM valides pour un disque donné, entre 0 et 255. Elle varie d'un manufacturier à l'autre même si généralement, plus on monte dans les chiffres, plus la performance est favorisée au détriment de la consommation. 127 est généralement le nombre le plus élevé autorisant l'extinction tout en gardant une performance acceptable, et tout nombre supérieur interdit l'extinction, mais chaque nombre n'est pas forcément supporté.

Pour les outils par contre, c'est très simple. Si on était dans Linux, ce serait fait avec hdparm, mais c'est l'un des rares utilitaires qui n'aie jamais reçu de version Mac. Pour vérifier les réglages de mise en veille du disque dur avec, on peut toujours faire démarrer une version live d'un Linux quelconque, hdparm étant la plupart du temps installé par défaut. Une page plus claire que le man classique est présentée par là. Parmi les paramètres qui gèrent la consommation se trouvent bien entendu l'Advanced Power Management, qui contrôle surtout le moteur, mais aussi le Advanced Acoustic Management, qui contrôle en même temps le moteur et la vitesse de déplacement des têtes de lecture. Comme son nom l'indique, une tête qui se déplace rapidement lira les données plus tôt, mais fera plus de bruit. Mais en plus, les disques durs Western Digital incluent depuis quelques années un paramètre propriétaire, le idle3, mieux connu sous le nom commercial de Intellipark. Pour lire les paramètres actuels d'un WD une fois dans Linux, on tape:

$ sudo hdparm -B -M -J /dev/sda

Typiquement, le premier disque dur d'un Linux est accessible à la position sda. De mémoire (car je n'ai pas pensé à sauvegarder la sortie), le mien présentait:

/dev/sda:

acoustic = unsupported
APM = 254 (lorsque l'ordinateur était branché, 127 lorsqu'il était débranché)
wdidle3 = 8.0 secs.

En termes ordinaires, la performance est supérieure lorsqu'il est branché, et l'économie d'énergie favorisée sur batterie. Le idle3 était bien à 8 secondes, réglage d'usine, ce qui me paraît bien trop court compte tenu du faible nombre de cycles de chargement. C'est peut-être la raison pour laquelle on dirait que les disques durs tiennent moins longtemps depuis plusieurs années.

On fera donc avec hdapm, de Bruce McKinlay. Très simple et petit à installer, il ne sert qu'à régler le mode d'économie d'énergie au démarrage de la machine. Une fois installé, il impose automatiquement le mode APM prescrit à tous les disques durs compatibles, donc des disques internes ou eSATA.

Truquer le idle3

Cependant, il faut savoir qu'il n'est pas nécessairement suffisant, les disques durs modernes rivalisant d'ingéniosité pour couper leur consommation, notamment les WD avec leur idle3. Malheureusement, on ne peut pas directement modifier ce paramètre, propriétaire faut-il le rappeler, avec hdparm, dont les développeurs ont dû se résoudre à une rétro-ingénierie imparfaite pour l'implémenter.

Si l'on tient absolument à utiliser le flag -J pour passer une valeur d'idle3, un message supplémentaire inquiétant apparaît:

$ sudo hdparm -J 300 /dev/sda

(pour mettre le timeout après inactivité à 300 secondes au lieu de 8 secondes)

Use of -J is EXTREMELY DANGEROUS.
This implementation is not as thorough as the official WDIDLE3.EXE. Use at your own risk!
Please also supply the --please-destroy-my-drive flag if you really want this.
Program aborted.

Alors je sais pas pour vous, mais j'ai préféré m'en tenir à l'outil officiel de Western Digital. Officiel ne veut pas dire supporté, et s'ils détectent, lors d'un retour en garantie, que l'outil a été utilisé sur un disque non officiellement supporté, elle sera annulée. Ça, ou la possibilité qu'il n'y aie finalement pas besoin d'utiliser cette garantie puisque le disque s'usera moins…

Pour ajouter un peu d'ennui à une situation préoccupante, cet outil ne tourne qu'en mode DOS pur, ça veut dire que la ligne de commande Windows ne fonctionnera pas. Pour ceux qui ne veulent pas se casser la tête (ce qui est le thème du blog après tout), il faudra donc un CD de boot, mais attention, pas de version live de Linux, mais bien d'outils Windows. Une chance, ces disques sont courants sur le net, les Mac Intel peuvent démarrer sur des disques Windows, et la plupart intègrent déjà WDIDLE3.EXE dessus.

Pour une fois, le très bon Hiren's Boot CD (téléchargeable par , ça ne saute pas aux yeux) n'a pas fait le travail correctement, gelant au cours du démarrage pour cause d'excès de RAM. Faut le comprendre, du temps de DOS les ordinateurs ne dépassaient guère le Mégaoctet. C'est finalement un concurrent bien connu, Ultimate Boot CD, qui a réussi, de justesse, à lancer la ligne de commande DOS, quelque part dans les utilitaires de disques durs. Pour mémoire, la commande pour liste le contenu d'un dossier en DOS n'est pas ls, mais bien dir.

Il suffit ensuite de taper

WDIDLE3.EXE /R 

pour indiquer le réglage actuel de la minuterie,

WDIDLE3.EXE /S300

pour le régler à 300 secondes comme dans l'exemple ci-dessus. Attention, certains disques ont été rapportés comme réagissant mal au flag /D!

Il existe pourtant d'autres alternatives Linux que hdparm:

idle3-tools, qui prend le paramètre en hexadécimal, qui de surcroît dépend de la version.

wdidle3 v1.00 v1.03 v1.05
0disableddisableddisabled
1100ms100ms100ms
10010s10s10s
12812.8s12.8s12.8s
12912.9s30s30s
13013s60s60s
25425.4s3780s3780s
25525.5s3810s3810s

Liens:

Hacking WD Greens(and Reds) with WDIDLE3.exe

Beaucoup plus de détails sur le fonctionnement des Western Digital Green et Red, mais apparemment aussi applicable pour les modèles de portables. En bonus, un beau style d'écriture!

Une version live de WDIDLE3.EXE. Non testée.

Western Digital reconnaît le problème sur certains de ses disques, et propose une autre solution: paramétrer son système pour espacer les demandes d'accès au disque dur, lui permettant un "repos" plus long, en limitant l'écriture des logs.