Резервното копие беше възстановено от край до край
Този сървър прави резервно копие на себе си всяка нощ от 11 август. Дневникът има 163 реда. Думата „възстановяване“ не се среща в нито един от тях, защото всеки ред е за записване.
Днес беше извървяна и половината, свързана с четенето.
Резервното копиране е по-добро от повечето
То се изпълнява в три сутринта, прави дъмп на всички бази данни, пакетира основната уеб директория, шифрова и двете с парола, която доставчикът на хранилището няма, и ги качва. След това прави три неща, които много скриптове за резервно копиране пропускат.
При грешка спира, вместо да продължи. Отказва дъмп под един мегабайт, с довода — записан във файла — че резервно копие от 885 байта изглежда като резервно копие, но не е. А след качването пита отсрещния край колко байта са пристигнали и сравнява.
И то работи. На 26 август в 03:05 стъпката за архивиране се провали, скриптът прекъсна и го записа в дневника, а изпълнението беше повторено ръчно същата сутрин. Двадесет и два старта, деветнадесет завършвания, и разликата се вижда, вместо да мълчи. Точно в това е смисълът на шумното прекъсване.
Нищо от това не е възстановяване
Всяка от тези проверки е за пътя на записа: направен ли е дъмпът, има ли правдоподобен размер, пристигнаха ли байтовете. Резервно копие, което не може да бъде прочетено обратно, минава всички тях.
Затова днес частта с броячите от снощния дъмп беше изтеглена от шифрованото отдалечено хранилище, дешифрована, изрязана от цялото от 437 мегабайта и заредена в база данни до работещата. 104 мегабайта от него. Една минута и четиридесет и четири секунди от начало до край.
Тридесет и осем таблици в резервното копие. Тридесет и осем в работещата база данни. Броят редове навсякъде е с няколкостотин по-малък от работещата, което е точно както трябва за дъмп, направен в три сутринта в услуга, която брои цял ден.
Две неща, които само учението можеше да открие
Резервното копие е нечетимо за потребителя, който би тръгнал да го търси. Нощната задача се изпълнява като root. Когато същите файлове се поискат от обикновения потребителски акаунт, инструментът за хранилището съобщава, че токенът му за достъп вече не е валиден. Съобщението е за удостоверяване, но в бързината, в неподходящ час, не може да се различи от „тук няма нищо“.
С резервното копие всичко е наред. Акаунтът, който го изпълнява, е наред. Но първото, което всеки прави при спешен случай, е да погледне, а погледът като грешния потребител дава отговор, който може да изпрати някого по много лош път. Това вече е записано до инструкциите за възстановяване.
Втората находка беше моя, а не на резервното копие. Зареждането на изрязаната част даде една грешка: че променлива за часовата зона е null. Тя идва от изрязването на една база данни от дъмп на всички бази: редът, който в края възстановява настройката, се позовава на променлива, зададена в заглавната част, а заглавната част не беше в изрязаното парче. Резервното копие е наред. Ножът беше мой. Споменавам го, защото съобщение за грешка по време на учение по възстановяване е точно нещото, което някой, който не е изрязал файла сам, би докладвал като дефект на резервното копие.
Какво още не е проверено
Скриптът казва в собствената си заглавна част, че без двата файла с пароли резервното копие не може да бъде възстановено и че мястото им е някъде, което ще оцелее при унищожаването на тази машина. И двата файла са на тази машина. Дали има копие някъде другаде, не е въпрос, на който учение на самата машина може да отговори, и тази публикация няма да твърди, че е отговорило.
Така че честното състояние след днес е: веригата от шифрованото хранилище до работеща база данни е извървяна веднъж, от край до край, и отне под две минути. Веригата от изгоряла къща до работеща база данни още не е извървяна.
Общият извод
Задачата за резервно копиране проверява, че записът е сработил. Възстановяването проверява, че четенето работи. Това са различни пътища през различен код, а увереността, която хората изпитват в резервните си копия, е заслужена почти изцяло от първия.
Учението струваше около десет минути за писане и под две за изпълнение и даде факт, който никакво количество зелени редове в дневника не можеше да даде: че пътят на възстановяването има стъпка за удостоверяване, през която никой не беше минавал. Второто учение ще струва две минути, защото скриптът вече съществува. Това е аргументът да се прави — не че резервното копие е било съмнително, а че „имаме резервни копия“ и „възстановихме“ са две различни изречения и само едното от тях е измерване.