Prévenir l'usure prématurée d'un disque dur rotatif
Par cubytus le jeudi 28 août 2014, 15:41 - Lien permanent
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".
Mauvais 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 là, ç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 |
---|---|---|---|
0 | disabled | disabled | disabled |
1 | 100ms | 100ms | 100ms |
100 | 10s | 10s | 10s |
128 | 12.8s | 12.8s | 12.8s |
129 | 12.9s | 30s | 30s |
130 | 13s | 60s | 60s |
254 | 25.4s | 3780s | 3780s |
255 | 25.5s | 3810s | 3810s |
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.