Smart error

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Que faire en cas d'erreur S.M.A.R.T. ?

Après avoir convenablement installé et configuré smartmontools, vous venez de recevoir un mail comme ci-dessous.

This email was generated by the smartd daemon running on:

  host name: Mon_nom_d-ordinateur
  DNS domain: [Unknown]
  NIS domain: (none)

The following warning/error was logged by the smartd daemon:

Device: /dev/sda [SAT], 16 Currently unreadable (pending) sectors


For details see host's SYSLOG.

You can also use the smartctl utility for further investigation.
The original email about this issue was sent at Sat Apr  1 06:31:52 2017 CEST
Another email message will be sent in 24 hours if the problem persists.

Et vous pensez que vous allez devoir remplacer le disque et de base c'est une bonne idée, car c'est un signe avant coureur d'une défaillance générale du disque.
Cependant vous pouvez aussi faire en sorte de prolonger encore un peu la vie de ce disque mais pour cela il va falloir faire quelques manipulations assez délicates.

Pour notre exemple nous supposons que le fichier de périphérique associé au disque concerné est «/dev/sda».

La première chose à faire est de lancer un examen approfondi du dit disque avec la commande suivante :

# smartctl -t long /dev/sda
smartctl 5.41 2011-06-09 r3365 [armv7l-linux-3.4.79-sun7i] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 162 minutes for test to complete.
Test will complete after Wed Apr 12 01:51:37 2017

Use smartctl -X to abort test.

Le message retourné nous informe que les résultats de ce test seront disponibles dans 2 heures et 2 minutes,
cette durée dépend de la capacité et de la vélocité du disque.

Une fois terminé il faut exécuter la commande suivante :

~# smartctl -A /dev/sda
smartctl 5.41 2011-06-09 r3365 [armv7l-linux-3.4.79-sun7i] (local build)
Copyright (C) 2002-11 by Bruce Allen, 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
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   178   174   021    Pre-fail  Always       -       2091
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       232
  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   073   073   000    Old_age   Always       -       20035
 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       -       231
191 G-Sense_Error_Rate      0x0032   066   066   000    Old_age   Always       -       34
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       193
193 Load_Cycle_Count        0x0032   001   001   000    Old_age   Always       -       2574607
194 Temperature_Celsius     0x0022   112   095   000    Old_age   Always       -       35
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       16   <=== On retrouve bien les 16 secteurs illisibles qui sont en attende de ré-allocation
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       0
240 Head_Flying_Hours       0x0032   077   077   000    Old_age   Always       -       17034
241 Total_LBAs_Written      0x0032   200   200   000    Old_age   Always       -       6841653103
242 Total_LBAs_Read         0x0032   200   200   000    Old_age   Always       -       5361545871
254 Free_Fall_Sensor        0x0032   200   200   000    Old_age   Always       -       0

Voir : Attributs S.M.A.R.T. connus

Vous pouvez aussi exécuter la commande «smartctl -x /dev/sda» qui vous donne l'intégralité des informations concernant votre disque (je ne mets pas le résultat ici car c'est très long).

Une première manipulation à faire est de passer la commande «fsck» sur chacune de vos partitions ou uniquement sur celles dont vous savez qu'il y a des erreurs. On va y mettre quelques options qui mettront automatiquement en liste noire les secteurs défectueux.

Attention la commande est à faire uniquement sur les partitions non montées, donc il faut jouer du «umount» et/ou «lsof» pour les mettre dans le bon état.

fsck -ccDfv /dev/sda1

J'explique les options utilisées (attention la casse est importante) :

cc = Oui le «c» est doublé pour utiliser badblocks en lecture/écriture. Mis une seule fois c'est de la lecture seule.
D = Optimisation des répertoires, CAD mise à jour des indexs
f = Force la vérification même si le système de fichiers semble bon.
v = Verbose, affiche la progression et autres informations

Bon maintenant il faut prendre votre mal en patience … par exemple il faut 4 jours pour 2 To avec un disque mécanique. Mais après tout dépend des perfs de votre disque. Si tout se passe bien vous devez normalement avoir quelque chose du genre :

fsck from util-linux 2.20.1
e2fsck 1.42.5 (29-Jul-2012)
Vérification des blocs défectueux (test non destructif de lecture-écriture)
Test en cours avec un motif aléatoire : complété
ARCHIVES: Updating bad block inode.
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
/lost+found n'a pas été trouvé. Créer<o>? oui
Passe 3A : optimisation des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe

YYYY: ***** LE SYSTÈME DE FICHIERS A ÉTÉ MODIFIÉ *****

       61821 inodes used (0.19%, out of 32768000)
        2450 non-contiguous files (4.0%)
          18 non-contiguous directories (0.0%)
             # of inodes with ind/dind/tind blocks: 0/0/0
             Extent depth histogram: 61769/43
    51348720 blocks used (39.18%, out of 131072000)
           0 bad blocks
           1 large file

       58110 regular files
        3701 directories
           0 character device files
           0 block device files
           0 fifos
           0 links
           0 symbolic links (0 lien symbolique rapide)
           0 sockets
------------
       61811 files
zsh: exit 1     fsck -ccDfv /dev/mapper/vg_XXXX-lv_YYYY

Sinon la commande qui m'a bien aidé est cette dernière :

dd if=/dev/sdX of=/dev/sdX conv=noerror

Elle ne fait que lire chaque secteur (dd lit et écrit par défaut par bloc de 512 octets) du disque pour le réécrire au même endroit. Pas de destruction d'info, pas de déplacement non plus, une simple lecture écriture brute. Elle a l'avantage de vous assurer de passer sur chacun des secteurs du disque, et le microgiciel de ce dernier fera son travail : il réallouera (lors de l'opération d'écriture par dd) les secteurs qui auront été confirmés comme défectueux .