Licence : this bafouille is provided AS IS, no garantee it'll work…
La mésaventure m'est arrivée la semaine dernière, j'ai heureusement pu diagnostiquer et traiter le disque malade dans les temps. Et un ami a eu le même souci ce week-end, hélas un peu tard et bien évidemment, pas au “bon moment”, mais on a pu récupérer les données.
Ce billet est écrit pour les systèmes Unix et compatibles, donc Linux *BSD et Mac OS X y trouveront des informations utiles, et concerne les disques utilisés directement en SLED, les HDD configurés en mode RAID ont des stratégies de récupération très différentes. Les Microsofteux qui veulent essayer (les fous, ils ont sûrement des cliquodrômes très bien faits) devront le faire avec une clé USB linux live
. Bonne chance à eux !
Ce qu'il faut savoir
Un disque dur (HDD) est livré avec une capacité brute. Le microcontrôleur du disque se réserve une marge de sécurité (entre 5 et 10% de la capacité annoncée) qui n'est pas accessible au système d'exploitation de votre ordinateur (OS). C'est pour cette raison que vous n'aurez jamais 100% de la capacité de votre HDD, même si cette réserve n'est pas comptée dans le volume vendu.
Si le contrôleur de votre HDD rencontre des secteur défectueux dans la zone publique, il va créer des alias de ces secteurs vers son espace de secours. Il n'est pas rare qu'un disque aie des défauts même neuf, et ceci d'autant plus que nous leur demandons encore plus de densité d'information que jamais. Il fut même une époque où les secteurs défectueux étaient indiqués sur une étiquette collée au boîtier et on devait entrer cette liste manuellement quand on partitionait un disque.
Un disque dur haute-performance
de 1990 avec sa liste de secteurs défectueux identifiés à l'usine. Source : Kuhmann.com
À notre époque moderne d'un quotidien de progrès, c'est le microcontrôleur du HDD qui s'en occupe tout seul. Néanmoins, si l'usage de l'espace de secours commence à monter, c'est un signe inquiétant qui montre une dégradation de la surface du disque. Afin d'être informé d'éventuelles défaillances, il existe un standard de dialogue avec le contrôleur du disque appelé S.M.A.R.T. (pour Self-Monitoring, Analysis and Reporting Technology). Ce service donne des informations complémentaires, en générales non remontées à votre OS. Ah oui, ce service est géré par le disque dur, il est totalement indépendant de votre OS.
Dura lex sed Murphy's law
Oui, il est rude, donc j'explique le jeu de mot : la marque de verre Duralex™ vient de la maxime latine dura lex sed lex
qui veut dire la loi est dure, mais c'est la loi
. Et la Loi de Murphy est celle dite De l'Emmerdement Maximum
, ce n'est pas pour rien.
Un défaut n'est jamais souhaitable, mais le pire incident possible arrivera toujours au moment où il ne fallait vraiment pas perdre ses données ou du temps. Choc, usure, craquelure, pelage, n'oubliez pas que les têtes de lecture/enregistrement survolent à une distance microscopique les plateaux qui tournent à plus de 5000 tours par minute ; le moindre choc ou impureté peut écailler la surface magnétique. Nos HDD sont les avant-derniers éléments internes mécaniques de nos ordinateurs (avec les ventilos).
Il vaut mieux prévenir que guérir. Pensez toujours à dupliquer régulièrement vos données “sensibles”, sur un NAS ou sur un service cloud d'archivage (en chiffrant vos envois). Cela s'appelle avoir une stratégie solide de backup et si on applique pas cette discipline suffisamment tôt, c'est qu'on y songera que trop tard.
Ensuite, privilégier une séparation entre votre système et votre répertoire personnel. Sur Linux, c'est facile : /
et /home
ont toujours été les trois premières partitions créées (la partition swap n'est pas visible dans le filesystem), ce qui permet de réparer l'OS sans impacter les données utilisateur. Perdre la partition de l'OS n'est pas grave. Perdre la partition de vos données personnelles est irrémédiable. À noter que cette séparation des responsabilités était difficilement faisable sous Windows jusqu'à Seven, maintenant, vous n'avez aucune excuse.
Si cela arrive, d'abord…
Reconnaître les signes
Pour moi, cela a commencé par un nombre de plantages anormaux. Depuis trois jours, des programmes crashaient aléatoirement, mais toujours lors d'une opération disque : en surfant avec des navigateurs ou quand j'enregistrais des documents avec Libre Office. Lors de la récupération de ce dernier, il se montrait incapable de me donner la version la plus récente du document de travail.
Il n'y avait donc que deux possibilités : un problème de RAM ou un problème de HDD. J'ai écarté la première avec memtest86+, le test de mémoire proposé dans grub au démarrage de votre PC.
N'ayant plus le 0899 de la Pythie de Delphes (qui est notoirement imprécise), il va falloir plonger ses mains dans le cambouis.
Pour confirmer le diagnostic sur le HDD, vous aurez besoin d'un terminal (eh...) en mode root (ben oui) et de smartctl. Ce petit exécutable est présent dans les systèmes debian/apt dans le paquet smartmontools. Il existe d'excellents guides complets sur les outils S.M.A.R.T., sachant que pas mal d'infos très utiles sont données lors de son usage et via l'option -h
.
Pour commencer, on va demander au microcontrôleur s'il est là, s'il peut dialoguer avec nous via SMART et quelles informations il peut nous donner sur ses disques :
# smartctl -a /dev/<device>
<device> est la notation (la plupart du temps) en trois lettres qui fait référence à votre disque, elle varie suivant les systèmes et les technologies. Si vous ne savez pas, la commande mount
sans arguments vous donnera les points d'accès. Par exemple :
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
Indique que votre racine est sur la première partition du disque sda
.
Examinons les informations retournées par smartctl -a
(les lignes peuvent changer selon les modèles) :
[…] 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 142 142 021 Pre-fail Always - 3858 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 23 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 100 100 000 Old_age Always - 104 10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 23 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 7 193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 15 194 Temperature_Celsius 0x0022 116 110 000 Old_age Always - 27 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 - 0 200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0 SMART Error Log Version: 1 No Errors Logged SMART Self-test log structure revision number 1 No self-tests have been logged. [To run self-tests, use: smartctl -t] […]
Vous noterez que les indications sur les valeurs pré et post-critiques sont renseignées par le fabricant et ses valeurs limites sont donc réputées correctes. Mais la présence de deux/trois pre-fail
ne doit pas immédiatement vous effrayer. Comme je l'ai écrit plus haut (normalement), les incidents les plus fréquents concernent les opérations en écriture, on va demander au disque de s'observer pendant un certain temps et de noter ses comportements anormaux.
# smartctl -t long /dev/<device> […] === 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 7 minutes for test to complete. Test will complete after Tue Mar 4 11:12:18 2014 Use smartctl -X to abort test.
Je viens de lancer le monitoring vers 7h du matin, le contrôleur aura suffisamment de données pour me donner une information statistiquement fiable après 11h12.
Ces données de monitoring sont enregistrées dans la RAM du contrôleur qui sert principalement à son buffer, pas sur le disque lui-même ; vous n'aurez aucun risque de corruption supplémentaire, tout au plus une réduction très marginale des performances lecture/écriture de votre disque dur, vous pouvez donc copier des fichiers ou travailler pendant les tests SMART. Pour votre info, cette opération est régulièrement faite dans les datacenters sur vos serveurs. Autre avantage : cette opération est résiliante aux resets. Vous pouvez même rebooter sur un autre système d'exploitation durant la période d'observation, ce qui permettra de vérifier ce qui se passe sur d'autres partitions du disque. La seule chose est de ne pas éteindre la machine.
À la fin de la période de monitoring, nous pouvons demander une synthèse sur la santé du disque :
# smartctl -H /dev/<device> […] === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED
Si à la place de PASSED
, vous lisez PRE-FAIL
,
vous pouvez paniquer.
Quand ton disque dur donne des signes de mollesse
Et quitte à bien faire, le disque dur qui commence à accuser son âge (7 ans) est celui où tu as à la fois ton système /
et ton /home
.
Cierges et ex-voto à l'Église de Fourvière pour les admins lyonnais. Crédit photo Wikipédia.
D'abord, secouer en marmonnant le grigri d'un marabout très puissant sur les cendres d'un cartouchier SyQuest tout copier sur un NAS ou un service distant de backup (comme Hubic). Une fois fini, éteindre le pc. Ensuite foncer pour acheter un HDD neuf d'une capacité au moins équivalente.
Sur votre carte-mère, brancher les deux disques en même temps, et créer sur le nouveau les mêmes partitions. Je vous recommande de le faire avec un outil de partition graphique, la ligne de commande est assez rude. Notez la référence de votre nouveau HDD, et pour chaque nouvelle partition, la capacité et le numéro de partition de /dev/<device>
. Seul le numéro de partition est important, puisque la lettre du disque changera quand vous retirerez l'ancien. Si vous venez de créer la partition /dev/sdb4
, comme votre disque défaillant est sûrement le /dev/sda
, il est probable qu'à la fin de l'opération, cette partition soit logiquement nommée /dev/sda4
.
N'oubliez pas que vous ne pouvez avoir deux fois le même point d'entrée, vous les renommerez plus tard dans /etc/fstab
quand vous aurez retiré l'ancien disque.
Une fois les nouvelles partitions montées, commencez à copier de l'un vers l'autre à l'ancienne avec mkdir
/cp
. Parait qu'on peut le faire avec rsync -avuzb
, perso, j'utilise Midnight Commander sans aucune honte, et hop.
Il vaut mieux copier fichier par fichier plutôt que la structure physique de vos partitions ; n'utilisez surtout pas dd
: vous risqueriez d'avoir des effets très indésirables si les capacités ou les systèmes de fichiers sont différents ou de corrompre prématurément votre disque tout neuf !
Si vous avez apache et/ou une base de données importantes, il faut sauver /var
, voire même idéalement dupliquer ce répertoire dans une partition à part comme pour /home
. Éventuellement, copiez le répertoire /etc
qui contient des paramétrages de services (apache, base de données, cron,…).
Les ruses de sioux pour sauver sa racine OS
Ne vous concentrez pas trop sur ce chapitre, si vous vous plantez, vous pourrez toujours repartir de zéro et vous perdrez juste du temps à réinstaller les logiciels.
Pour votre partition système /
, et si vous voulez tenter un clonage sans réinstaller tout votre OS, les répertoires à copier en priorité sont /bin
, /boot
, /etc
, /lib*
, /opt
, /root
, /sbin
, /usr
et /var
. Inutile de récupérer /tmp
, et surtout ne tentez jamais de copier un des répertoires /dev
, /proc
, /run
ou /sys
: ce ne sont pas des fichiers standards mais des points de montage matériels ou des points d'accès au kernel. Ignorez les répertoires des points de montages sur l'ancien HDD (ainsi que ses /cdrom
, /mnt
et /media
). La ban-list pour les Mac est susceptible d'être différente.
N'oubliez pas de recréer sur le nouveau HDD les répertoires qui vont servir de pont de montage aux autres partitions.
Une fois les données copiées sur le nouveau HDD, arrêtez le pc, et retirez le HDD malade. Au cas où ça foire, réservez-le sur le côté pour une cuisson ultérieure.
Copier les répertoires vers le nouveau disque et noter les nouveaux identifiants /dev/<device> ne suffira pas. Effectivement, en remplaçant le disque racine, il y a toutes les chances que vous perdrez le secteur de boot, Grub. Ton meilleur outil pour restaurer proprement grub2 est boot-repair
, qu'il faudra invoquer depuis une clé linux live. Il y aura de la ligne de commande à taper avant d'invoquer le programme.
Une fois lancé, boot-repair y va bourrin et fait le tour de chaque partition pour voir s'il y trouve un répertoire /root
(il m'a même retrouvé une vieille structure Mandrika d'il y a 12 ans), et il va installer grub sur chaque partition possible. Le résultat sera miraculeux : grub sera proprement ré-installé, avec une reconstruction des liens virtuels à la racine vers initrd.img
et vmlinuz
qui permettent de démarrer votre OS.
HE IS ALIIIIIIIIVE !
Source image : DoctorMarco.com
Une fois l'OS démarré, vous remarquerez que les autres partitions dont /home
ne sont plus montées au démarrage et tout ne marche pas encore totalement. L'étape suivante sera d'éditer /etc/fstab
avec les UUID de vos nouvelles partitions pour qu'elles soient montées au démarrage du système. Comme indiqué dans les commentaires du fstab
, vous connaîtrez les UUID des nouvelles partitions en lançant blkid
. N'oubliez pas que les noms logiques des partitions sdXY auront changé puisque la lettre X varie suivant les disques branchés, la commande mount
vous donnera le nouveau nom logique de /
.
Enfin, il faut redonner à /tmp
les bons droits, puisque le bit sticky a été perdu :
# chmod -R a+rwxt /tmp
Redémarrez et…
Normalement
Ça doit être bon.
Normalement…
Source icono pour le disque fracturé : DarthMac.com
2 réactions
1 De xylpho - 04/03/2014, 12:19
Pour mac, plus simple. Carbon Copy Cloner et DiskWarrior. Et bien sûr un stockage distant comme tu le dis.
2 De Aplufr - 04/03/2014, 19:38
Je ne suis pas sûr que le test "long/short" de SMART surveille le disque en fonction des accès. De mémoire le short fait un test de déplacement des têtes, lecture aléatoire de quelques secteurs (positionnement des têtes + surface), test d'accès au début et fin de disque, mémoire cache et vérification des tensions. Le long fait comme le short, avec un test de surface complet.
Il y a aussi deux autres modes de tests, "select" et "conveyance" qui ne sont pas toujours implémenté par les disques, le premier permet de tester une zone en particulier du disque, le deuxième est utile après avoir transporter le disque, mais je ne sais plus pourquoi.
La présence de Pre-fail, n'est absolument pas un signe d'erreur, ce qu'il faut regarder c'est si "Value" passe en dessous de "Threshold" (colonne Worst) dans ce cas il ne reste plus que quelques secondes pour vivre.
L'attribut "Old-age" indique si le disque est "vieux", par rapport aux recommandations du constructeur. Ça ne signifie pas forcement grand chose, à part une vieillesse du disque (donc possibilité de crash plus élever).
Pour info, dans le paquet "dar" il y a un utilitaire "dar_cp" qui permet de copier des fichiers même lorsqu'il y a des erreurs de lecture. Il y aura des pertes sur ce qui est absolument illisible, mais il copiera le plus possible, ce que ne fera pas cp.
Dernier point car après mon commentaire va être plus long que ton billet :-P, lorsque le contrôleur du disque détecte un secteur défectueux, celui-ci est rangé dans la catégorie "Pending Reallocation". Il ne sera réallouer dans la zone de réserve que lorsqu'il y aura une écriture sur ce secteur.
Les deux valeurs à regarder sont "Reallocated sector count" et "Current Pending Sector" (id 5 & 197).
La présence excessive de secteur à réallouer ne signifie pas forcement que la zone est pleine, juste que le contrôleur à encore l'espoir de relire les données.
Dans certains cas, des disques qui ne fonctionnent plus à causes de secteur défectueux peuvent repartir avec un formatage bas-niveau (un dd fait l'affaire), il peuvent servir pour mettre des données peut importante.
(Promis j'arrête là, perso les disques Hitachi ont toujours des secteurs défectueux)