Différences entre versions de « Smartmontools »
imported>SylvainBeucler m (→smartd) |
|||
(8 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 3 : | Ligne 3 : | ||
== Commandes de base == | == Commandes de base == | ||
− | Activer: | + | === Activation des fonctionnalités SMART d'un disque === |
− | # smartctl --smart=on --offlineauto=on --saveauto=on /dev/ | + | |
+ | Activer les fonctionnalités SMART du disque /dev/sda: | ||
+ | # smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda | ||
smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen | smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen | ||
Home page is http://smartmontools.sourceforge.net/ | Home page is http://smartmontools.sourceforge.net/ | ||
Ligne 13 : | Ligne 15 : | ||
SMART Automatic Offline Testing Enabled every four hours. | SMART Automatic Offline Testing Enabled every four hours. | ||
− | ou plus facile à retenir: | + | ou, plus facile à retenir: |
− | smartctl -s on -S on -o on | + | smartctl -s on -S on -o on /dev/sda |
+ | |||
+ | === Lecture des attributs SMART d'un disque === | ||
− | + | Pour lire les valeurs des attributs SMART: | |
# smartctl -A /dev/hda | # smartctl -A /dev/hda | ||
smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen | smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen | ||
Ligne 58 : | Ligne 62 : | ||
Vérifiez la colonne "WHEN_FAILED" essentiellement. | Vérifiez la colonne "WHEN_FAILED" essentiellement. | ||
− | + | Autre exemple, d'un disque en train de mourir (plein d'erreurs disques), état après un <code>badblocks</code> partiel : | |
− | # smartctl -a /dev/ | + | ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE |
+ | 1 Raw_Read_Error_Rate 0x000b 001 001 051 Pre-fail Always FAILING_NOW 2144 | ||
+ | 3 Spin_Up_Time 0x0007 100 091 021 Pre-fail Always - 2366 | ||
+ | 4 Start_Stop_Count 0x0032 099 099 040 Old_age Always - 1152 | ||
+ | 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 | ||
+ | 7 Seek_Error_Rate 0x000b 200 200 051 Pre-fail Always - 0 | ||
+ | 9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 1305 | ||
+ | 10 Spin_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 | ||
+ | 11 Calibration_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 | ||
+ | 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1128 | ||
+ | 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 | ||
+ | 197 Current_Pending_Sector 0x0012 200 149 000 Old_age Always - 0 | ||
+ | 198 Offline_Uncorrectable 0x0012 099 099 000 Old_age Always - 330 | ||
+ | 199 UDMA_CRC_Error_Count 0x000a 200 253 000 Old_age Always - 0 | ||
+ | 200 Multi_Zone_Error_Rate 0x0009 200 174 051 Pre-fail Offline - 0 | ||
+ | |||
+ | Pour voir plus d'information sur le disque, utilisez l'option ''-a'' (qui affiche toutes les informations disponibles concernant le disque) : | ||
+ | smartctl -a /dev/sda | ||
+ | |||
+ | === Effectuer des tests du disque === | ||
+ | |||
+ | Des tests peuvent être lancés pendant le fonctionnement normal du disque : | ||
+ | smartctl -t short /dev/sda | ||
+ | smartctl -t long /dev/sda | ||
+ | Le test « long » est bien entendu plus complet et plus long que le test « short ». Ils ne perturbent cependant pas le fonctionnement normal du disque. | ||
+ | |||
+ | Pour vérifier les résultats, une fois le test terminé, utilisez la commande suivante pour afficher les logs des tests du disque et découvrir le résultat des tests: | ||
+ | smartctl -l selftest /dev/sda | ||
+ | |||
+ | Dans le cas du test « short », sa progression peut être visualisée avec la commande donnée ci-dessous <tt>smartctl -l selftest /dev/sda</tt>. | ||
− | Sur | + | Pour les tests « long » ou « offline », tant qu'il n'est pas terminé, aucune indication n'apparaît dans les logs des tests. Sur certains disques, l'option ''-c'' (qui affiche les capacités du disque) permet de visualiser la progression du test. Attention toutefois, sur certains modèles, cette commande annule le test en cours: vous pouvez déterminer si ce sera le cas selon les capacités du disque: s'il affiche la capacité « Suspend Offline collection upon new command », le test ne sera pas stoppé par une autre commande smartctl, mais s'il affiche « Abort Offline collection upon new command », alors le test sera interrompu par la plupart des commandes de smartctl, et il faut donc éviter d'observer la progression du test par l'option ''-c''. |
− | |||
− | + | Référez-vous au manuel de [http://manpages.debian.net/cgi-bin/man.cgi?query=smartctl&sektion=8 smartctl (1)] pour plus de détails sur ces tests. | |
− | |||
− | |||
− | + | == Traitement des mauvais blocs sur le disque == | |
− | |||
− | + | Dans la sortie de la commande <tt>smartmontools -A</tt>, les attributs SMART importants concernant les mauvais blocs sont : | |
+ | * Reallocated_Sector_Ct: les secteurs réalloués au cours de la vie du disque | ||
+ | * Current_Pending_Sector: les secteurs « instables » à réallouer dès que possible | ||
+ | * Reallocated_Event_Count: « le nombre total de tentatives de transfert de données entre un secteur réalloué et un secteur de réserve. Les essais fructueux et les échecs sont tous comptés au même titre. » (source: Wikipédia) | ||
+ | * Offline_Uncorrectable: les secteurs qui ne peuvent pas être corrigés. Indique un défaut sur le disque. | ||
Les disques durs actuels ont apparemment une réserve de blocs non utilisés, qui peuvent remplacer des blocs défectueux. Le remplacement se fait au moment de l'écriture sur le bloc défectueux (pas avant, pour laisser une chance de récupérer les données qui y sont inscrites). | Les disques durs actuels ont apparemment une réserve de blocs non utilisés, qui peuvent remplacer des blocs défectueux. Le remplacement se fait au moment de l'écriture sur le bloc défectueux (pas avant, pour laisser une chance de récupérer les données qui y sont inscrites). | ||
− | Le '' | + | Le [http://smartmontools.sourceforge.net/badblockhowto.html Bad block HOWTO] discute de ce sujet plus en détail et donne la marche à suivre en cas d'erreur d'écriture sur un bloc du disque. |
+ | |||
+ | Il peut cependant y avoir des cas où l'attribut « Current_Pending_Sector » n'est pas nul, mais aucune erreur n'est signalée par la commande <tt>smartctl -l error /dev/sda</tt>. Ce cas n'est pas très clairement indiqué dans le HOWTO. | ||
+ | |||
+ | === Exemple === | ||
+ | |||
+ | Notre exemple (tiré d'un cas réel) est un peu spécial car l'attribut <tt>Current_Pending_Sector</tt> n'est pas nul, mais aucune erreur n'est indiquée dans les logs du disque: | ||
+ | |||
+ | La commande suivante affiche (entre autre) la valeur de <tt>Current_Pending_Sector</tt>: | ||
+ | # smartctl -A /dev/sda | ||
+ | ... | ||
+ | 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 | ||
+ | ... | ||
+ | 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 | ||
+ | 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 3 | ||
+ | 198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 3 | ||
+ | ... | ||
+ | |||
+ | Ces informations peuvent être renvoyés par mail par ''smartd'' (voir la description de smartd plus bas dans ce document) sous la forme suivante : | ||
+ | The following warning/error was logged by the smartd daemon: | ||
+ | Device: /dev/sda, 3 Currently unreadable (pending) sectors | ||
+ | For details see host's SYSLOG (default: /var/log/syslog). | ||
+ | Et ''/var/log/syslog'' indique des lignes du type: | ||
+ | Device: /dev/sda, 3 Currently unreadable (pending) sectors | ||
+ | Device: /dev/sda, 3 Offline uncorrectable sectors | ||
+ | |||
+ | Mais, toujours dans notre cas, aucune erreur n'est remontée par SMART: | ||
+ | # smartctl -l error /dev/sda | ||
+ | smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen | ||
+ | Home page is http://smartmontools.sourceforge.net/ | ||
+ | === START OF READ SMART DATA SECTION === | ||
+ | SMART Error Log Version: 1 | ||
+ | No Errors Logged | ||
+ | |||
+ | Si, sur votre machine, SMART indique des erreurs, suivez simplement la procédure donnée par badblocks howto pour en forcer la réallocation après avoir déterminé les fichiers concernés. | ||
+ | |||
+ | Dans le cas contraire, comme ici, sans erreur indiquant les blocs affectés, on ne peut pas déterminer où se trouve l'erreur. Dans ce cas, une solution est forcer la réallocation des blocs en remplissant la partition, puisque la réallocation a lieu lors de l'écriture dans le bloc. Pour ce faire, effectuer les commandes suivantes sur chacune des partitions de la machine (remplacez ''/partition'' par le point de montage de la partition que vous voulez remplir): | ||
+ | dd if=/dev/zero of=/partition/FILL bs=4k | ||
+ | rm -f $p/FILL | ||
+ | Ici, la commande ''dd'' remplit un fichier plein de zéros qui va saturer l'espace libre de la partition (et devrait provoquer l'écriture dans les blocs instables). Elle s'arrêtera quand la partition sera pleine, et la commande ''rm'' qui suit supprimera immédiatement ce gros fichier pour ne pas perturber trop longtemps le fonctionnement de la machine. | ||
− | + | Relancez ensuite la commande « smartctl -A /dev/sda », et l'attribut « Current_Pending_Sector » devrait être revenu à 0: | |
− | + | ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE | |
− | + | [...] | |
− | + | 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0 | |
+ | [...] | ||
+ | 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 | ||
+ | 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 | ||
+ | [...] | ||
+ | (Ici, ''Reallocated_Sector_Ct'' est toujours à 0, indiquant qu'aucun bloc n'a été réalloué. Dans ce cas, j'imagine que les blocs indiqués instables n'ont finalement pas posé de problème à l'écriture et n'ont pas dû être réalloués) | ||
− | + | Autre exemple de valeurs d'attributs sur un disque de 2 ans (regarder la colonne RAW_VALUE), après un <code>badblocs</code> lecture/écriture complet (les blocs défectueux ont tous été réalloués): | |
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE | ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE | ||
[...] | [...] | ||
Ligne 90 : | Ligne 167 : | ||
197 Current_Pending_Sector 0x0012 200 199 000 Old_age Always - 0 | 197 Current_Pending_Sector 0x0012 200 199 000 Old_age Always - 0 | ||
− | == | + | == Le démon smartd == |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Pensez à activer le démon <code>smartd</code>, celui-ci vous préviendra en cas de problème détecté (courriel envoyé à root). | Pensez à activer le démon <code>smartd</code>, celui-ci vous préviendra en cas de problème détecté (courriel envoyé à root). | ||
− | Sous Debian, dans <code>/etc/default/smartmontools</code>, décommenter: | + | Sous Debian, dans <code>/etc/default/smartmontools</code>, décommenter la ligne: |
#start_smartd=yes | #start_smartd=yes | ||
+ | |||
+ | Si votre système GNU/Linux est un peu ancien que vous avez des disques non IDE (disques SATA, vous devrez peut-être rajouter <code>-d ata</code> dans le fichier <code>/etc/smartd.conf</code> (c'est inutile sur les systèmes plus récents, a priori depuis Debian Lenny): | ||
+ | DEVICESCAN -d ata -m root -M exec /usr/share/smartmontools/smartd-runner | ||
+ | ou | ||
+ | /dev/sda -d ata -m root -M exec /usr/share/smartmontools/smartd-runner | ||
Exemple: | Exemple: | ||
Ligne 148 : | Ligne 211 : | ||
Nov 7 09:58:20 bob smartd[3499]: Device: /dev/hda, ATA error count increased from 11 to 13 | Nov 7 09:58:20 bob smartd[3499]: Device: /dev/hda, ATA error count increased from 11 to 13 | ||
− | Donc je ne sais pas dans quels cas | + | Donc je ne sais pas dans quels cas la notification courriel est envoyée :/ |
+ | |||
+ | Autres exemples, sur le second disque: | ||
+ | |||
+ | email: | ||
+ | Device: /dev/hdb, 1 Currently unreadable (pending) sectors | ||
+ | syslog: | ||
+ | Nov 12 01:28:20 bob smartd[3499]: Device: /dev/hda, SMART Usage Attribute: 194 Temperature_Celsius changed from 97 to 95 | ||
+ | Nov 12 01:28:20 bob smartd[3499]: Device: /dev/hdb, 1 Currently unreadable (pending) sectors | ||
+ | Nov 12 01:28:20 bob smartd[3499]: Sending warning via /usr/share/smartmontools/smartd-runner to root ... | ||
+ | Nov 12 01:28:21 bob smartd[3499]: Warning via /usr/share/smartmontools/smartd-runner to root: successful | ||
+ | Nov 12 01:28:21 bob smartd[3499]: Device: /dev/hdb, SMART Prefailure Attribute: 7 Seek_Error_Rate changed from 100 to 200 | ||
+ | Nov 12 01:28:21 bob smartd[3499]: Device: /dev/hdb, SMART Usage Attribute: 194 Temperature_Celsius changed from 101 to 100 | ||
+ | |||
+ | email: | ||
+ | Device: /dev/hdb, 1 Offline uncorrectable sectors | ||
+ | syslog: | ||
+ | Nov 12 07:58:19 bob smartd[3499]: Device: /dev/hdb, 1 Currently unreadable (pending) sectors | ||
+ | Nov 12 07:58:19 bob smartd[3499]: Device: /dev/hdb, 1 Offline uncorrectable sectors | ||
+ | Nov 12 07:58:19 bob smartd[3499]: Sending warning via /usr/share/smartmontools/smartd-runner to root ... | ||
+ | Nov 12 07:58:19 bob smartd[3499]: Warning via /usr/share/smartmontools/smartd-runner to root: successful | ||
+ | |||
+ | smartctl: | ||
+ | 197 Current_Pending_Sector 0x0012 200 200 000 Old_age Always - 1 | ||
+ | 198 Offline_Uncorrectable 0x0012 200 200 000 Old_age Always - 1 | ||
== Liens == | == Liens == | ||
* [http://smartmontools.sourceforge.net/ Page officielle] | * [http://smartmontools.sourceforge.net/ Page officielle] | ||
+ | * le manuel de [http://manpages.debian.net/cgi-bin/man.cgi?query=smartctl&sektion=8 smartctl (1)] | ||
* [http://smartlinux.sourceforge.net/smart/attributes.php Références] des attributs du disque | * [http://smartlinux.sourceforge.net/smart/attributes.php Références] des attributs du disque | ||
− | * [http:// | + | * [http://fr.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology#Attributs_S.M.A.R.T._connus] sur Wikipedia, qui référence les attributs importants |
* [http://smartmontools.sourceforge.net/badblockhowto.html Bad block HOWTO for smartmontools] | * [http://smartmontools.sourceforge.net/badblockhowto.html Bad block HOWTO for smartmontools] | ||
+ | * [http://www.thinkwiki.org/wiki/Problems_with_SATA_and_Linux Problems with SATA and Linux] |
Version actuelle datée du 23 novembre 2012 à 19:57
Smartmontools permet de dialoguer avec de nombreux disques-dur pour obtenir des informations et statistiques sur leur état, permettant de diagnostiquer un disque-dur en fin de vie notamment.
Commandes de base
Activation des fonctionnalités SMART d'un disque
Activer les fonctionnalités SMART du disque /dev/sda:
# smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF ENABLE/DISABLE COMMANDS SECTION === SMART Enabled. SMART Attribute Autosave Enabled. SMART Automatic Offline Testing Enabled every four hours.
ou, plus facile à retenir:
smartctl -s on -S on -o on /dev/sda
Lecture des attributs SMART d'un disque
Pour lire les valeurs des attributs SMART:
# smartctl -A /dev/hda smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 3 Spin_Up_Time 0x0027 252 252 063 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 253 253 000 Old_age Always - 0 5 Reallocated_Sector_Ct 0x0033 253 253 063 Pre-fail Always - 0 6 Read_Channel_Margin 0x0001 253 253 100 Pre-fail Offline - 0 7 Seek_Error_Rate 0x000a 253 252 000 Old_age Always - 0 8 Seek_Time_Performance 0x0027 250 245 187 Pre-fail Always - 58790 9 Power_On_Minutes 0x0032 251 251 000 Old_age Always - 714h+26m 10 Spin_Retry_Count 0x002b 252 252 157 Pre-fail Always - 0 11 Calibration_Retry_Count 0x002b 252 252 223 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 253 253 000 Old_age Always - 83 192 Power-Off_Retract_Count 0x0032 253 253 000 Old_age Always - 0 193 Load_Cycle_Count 0x0032 253 253 000 Old_age Always - 0 194 Temperature_Celsius 0x0032 253 253 000 Old_age Always - 31 195 Hardware_ECC_Recovered 0x000a 253 252 000 Old_age Always - 4749 196 Reallocated_Event_Count 0x0008 253 253 000 Old_age Offline - 0 197 Current_Pending_Sector 0x0008 253 253 000 Old_age Offline - 0 198 Offline_Uncorrectable 0x0008 253 253 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0008 199 199 000 Old_age Offline - 0 200 Multi_Zone_Error_Rate 0x000a 253 252 000 Old_age Always - 0 201 Soft_Read_Error_Rate 0x000a 253 252 000 Old_age Always - 6 202 TA_Increase_Count 0x000a 253 252 000 Old_age Always - 0 203 Run_Out_Cancel 0x000b 253 252 180 Pre-fail Always - 2 204 Shock_Count_Write_Opern 0x000a 253 252 000 Old_age Always - 0 205 Shock_Rate_Write_Opern 0x000a 253 252 000 Old_age Always - 0 207 Spin_High_Current 0x002a 252 252 000 Old_age Always - 0 208 Spin_Buzz 0x002a 252 252 000 Old_age Always - 0 209 Offline_Seek_Performnce 0x0024 186 183 000 Old_age Offline - 0 99 Unknown_Attribute 0x0004 253 253 000 Old_age Offline - 0 100 Unknown_Attribute 0x0004 253 253 000 Old_age Offline - 0 101 Unknown_Attribute 0x0004 253 253 000 Old_age Offline - 0
Vérifiez la colonne "WHEN_FAILED" essentiellement.
Autre exemple, d'un disque en train de mourir (plein d'erreurs disques), état après un badblocks
partiel :
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000b 001 001 051 Pre-fail Always FAILING_NOW 2144 3 Spin_Up_Time 0x0007 100 091 021 Pre-fail Always - 2366 4 Start_Stop_Count 0x0032 099 099 040 Old_age Always - 1152 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x000b 200 200 051 Pre-fail Always - 0 9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 1305 10 Spin_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 11 Calibration_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1128 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0012 200 149 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0012 099 099 000 Old_age Always - 330 199 UDMA_CRC_Error_Count 0x000a 200 253 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0009 200 174 051 Pre-fail Offline - 0
Pour voir plus d'information sur le disque, utilisez l'option -a (qui affiche toutes les informations disponibles concernant le disque) :
smartctl -a /dev/sda
Effectuer des tests du disque
Des tests peuvent être lancés pendant le fonctionnement normal du disque :
smartctl -t short /dev/sda smartctl -t long /dev/sda
Le test « long » est bien entendu plus complet et plus long que le test « short ». Ils ne perturbent cependant pas le fonctionnement normal du disque.
Pour vérifier les résultats, une fois le test terminé, utilisez la commande suivante pour afficher les logs des tests du disque et découvrir le résultat des tests:
smartctl -l selftest /dev/sda
Dans le cas du test « short », sa progression peut être visualisée avec la commande donnée ci-dessous smartctl -l selftest /dev/sda.
Pour les tests « long » ou « offline », tant qu'il n'est pas terminé, aucune indication n'apparaît dans les logs des tests. Sur certains disques, l'option -c (qui affiche les capacités du disque) permet de visualiser la progression du test. Attention toutefois, sur certains modèles, cette commande annule le test en cours: vous pouvez déterminer si ce sera le cas selon les capacités du disque: s'il affiche la capacité « Suspend Offline collection upon new command », le test ne sera pas stoppé par une autre commande smartctl, mais s'il affiche « Abort Offline collection upon new command », alors le test sera interrompu par la plupart des commandes de smartctl, et il faut donc éviter d'observer la progression du test par l'option -c.
Référez-vous au manuel de smartctl (1) pour plus de détails sur ces tests.
Traitement des mauvais blocs sur le disque
Dans la sortie de la commande smartmontools -A, les attributs SMART importants concernant les mauvais blocs sont :
- Reallocated_Sector_Ct: les secteurs réalloués au cours de la vie du disque
- Current_Pending_Sector: les secteurs « instables » à réallouer dès que possible
- Reallocated_Event_Count: « le nombre total de tentatives de transfert de données entre un secteur réalloué et un secteur de réserve. Les essais fructueux et les échecs sont tous comptés au même titre. » (source: Wikipédia)
- Offline_Uncorrectable: les secteurs qui ne peuvent pas être corrigés. Indique un défaut sur le disque.
Les disques durs actuels ont apparemment une réserve de blocs non utilisés, qui peuvent remplacer des blocs défectueux. Le remplacement se fait au moment de l'écriture sur le bloc défectueux (pas avant, pour laisser une chance de récupérer les données qui y sont inscrites).
Le Bad block HOWTO discute de ce sujet plus en détail et donne la marche à suivre en cas d'erreur d'écriture sur un bloc du disque.
Il peut cependant y avoir des cas où l'attribut « Current_Pending_Sector » n'est pas nul, mais aucune erreur n'est signalée par la commande smartctl -l error /dev/sda. Ce cas n'est pas très clairement indiqué dans le HOWTO.
Exemple
Notre exemple (tiré d'un cas réel) est un peu spécial car l'attribut Current_Pending_Sector n'est pas nul, mais aucune erreur n'est indiquée dans les logs du disque:
La commande suivante affiche (entre autre) la valeur de Current_Pending_Sector:
# smartctl -A /dev/sda ... 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 ... 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 3 198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 3 ...
Ces informations peuvent être renvoyés par mail par smartd (voir la description de smartd plus bas dans ce document) sous la forme suivante :
The following warning/error was logged by the smartd daemon: Device: /dev/sda, 3 Currently unreadable (pending) sectors For details see host's SYSLOG (default: /var/log/syslog).
Et /var/log/syslog indique des lignes du type:
Device: /dev/sda, 3 Currently unreadable (pending) sectors Device: /dev/sda, 3 Offline uncorrectable sectors
Mais, toujours dans notre cas, aucune erreur n'est remontée par SMART:
# smartctl -l error /dev/sda smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Error Log Version: 1 No Errors Logged
Si, sur votre machine, SMART indique des erreurs, suivez simplement la procédure donnée par badblocks howto pour en forcer la réallocation après avoir déterminé les fichiers concernés.
Dans le cas contraire, comme ici, sans erreur indiquant les blocs affectés, on ne peut pas déterminer où se trouve l'erreur. Dans ce cas, une solution est forcer la réallocation des blocs en remplissant la partition, puisque la réallocation a lieu lors de l'écriture dans le bloc. Pour ce faire, effectuer les commandes suivantes sur chacune des partitions de la machine (remplacez /partition par le point de montage de la partition que vous voulez remplir):
dd if=/dev/zero of=/partition/FILL bs=4k rm -f $p/FILL
Ici, la commande dd remplit un fichier plein de zéros qui va saturer l'espace libre de la partition (et devrait provoquer l'écriture dans les blocs instables). Elle s'arrêtera quand la partition sera pleine, et la commande rm qui suit supprimera immédiatement ce gros fichier pour ne pas perturber trop longtemps le fonctionnement de la machine.
Relancez ensuite la commande « smartctl -A /dev/sda », et l'attribut « Current_Pending_Sector » devrait être revenu à 0:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE [...] 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0 [...] 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 [...]
(Ici, Reallocated_Sector_Ct est toujours à 0, indiquant qu'aucun bloc n'a été réalloué. Dans ce cas, j'imagine que les blocs indiqués instables n'ont finalement pas posé de problème à l'écriture et n'ont pas dû être réalloués)
Autre exemple de valeurs d'attributs sur un disque de 2 ans (regarder la colonne RAW_VALUE), après un badblocs
lecture/écriture complet (les blocs défectueux ont tous été réalloués):
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE [...] 5 Reallocated_Sector_Ct 0x0033 192 192 140 Pre-fail Always - 62 [...] 196 Reallocated_Event_Count 0x0032 182 182 000 Old_age Always - 18 197 Current_Pending_Sector 0x0012 200 199 000 Old_age Always - 0
Le démon smartd
Pensez à activer le démon smartd
, celui-ci vous préviendra en cas de problème détecté (courriel envoyé à root).
Sous Debian, dans /etc/default/smartmontools
, décommenter la ligne:
#start_smartd=yes
Si votre système GNU/Linux est un peu ancien que vous avez des disques non IDE (disques SATA, vous devrez peut-être rajouter -d ata
dans le fichier /etc/smartd.conf
(c'est inutile sur les systèmes plus récents, a priori depuis Debian Lenny):
DEVICESCAN -d ata -m root -M exec /usr/share/smartmontools/smartd-runner
ou
/dev/sda -d ata -m root -M exec /usr/share/smartmontools/smartd-runner
Exemple:
This email was generated by the smartd daemon running on: host name: bob DNS domain: centre.local NIS domain: (none) The following warning/error was logged by the smartd daemon: Device: /dev/hda, ATA error count increased from 10 to 11 For details see host's SYSLOG (default: /var/log/messages). You can also use the smartctl utility for further investigation. No additional email messages about this problem will be sent.
Dans le syslog:
Nov 7 01:27:20 bob kernel: hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } Nov 7 01:27:20 bob kernel: hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=10997362, high=0, low=10997362, sector=10997359 Nov 7 01:27:20 bob kernel: ide: failed opcode was: unknown Nov 7 01:27:20 bob kernel: end_request: I/O error, dev hda, sector 10997359 Nov 7 01:28:20 bob smartd[3499]: Device: /dev/hda, SMART Prefailure Attribute: 1 Raw_Read_Error_Rate changed from 200 to 195 Nov 7 01:28:20 bob smartd[3499]: Device: /dev/hda, SMART Usage Attribute: 194 Temperature_Celsius changed from 99 to 97 Nov 7 01:28:20 bob smartd[3499]: Device: /dev/hda, ATA error count increased from 10 to 11 Nov 7 01:28:20 bob smartd[3499]: Sending warning via /usr/share/smartmontools/smartd-runner to root ... Nov 7 01:28:21 bob smartd[3499]: Warning via /usr/share/smartmontools/smartd-runner to root: successful
Cependant j'ai aussi eu, mais sans notification cette fois:
Nov 7 09:58:20 bob smartd[3499]: Device: /dev/hda, SMART Prefailure Attribute: 1 Raw_Read_Error_Rate changed from 193 to 185 Nov 7 09:58:20 bob smartd[3499]: Device: /dev/hda, SMART Usage Attribute: 194 Temperature_Celsius changed from 96 to 95 Nov 7 09:58:20 bob smartd[3499]: Device: /dev/hda, ATA error count increased from 11 to 13
Donc je ne sais pas dans quels cas la notification courriel est envoyée :/
Autres exemples, sur le second disque:
email:
Device: /dev/hdb, 1 Currently unreadable (pending) sectors
syslog:
Nov 12 01:28:20 bob smartd[3499]: Device: /dev/hda, SMART Usage Attribute: 194 Temperature_Celsius changed from 97 to 95 Nov 12 01:28:20 bob smartd[3499]: Device: /dev/hdb, 1 Currently unreadable (pending) sectors Nov 12 01:28:20 bob smartd[3499]: Sending warning via /usr/share/smartmontools/smartd-runner to root ... Nov 12 01:28:21 bob smartd[3499]: Warning via /usr/share/smartmontools/smartd-runner to root: successful Nov 12 01:28:21 bob smartd[3499]: Device: /dev/hdb, SMART Prefailure Attribute: 7 Seek_Error_Rate changed from 100 to 200 Nov 12 01:28:21 bob smartd[3499]: Device: /dev/hdb, SMART Usage Attribute: 194 Temperature_Celsius changed from 101 to 100
email:
Device: /dev/hdb, 1 Offline uncorrectable sectors
syslog:
Nov 12 07:58:19 bob smartd[3499]: Device: /dev/hdb, 1 Currently unreadable (pending) sectors Nov 12 07:58:19 bob smartd[3499]: Device: /dev/hdb, 1 Offline uncorrectable sectors Nov 12 07:58:19 bob smartd[3499]: Sending warning via /usr/share/smartmontools/smartd-runner to root ... Nov 12 07:58:19 bob smartd[3499]: Warning via /usr/share/smartmontools/smartd-runner to root: successful
smartctl:
197 Current_Pending_Sector 0x0012 200 200 000 Old_age Always - 1 198 Offline_Uncorrectable 0x0012 200 200 000 Old_age Always - 1
Liens
- Page officielle
- le manuel de smartctl (1)
- Références des attributs du disque
- [1] sur Wikipedia, qui référence les attributs importants
- Bad block HOWTO for smartmontools
- Problems with SATA and Linux