title: Serveur défaillant
date: 2016-09-30
tags: blog, linux
url: serveur-defaillant
slug: serveur-defaillant
![Photo d'un disque dur ouvert.](/images//disque-dur-800.jpg) Photo par [Magnus Hagdorn](https://www.flickr.com/photos/hagdorned/15021103291/in/lbum-72157646804892131/), sous [licence CC BY SA](https://creativecommons.org/licenses/by-sa/2.0/fr/)
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 107 099 006 Pre-fail Always - 205095556
3 Spin_Up_Time 0x0003 100 100 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 87
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 069 060 030 Pre-fail Always - 167761870739
9 Power_On_Hours 0x0032 050 050 000 Old_age Always - 44067
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 88
183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 084 084 000 Old_age Always - 16
188 Command_Timeout 0x0032 100 099 000 Old_age Always - 4295032833
189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0022 065 050 045 Old_age Always - 35 (Min/Max 34/35)
194 Temperature_Celsius 0x0022 035 050 000 Old_age Always - 35 (0 16 0 0 0)
195 Hardware_ECC_Recovered 0x001a 023 013 000 Old_age Always - 205095556
197 Current_Pending_Sector 0x0012 099 099 000 Old_age Always - 42
198 Offline_Uncorrectable 0x0010 099 099 000 Old_age Offline - 42
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 44213 (132 145 0)
241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 3639020994
242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 2452794878
La quasi-totalité des sites que j'héberge sous les sous-domaines en chibi-
nah.fr/net et en nah.re sont inaccessibles.
Les données sont en cours de récupération/transfert (actuellement 42 Go
transférés) vers un autre disque/serveur.
La remise en ligne des sites sera fait progressivement ce week-end.
Les sites des copains, ayant déjà migré sur un autre serveur, ne sont pas
impactés.
~~Plus de détails prochainement.~~
**Édit : La plupart des sites et bases de données sont restaurés, je peux
donner des détails.**
## Jeudi soir
Je lis mes flux rss, consulte mes emails, comme d'habitude. Tous les sites
fonctionnent.
## Vendredi matin
Vers 10h30, je me rends compte que mon client mail ([K-9 Mail sur
Android](https://f-droid.org/posts/k-9-mail/)) ne se synchronise plus (échec
de connexion) avec le serveur. Pensant à un souci de connexion 3G/HSPA,
j'ignore le problème.
À 11h, toujours pas de connexion, je décide de jeter un œil sur mon webmail
(j'attendais un email), et là, c'est le drame. Le webmail répond, mais ne se
charge pas entièrement. Je reprend mon téléphone, et force la synchronisation.
Toujours rien. Je ne me laisse pas démonter pour autant, et lance
[connectbot](https://f-droid.org/repository/browse/?fdfilter=connectbot&fdid=org.connectbot).
La saisie de ma passphrase plus tard, je tente de me connecter via ssh. Échec
de connexion. Mon autre serveur, lui, est joignable avec la même clef, ce
n'est pas un problème de connexion. Je tente de me connecter depuis un autre
PC, et là, j'ai la main.
Le shell bash m'accueille sans problème. Je tape naïvement htop, et là
Erreur d'entrée/sortie
Ooook ?
Je tente de me connecter en root (via su)
Erreur d'entrée/sortie
Je tape une commande au hasard (comme df -h)
Erreur d'entrée/sortie
Bon… Les commandes ne répondent pas
Je tente dmesg
ayaka kernel: ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ayaka kernel: ata1.00: BMDMA stat 0x64
ayaka kernel: ata1.00: failed command: READ DMA EXT
ayaka kernel: ata1.00: cmd 25/00:00:e1:3a:f7/00:01:62:00:00/e0 tag 0 dma 131072 in
ayaka kernel: res 51/40:00:dd:3b:f7/40:00:62:00:00/00 Emask 0x9 (media error)
ayaka kernel: ata1.00: status: { DRDY ERR }
ayaka kernel: ata1.00: error: { UNC }
ayaka kernel: ata1.00: configured for UDMA/133
ayaka kernel: sd 0:0:0:0: [sda] Unhandled sense code
ayaka kernel: sd 0:0:0:0: [sda]
ayaka kernel: Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
ayaka kernel: sd 0:0:0:0: [sda]
ayaka kernel: Sense Key : Medium Error [current] [descriptor]
ayaka kernel: Descriptor sense data with sense descriptors (in hex):
ayaka kernel: 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
ayaka kernel: 62 f7 3b dd
ayaka kernel: sd 0:0:0:0: [sda]
ayaka kernel: Add. Sense: Unrecovered read error - auto reallocate failed
ayaka kernel: sd 0:0:0:0: [sda] CDB:
ayaka kernel: Read(10): 28 00 62 f7 3a e1 00 01 00 00
ayaka kernel: end_request: I/O error, dev sda, sector 1660369885
ayaka kernel: ata1: EH complete
ayaka kernel: ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ayaka kernel: ata1.00: BMDMA stat 0x64
ayaka kernel: ata1.00: failed command: READ DMA EXT
ayaka kernel: ata1.00: cmd 25/00:08:d9:3b:f7/00:00:62:00:00/e0 tag 0 dma 4096 in
ayaka kernel: res 51/40:00:dd:3b:f7/40:00:62:00:00/00 Emask 0x9 (media error)
ayaka kernel: ata1.00: status: { DRDY ERR }
ayaka kernel: ata1.00: error: { UNC }
ayaka kernel: ata1.00: configured for UDMA/133
ayaka kernel: sd 0:0:0:0: [sda] Unhandled sense code
ayaka kernel: sd 0:0:0:0: [sda]
ayaka kernel: Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
ayaka kernel: sd 0:0:0:0: [sda]
ayaka kernel: Sense Key : Medium Error [current] [descriptor]
ayaka kernel: Descriptor sense data with sense descriptors (in hex):
ayaka kernel: 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
ayaka kernel: 62 f7 3b dd
ayaka kernel: sd 0:0:0:0: [sda]
ayaka kernel: Add. Sense: Unrecovered read error - auto reallocate failed
ayaka kernel: sd 0:0:0:0: [sda] CDB:
ayaka kernel: Read(10): 28 00 62 f7 3b d9 00 00 08 00
ayaka kernel: end_request: I/O error, dev sda, sector 1660369885
ayaka kernel: ata1: EH complete
Et ce, en boucle.
Là,petitgros moment de panique : le disque dur est en train de lâcher.
### Petit aparté
Dans un mail, à la question « Ma question est la suivante : vous qui passez du
temps à administrer une infra perso, quels sont ces services un peu chiants
pour lesquels vous savez que vous réagissez rapidement s'ils tombent ? »,
j'avais répondu :
Bonsoir,
Pour moi, c'est le serveur de mails qui est ultra-prioritaire (et même
critique), parce que ma famille l'utilise également. Si jamais ce
service tombe, je lâche tout pour pouvoir intervenir le plus vite
possible pour le rétablir (les adresses sont utilisées par exemple pour
tout ce qui est administratif (impôts et autres)).
Le serveur web est plutôt critique (plusieurs domaines hébergés), tout
comme le DNS, mais ça attendra le soir (ou le week-end au pire des cas).
Pour le reste (jabber, mumble…) c'est peu prioritaire.
Alex - nah
Fin de l'aparté.
Récapitulons, on est vendredi 30 septembre, il est quasiment midi. Je pose un
après-midi de congé, et je rentre.
Premier truc à faire : manger. Je réfléchis mal si j'ai le ventre vide.
Second truc à faire, se connecter au manager OVH, pour redémarrer le serveur,
et le démarrer via NetBoot, sur une image rescue64.
Le temps que ça redémarre, j'ai largement le temps de me préparer un café.
Quelque minutes plus tard, le serveur pingue à nouveau. Bien entendu, l'email
contenant les informations de connexion est envoyé sur le serveur de mails…
qui vient de démarrer en rescue >.< mais bon, heureusement que l'une de mes
clefs publiques est rattachée sur mon compte, le robot l'a bien ajouté dans la
liste des clefs autorisées.
Je monte les partitions, et tente d'y accéder. À priori, le disque est encore
lisible.
Je génère alors une paire de clefs ssh que je copie sur mon autre serveur
dédié (j'ai de la place dessus, le débit et la bande passante ne sont pas des
soucis), et je lance la longue tâche de transfert (over sshfs) de copie des
fichiers.
La priorité est : tenter de sauver le maximum de fichiers. que ça soit les
sites hébergés, les bases de données et (si possible) le contenu de /etc.
La copie prend une bonne partie de l'après-midi.
Il est 19h20. Les copies sont terminées, à priori, tous les fichiers ont pu
être sauvegardés. Je mange un morceau, puis je m'attaque à la longue tâche qui
m'attend : l'installation des services de base sur Aeka.
Notes :
* Serveur dédié défaillant : [Ayaka (雪広 あやか)](https://duckduckgo.com/?q=ayaka+yukihiro)
* Serveur dédié fonctionnel : [Aeka (柾木 阿重霞 樹雷)](https://duckduckgo.com/?q=masaki+aeka+jurai)
Apache2 est déjà installé, avecMySQLMariaDB, je n'ai donc pas à les
réinstaller.
Commençons par les plus urgents : le DNS et le serveur d'emails.
L'installation des deux services ainsi que la configuration s'est déroulé
quasiment sans anicroche, je commence à recevoir les emails de la journée
(dont celui attendu). Cependant, un domaine résiste. Il est 22h30, je décide
d'arrêter, je dois me lever tôt samedi matin (genre, vers 5h, pour prendre le
train).
## Samedi matin
J'allume mon pc portable, et je reprend la configuration du domaine
récalcitrant. Modifications des SOA, de la glue record, systématiquement, je
me prends un timeout sur la commande DIG. Les autres domaines fonctionnant sur
le même serveur, eux, répondent instantanément. Je constate alors avoir perdu
trop de temps et décide d'utiliser les DNS d'OVH pour ce domaine.
Je jette un œil rapidement sur twitter, et je vois qu'une question à propos de
la configurations des DNS m'est posée (Ha ? Comme par hasard). J'y réponds,
précise quelques éléments, ajoute quelques pistes (comme d'hab), et j'attends
que le domaine soit à nouveau joignable pour continuer la restauration des
services.
Le domaine récalcitrant est finalement joignable, et les emails arrivent aussi
dessus.
C'est tout pour le samedi. L'essentiel est de nouveau fonctionnel, je peux
alors profiter du week-end.
## Lundi soir
Je m'attelle à la tâche suivante : Restaurer les sites hébergés.
Pour ça, ce fut relativement rapide, vu que j'ai une copie de la config
d'Ayaka.
J'en profite pour faire un peu de ménage sur mes sites personnels, notamment
les trucs expérimentaux ou en beta.
Les sites sont restaurés, c'est bon, mais certains demandent une base de
données MySQL. Je regarde le dossier des dumps SQL, et là, c'est le drame.
Des fichiers sont manquants, incomplets, corrompus ou illisibles (remplis de
0x00). Cela me prendra du temps pour tenter de récupérer les données (jusqu'à
mardi soir en fait).
Je récupère les bases de données, crée une VM sur mon pc portable avec
EXACTEMENT la même config que le serveur, la même version de MySQL, et je
tente de monter les bases.
Les BDD sont lisibles, je me dépêche de faire des dumps. Un contrôle rapide
effectué, je charge les dumps dans MariaDB, sur Aeka. Les bases sont
restaurées, les comptes dédiés aussi.
J'en profite pour mettre à jour [Roundcube](https://roundcube.net/), et le
thème [Melanie2](https://github.com/messagerie-melanie2/Roundcube-Skin-Melanie2-Larry-Mobile)
Je regarde les sites restaurés, et je me rends compte que certains sites ne
sont pas compatibles php7. C'est notamment le cas de Cheveretto, de Piwigo, et
d'OpenArdilla.
Cheveretto, dans la version que j'utilise, correspond à mon usage attendu
(juste une solution simple pour partager des images, sans créer de galerie),
mais je me demande si je ne vais pas le remplacer par une instance de
[lut.im](http://lut.im).
Piwigo, je le mettrai à jour quand j'aurai le temps.
Par contre, OpenArdilla n'a jamais dépassé le stade de la version 0.1, le site
n'existe plus et il n'y a aucune activité sur sourceforge depuis des années.
Ça m'embête un peu, parce que je n'ai pas trouvé d'agrégateur de flux RSS
similaire, ultra-minimaliste (pas de gestion de lu/non lu par exemple) avec la
même disposition (n'afficher que les 10 derniers titres, par site, sans
regroupement). J'ai bien un leed qui tourne, mais c'est pas pareil.
La prochaine tâche qui m'attend, c'est donc de tenter de porter OpenArdilla en
PHP7. Bon courage.
Pour les autres sites, pas de problème majeur, idem pour les autres services.
## Conclusion
Cela m'aura pris quelques jours pour tout récupérer et (quasiment) tout
restaurer.
L'ironie du sort, c'est que j'avais planifié la migration Ayaka -> Aeka, et
que j'ai commencé par les sites des copains. La migration, telle que prévue
aurait du être progressive, avec un arrêt prévu d'Ayaka pour décembre.
Finalement, ça aura été fait dans l'urgence.
.