Smart error
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 .