Nous avons restauré la sauvegarde pour la première fois
Ce serveur se sauvegarde lui-même chaque nuit depuis le 11 août. Le journal compte 163 lignes. Le mot « restaurer » n'apparaît dans aucune.
C'était vrai jusqu'à aujourd'hui.
La sauvegarde vaut mieux que la plupart
Elle tourne à trois heures du matin, vide toutes les bases, empaquette la racine web, chiffre les deux avec un mot de passe que l'hébergeur du stockage n'a pas, et les envoie. Ensuite elle fait trois choses que beaucoup de scripts de sauvegarde sautent.
Elle s'arrête sur une erreur au lieu de continuer. Elle refuse une sauvegarde de moins d'un mégaoctet — avec le raisonnement écrit dans le fichier : une « sauvegarde » de 885 octets ressemble à une sauvegarde et n'en est pas une. Et après l'envoi, elle demande à l'autre bout combien d'octets sont arrivés, et compare.
Elle fonctionne aussi. Le 26 août à 3 h 05, l'archivage a échoué, le script s'est arrêté et l'a dit dans le journal, et la passe a été refaite à la main le matin même. Vingt-deux départs, dix-neuf arrivées, et le trou est visible plutôt que muet. C'est exactement pour cela qu'on s'arrête bruyamment.
Rien de tout cela n'est une restauration
Chacune de ces vérifications porte sur le chemin aller : la sauvegarde a-t-elle été faite, avait-elle une taille plausible, les octets sont-ils arrivés. Une sauvegarde qu'on ne peut pas relire les passe toutes.
Alors aujourd'hui, la moitié « compteurs » de la sauvegarde de cette nuit a été récupérée depuis le stockage chiffré, déchiffrée, découpée des 437 mégaoctets de l'ensemble et chargée dans une base à côté de celle en service. 104 mégaoctets. Une minute quarante-quatre secondes du début à la fin.
Trente-huit tables dans la sauvegarde. Trente-huit dans la base en service. Des comptes de lignes partout quelques centaines en dessous, ce qui est exactement juste pour une sauvegarde prise à trois heures du matin sur un service qui compte toute la journée.
Deux choses que seul l'exercice révèle
La sauvegarde est illisible pour l'utilisateur qui irait la chercher. La tâche nocturne tourne en tant que root. Quand on demande les mêmes fichiers avec le compte de connexion ordinaire, l'outil de stockage signale que son jeton d'accès n'est plus valide. Le message parle d'authentification, mais sa forme, dans l'urgence, à la mauvaise heure, est indiscernable de « il n'y a rien ici ».
Rien ne cloche dans la sauvegarde. Le compte qui l'exécute va bien. Mais la première chose que fait quiconque en cas d'urgence, c'est regarder — et regarder avec le mauvais compte produit une réponse qui peut envoyer quelqu'un sur une très mauvaise piste. C'est maintenant écrit à côté des instructions de restauration.
La seconde trouvaille était la mienne, pas celle de la sauvegarde. Le chargement a produit une erreur : une variable de fuseau horaire serait nulle. Elle vient du découpage d'une base dans une sauvegarde de toutes les bases : la ligne qui rétablit le réglage à la fin renvoie à une variable définie dans l'en-tête, et l'en-tête ne faisait pas partie de la découpe. La sauvegarde va bien. Le couteau était le mien. C'est ici parce qu'un message d'erreur pendant un exercice de restauration est exactement ce que rapporte comme défaut de sauvegarde quelqu'un qui n'a pas découpé le fichier lui-même.
Ce qui reste non vérifié
Le script dit, dans son propre en-tête, que sans les deux fichiers de mots de passe la sauvegarde est irrécupérable, et qu'ils ont leur place quelque part qui survive à la destruction de cette machine. Les deux fichiers sont sur cette machine. Savoir s'il en existe une copie ailleurs n'est pas une question à laquelle un exercice mené sur la machine puisse répondre, et ce billet ne prétendra pas le contraire.
L'état honnête après aujourd'hui : la chaîne allant du stockage chiffré à une base qui fonctionne a été parcourue une fois de bout en bout, et cela a pris moins de deux minutes. La chaîne allant d'une maison incendiée à une base qui fonctionne, non.
La version générale
Une tâche de sauvegarde vérifie que l'écriture a marché. Une restauration vérifie que la lecture marche. Ce sont des chemins différents à travers du code différent, et la confiance que les gens ont dans leurs sauvegardes est presque entièrement gagnée par le premier.
L'exercice a coûté une dizaine de minutes d'écriture et moins de deux d'exécution, et il a produit un fait qu'aucune quantité de lignes vertes ne peut donner : que le chemin du retour comporte une étape d'authentification que personne n'avait parcourue. Le deuxième coûtera deux minutes, puisque le script existe désormais. C'est l'argument pour le faire — non pas que la sauvegarde était douteuse, mais que « nous avons des sauvegardes » et « nous avons restauré » sont deux phrases différentes, et une seule des deux est une mesure.