Ma première grosse boulette professionnelle

03 mai 2020

Pour donner un peu de contexte, je suis administrateur systèmes Linux, et au moment de cette grosse boulette je bosse chez un Ă©diteur logiciel qui vend principalement une plateforme vidĂ©o Ă  destination des Ă©tablissements d’enseignement ou de formation, et pour qui je fais essentiellement du deploiement et de l’administration des serveurs des clients qui font tourner ce logiciel. Avant que la catastrophe arrive, je me disais que soit j’Ă©tais très chanceux ou très compĂ©tent, car plus d’une fois j’avais lu ou entendu que ça allait forcĂ©ment m’arriver de faire une “grosse boulette”, c’est Ă  dire par exemple supprimer une base de donnĂ©es en production, faire un rm -rf / accidentel, ou quelque chose dans le genre. Et après 10 ans d’expĂ©rience ça ne m’Ă©tait toujours pas arrivĂ©… Jusqu’au jour fatidique.

Ironie de l’histoire, quelques jours ou semaines avant je passais un entretien pour un autre poste pour lequel on m’avait posĂ© la question : “quelle a Ă©tĂ© ta plus grosse erreur ? et aujourd’hui si c’Ă©tait Ă  refaire tu ferais comment ?”. Ce Ă  quoi j’ai rĂ©pondu un peu fièrement je l’avoue, quelque chose comme ça : “bah j’ai la chance de n’avoir jamais produit de catastrophe jusqu’Ă  aujourd’hui donc je n’ai pas spĂ©cialement de retour d’expĂ©rience Ă  vous donner lĂ -dessus”.

Que s’est-il donc passĂ© ?

Un client, relativement important car lui-mĂŞme revendeur de notre solution auprès de plusieurs clients “importants”, commence Ă  arriver Ă  court d’espace de stockage sur son serveur. Il nous demande donc s’il est possible de rajouter de la capacitĂ© de stockage, en regardant on voit que sa machine a quatre enclosures de disques libres, donc on lui demande d’ajouter des disques dans le serveur et on s’occupera du reste.

Le client ajoute les disques et nous demande de procĂ©der Ă  l’extension. Je me connecte donc sur la machine, puis je vois que le partitionnement n’est pas le mĂŞme qu’habituellement, les donnĂ©es ne sont pas sur une partition sĂ©parĂ©e, tout est montĂ© sur /. Ça s’explique par le fait que c’est une vielle installation, donc pas forcĂ©ment conforme au standard de ce qu’on livre aujourd’hui. Soit, j’ajoute les nouveaux disques Ă  la grappe RAID6, puis j’essaie de voir s’il n’y a pas moyen d’Ă©tendre la partition racine Ă  chaud… pour arriver Ă  la conclusion que ce n’est pas faisable, en tout cas pas facilement.

LĂ , j’informe le client que de notre cĂ´tĂ© on ne peut pas faire le redimensionnement Ă  cause du partitionnement non adaptĂ©, qu’il va probablement devoir le faire lui-mĂŞme via un système LiveUSB, qu’on va tout de mĂŞme continuer Ă  regarder pour voir si on peut faire quelque chose, mais qu’avant qu’on tente quoi que ce soit ce serait bien qu’il ait une sauvegarde quelque part car quoi qu’il arrive l’opĂ©ration prĂ©sente des risques. Et lĂ  vous voyez peut-ĂŞtre venir le dĂ©but des ennuis, le client n’a pas de sauvegarde…

Le client n’ayant pas de technicien compĂ©tent sur Linux on se dit qu’on va devoir se passer de lui pour les opĂ©rations, mĂŞme lui demander de configurer le rĂ©seau sur un système live nous parait hors de sa portĂ©e. Donc je rĂ©flĂ©chis Ă  la suite des opĂ©rations. Le serveur avait quatre disques, il en a maintenant quatre en plus, je me dis qu’on peut partionner correctement les nouveaux disques, migrer dessus le système et les donnĂ©es, redĂ©marrer le serveur sur le nouveau partionnement, et ensuite rĂ©intĂ©grer les anciens disques. Je teste l’opĂ©ration sur une machine virtuelle en essayant d’y rĂ©pliquer la manière dont est configurĂ© le serveur. Dans ma VM, je dĂ©roule donc les opĂ©rations, je retire les derniers disques du RAID, je partitionne, je rsync, etc. Ça passe, ça fonctionne correctement. On a une solution.

Entre temps quelques semaines ont passĂ©es, le client commence Ă  s’impatienter et Ă  s’inquiĂ©ter de la saturation de son serveur. De notre cĂ´tĂ© le commercial en charge du client aussi vient rĂ©gulièrement aux nouvelles pour savoir comment ça avance. Mine de rien je commence donc Ă  avoir la pression. On est vendredi, je me dis “bon allez, je commence les opĂ©rations, je vais faire le partitionnement, et ensuite je me concerterais avec le client pour planifier l’interruption de service et faire le rsync”.

C’est parti, je lance la connexion SSH, et je dĂ©roule ma procĂ©dure. Je commence par retirer les quatre nouveaux disques que j’avais ajoutĂ© Ă  la grappe RAID6. Et si vous vous y connaissez en RAID, voyez probablement dĂ©jĂ  oĂą est le problème. Je commence Ă  avoir des erreurs qui passe dans la console, puis plus grand chose ne rĂ©pond, un simple ls ne fonctionne plus, le binaire est introuvable. La seule commande qui passe encore est mdadm, via la session SSH que j’ai d’encore ouverte. LĂ  je commence Ă  avoir le corps qui tremble un peu, je rĂ©alise que j’ai flinguĂ© le serveur du client, je ne sais pas encore pourquoi. Je cherche des solutions sur internet pour voir si il y a moyen de rĂ©parer ça et qu’en dehors de quelques minutes d’indisponibilitĂ© ça passe inaperçu, je tente quelques trucs, sans succès. J’informe donc mes collègues que j’ai fait une grosse bourde. RĂ©union de crise, on prend la dĂ©cision d’aller sur place pour faire une copie des disques avec dd et ensuite tenter quelques manipulations sur les disques originaux. Je ferme la connexion SSH. On informe le client du problème et de ma venue. Je prend donc la voiture, dans la nuit du vendredi au samedi, direction le centre de donnĂ©es du client Ă  plusieurs heures de route.

Sauve qui peut

ArrivĂ©e sur place Ă  10h, j’explique au client avec mon anglais basique un peu plus en dĂ©tail ce qu’il s’est passĂ© et ce qu’on va faire. On passe les diffĂ©rentes portes et sas, on arrive devant le serveur, je connecte clavier et Ă©cran, console remplie d’erreurs. J’Ă©teins physiquement la machine, je la redĂ©marre en amorçant sur une clĂ© USB avec une Debian Live. Dans une session tmux je lance la copie des quatre premiers disques.

Pendant ce temps j’essaie de comprendre ce qu’il s’est passĂ©, pourquoi ça a fonctionnĂ© sur ma VM et pas sur le serveur, puis essayer de reproduire en VM afin de tester des manipulations de rĂ©parations sans risques. Je lance donc ma machine virtuelle, et lĂ  je me rends compte que sur celle-ci j’avais seulement six disques, au lieu de huit. Un RAID6 peut supporter de perdre jusqu’Ă  deux disques, pas quatre… et mĂŞme si je n’avais pas Ă©tendu la partition, les donnĂ©es avait quand-mĂŞme commencĂ© Ă  se rĂ©partir sur tous les disques de la grappe.

La copie des disques prend du temps, je configure donc le rĂ©seau sur le système live afin de pouvoir y accĂ©der depuis l’hĂ´tel et ainsi superviser l’avancement. Je lance aussi une commande qui vĂ©rifie en boucle la prĂ©sence d’un processus dd et quitte lorsqu’il n’y en a plus, chaĂ®nĂ©e avec un envoi de mail Ă  la fin, comme ça j’aurais une notification. Dans la soirĂ©e la copie est terminĂ©e. J’y retourne pour lancer la copie des quatre disques suivants. Et pendant ce temps-lĂ  je reproduis le problème sur ma VM, avec huit disques cette fois-ci, et je fais des tentatives de rĂ©paration, avec succès. Je rĂ©ussis Ă  rĂ©-assembler le RAID en rĂ©intĂ©grant les disques retirĂ©s, il y a donc un espoir de ne pas perdre toutes les donnĂ©es du client. Mon niveau de stress commence Ă  redescendre.

La seconde copie termine le lendemain, je retourne au DC rĂ©cupĂ©rer les disques de sauvegarde, et tenter les manipulations sur les disques originaux. Ça ne fonctionne pas. Zut. On prend la dĂ©cision de rĂ©installer le serveur, et on restaurera les donnĂ©es Ă  distance… si on arrive Ă  les rĂ©cupĂ©rer. Je prend la route du retour, avec peu d’espoir.

Lundi matin de retour au bureau, je re-tente des trucs sur les disques de sauvegarde, en m’assurant que ce ne soit pas des manipulations potentiellement destructrices. On se rend compte qu’un des disques est vide, le sort (ou l’incompĂ©tence) s’acharne. Je perds encore un peu plus espoir. On se dĂ©cide Ă  faire appel Ă  un professionnel de la rĂ©cupĂ©ration de donnĂ©es, sans grande conviction. On lui fournit donc les disques copiĂ©s en lui expliquant la situation et les dĂ©tails techniques. Il fait une copie de sauvegarde Ă  son tour, sur laquelle il travaillera. On le laisse faire son travail en venant aux nouvelles de temps en temps. Ă€ la fin de la semaine il nous annonce qu’il arrive Ă  voir l’arborescence des fichiers, et qu’il va lancer la rĂ©cupĂ©ration. L’espoir revient. Ça lui prendra une partie de la semaine suivante, et finalement on a les donnĂ©es !

On lance la restauration Ă  distance, qui prend extrèmement longtemps, en effet copie plusieurs centaines de miliers de petits fichiers (des fragement TS) c’est très long. Au bout de plus de deux semaines d’indisponibilitĂ© le client commence vraiment Ă  s’Ă©nerver et Ă  Ă©voquer des “reprĂ©sailles”, Ă  juste titre. MĂŞme si je me dis que si il avait eu des sauvegardes tout aurait Ă©tĂ© beaucoup plus simple et moins dramatique. On prend la dĂ©cision de retourner sur place pour faire une copie locale, qui sera beaucoup plus rapide. Cette fois-ci j’y vais en train, trop fatiguĂ© pour prendre la voiture. Je fais la copie et avec un collègue Ă  distance restaure les donnĂ©es. Tout est de nouveau en ligne, il ne manque rien, tout le monde est soulagĂ©. Le client sera bien sĂ»r tout de mĂŞme dĂ©dommagĂ© en gestes commerciaux et très rapidement il nous mettra Ă  dispostion un espace de stockage pour y programmer des sauvegardes. Tout est bien qui fini plutĂ´t bien.

Conclusion

VoilĂ  donc comment j’ai fait ma première grosse boulette professionnelle. J’aurais maintenant des choses Ă  raconter si on me repose la question Ă  un prochain entretien. En attendant quelles sont les conclusions Ă  en tirer ?

DĂ©jĂ , je pense avoir bien fait d’informer très rapidement du problème au lieu de laisser pourrir la situation, ou pire d’avoir fait comme si de rien Ă©tait. En effet, j’aurais pu faire semblant de ne pas savoir ce qu’il s’est passĂ© et feindre de supposer que des Ă©lĂ©ments du serveur aient lâchĂ©s sans que j’y sois pour rien. Personne n’aurait pu prouver le contraire, et ce sont des choses qui arrivent. Mais si j’avais fait ça, après ça personne n’aurait pu rĂ©parer ma conscience et mon estime de moi non plus. Car il faut dire que c’est moi qui me suis foirĂ© sur toute la ligne, Ă  plusieurs reprises :

La seule chose qu’on pourrait reprocher au client, c’Ă©tait de ne pas avoir de sauvegarde en place.

Du coup comment je ferais aujourd’hui ?

Dans une situation sous pression et avec des risques, j’Ă©ssaierais d’Ă©viter de prendre une dĂ©cision sans avoir un avis tiers qui pourrait me ramener Ă  la raison et Ă©ventuellement voir si je vais commettre une erreur.

Des sauvegardes, toujours avoir des sauvegardes, dans tous les cas. Je ne blaguerais plus avec ça. Il me faudra une validation explicite de l’usager/client/demandeur pour faire une manipulation qui n’est pas sĂ©curisĂ©e par une sauvegarde. Et le RAID n’est pas de la sauvegarde, la preuve on peut bousiller un RAID.

Et dorénavant je suis bien conscient que je ne suis pas infaillible, ce qui me pousse à être plus prudent dans ce que je fais.

Si vous voyez autre chose qui pourrait Ă©viter ce genre de scĂ©nario je suis preneur, n’hĂ©sitez pas.