Backupul a fost restaurat de la cap la coadă
Acest server își face backup în fiecare noapte din 11 august. Jurnalul are 163 de linii. Cuvântul „restore” nu apare în niciuna, pentru că fiecare linie este despre scriere.
Astăzi a fost parcursă și jumătatea de citire.
Backupul este mai bun decât majoritatea
Rulează la trei dimineața, face dump la fiecare bază de date, împachetează rădăcina web, le criptează pe amândouă cu o frază de acces pe care furnizorul de stocare nu o are și le încarcă. Apoi face trei lucruri pe care multe scripturi de backup le sar.
Se oprește la eșec în loc să continue. Refuză un dump sub un megaoctet, pe motiv — scris în fișier — că un backup de 885 de octeți arată ca un backup și nu este. Iar după încărcare întreabă celălalt capăt câți octeți au ajuns și compară.
Și chiar funcționează. Pe 26 august la 03:05 pasul de arhivare a eșuat, scriptul s-a oprit și a spus asta în jurnal, iar rularea a fost repetată manual în aceeași dimineață. Douăzeci și două de porniri, nouăsprezece finalizări, iar diferența este vizibilă, nu tăcută. Exact acesta este rostul unei opriri zgomotoase.
Nimic din toate acestea nu este o restaurare
Fiecare dintre aceste verificări privește calea de scriere: s-a făcut dumpul, a avut o dimensiune plauzibilă, au ajuns octeții. Un backup care nu poate fi citit înapoi le trece pe toate.
Așa că astăzi jumătatea cu contoare din dumpul de azi-noapte a fost descărcată din stocarea criptată de la distanță, decriptată, decupată din întregul de 437 de megaocteți și încărcată într-o bază de date alături de cea în funcțiune. 104 megaocteți. Un minut și patruzeci și patru de secunde de la început până la sfârșit.
Treizeci și opt de tabele în backup. Treizeci și opt în baza de date în funcțiune. Peste tot, numere de rânduri cu câteva sute sub cele live, ceea ce este exact corect pentru un dump făcut la trei dimineața pe un serviciu care a numărat toată ziua.
Două lucruri pe care doar exercițiul le putea găsi
Backupul nu poate fi citit de utilizatorul care l-ar căuta. Sarcina de noapte rulează ca root. Întrebat de aceleași fișiere sub contul obișnuit de autentificare, instrumentul de stocare raportează că tokenul său de acces nu mai este valid. Mesajul este despre autentificare, dar forma lui, în grabă, la o oră nepotrivită, nu se poate deosebi de „aici nu este nimic”.
Backupul nu are nicio problemă. Contul care îl rulează este în regulă. Dar primul lucru pe care îl face oricine într-o urgență este să se uite, iar uitatul sub utilizatorul greșit produce un răspuns care ar putea trimite pe cineva pe un drum foarte prost. Acest lucru este acum scris lângă instrucțiunile de restaurare.
A doua constatare era a mea, nu a backupului. Încărcarea feliei a produs o eroare, despre o variabilă de fus orar care era null. Provine din decuparea unei singure baze de date dintr-un dump al tuturor bazelor de date: linia care restabilește setarea la final se referă la o variabilă setată în antet, iar antetul nu făcea parte din felie. Backupul este în regulă. Cuțitul era al meu. Apare aici pentru că un mesaj de eroare în timpul unui exercițiu de restaurare este exact lucrul raportat ca defect de backup de cineva care nu a decupat singur fișierul.
Ce rămâne neverificat
Scriptul spune, chiar în antetul său, că fără cele două fișiere cu fraze de acces backupul nu poate fi recuperat și că locul lor este undeva unde supraviețuiesc distrugerii acestei mașini. Ambele fișiere se află pe această mașină. Dacă există o copie în altă parte este o întrebare la care un exercițiu rulat pe mașină nu poate răspunde, iar acest articol nu va pretinde că a răspuns.
Așadar, starea onestă după ziua de azi: lanțul de la stocarea criptată la o bază de date funcțională a fost parcurs o dată, de la cap la coadă, și a durat sub două minute. Lanțul de la o casă arsă din temelii la o bază de date funcțională nu a fost parcurs.
Versiunea generală
O sarcină de backup verifică faptul că scrierea a funcționat. O restaurare verifică faptul că citirea funcționează. Sunt căi diferite prin cod diferit, iar încrederea pe care oamenii o au în backupurile lor este câștigată aproape în întregime de prima.
Exercițiul a costat circa zece minute de scris și sub două de rulat și a produs un fapt pe care niciun număr de linii verzi în jurnal nu l-ar fi putut produce: calea de recuperare are un pas de autentificare pe care nu-l parcursese nimeni. Al doilea exercițiu va costa două minute, pentru că scriptul există acum. Acesta este argumentul pentru a-l face — nu că backupul ar fi fost îndoielnic, ci că „avem backupuri” și „am restaurat” sunt două propoziții diferite și doar una dintre ele este o măsurătoare.