0% прочитано

Наявність резервної копії не гарантує, що її можна відновити

Файл backup на сервері ще нічого не доводить. Потрібно знати, коли він створений, чи процес запускається регулярно, чи розмір виглядає правдоподібно, чи є історія успішних запусків і головне - чи дані реально можна відновити.

23 жовтня 2026 р. 11 хв читанняDevOps

Побачити на сервері файл із назвою на кшталт backup-2026-10-17.sql.gz дуже заспокоює.

Але сам факт існування файла ще не відповідає на головне питання: чи зможемо ми відновити систему, якщо production data зникнуть або будуть пошкоджені?

Під час перевірки резервного копіювання я оцінюю не лише наявність файлу, а весь процес: розклад створення копій, останнє успішне виконання, історію запусків, розмір файлів, термін їх зберігання, цілісність даних і можливість їх відновлення.

Backup strategy працює не тоді, коли "десь є файл", а тоді, коли є повторюваний процес створення, перевірки й відновлення.

Перший крок - перевірити, що backup справді свіжий

Останні backup files із timestamp і size
find /path/to/backups \  -maxdepth 1 \  -type f \  -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\n' \  | sort -r \  | head -20

Мене цікавить не просто "файл є", а коли він створений.

Якщо backup має запускатися щодня, а останній файл триденної давнини, strategy вже не працює так, як ми думаємо.

Час створення останньої резервної копії одразу допомагає помітити пропущений запуск за розкладом або збій, який залишився непоміченим.

Другий крок - перевірити schedule, а не вгадувати його за файлами

Шукаємо реальний механізм запуску
crontab -l sudo crontab -l systemctl list-timers --all

Файл міг бути створений вручну місяць тому. Або backup job могла існувати раніше, але cron уже видалили.

Тому я перевіряю сам механізм, який має запускати backup: cron, systemd timer, scheduler, CI job або інший orchestration рівень.

Schedule існує - теж не означає, що job завершується успішно

Backup має кілька різних станів
Configured    |    vTriggered    |    vStarted    |    vCompleted    |    vVerified

Наявність запису в cron підтверджує лише те, що завдання налаштоване.

Потрібно також переконатися, що воно справді запускається та успішно завершується з кодом 0 або іншим чітким підтвердженням успіху.

Якщо стандартний вивід і повідомлення про помилки ніде не зберігаються, збої можуть залишатися непоміченими тижнями.

Завдання резервного копіювання повинно залишати зрозумілу історію запусків і результатів виконання

Мінімальні дані про один запуск резервного копіювання
2026-10-17 02:00 started2026-10-17 02:03 database dump complete2026-10-17 02:04 archive complete2026-10-17 02:04 size=1.8G2026-10-17 02:04 status=success

Журнал не повинен містити зайвих деталей, але має дозволяти зрозуміти, коли завдання запустилося, чи успішно завершилося, скільки часу тривало та який файл резервної копії створило.

Це особливо важливо для непомітних збоїв, коли файл резервної копії існує, але містить застарілі або неповні дані.

Розмір backup теж є сигналом

Порівнюємо розміри останніх файлів резервних копій
du -h /path/to/backups/* ls -lh /path/to/backups/

Якщо резервна копія бази даних зазвичай має приблизно однаковий розмір, а сьогоднішній файл раптом став у десятки разів меншим, це привід перевірити його ще до виникнення проблеми.

Великий розмір також не гарантує правильності резервної копії, але різке відхилення від звичного розміру часто допомагає виявити неповне копіювання даних або зміну переліку даних, що потрапляють до копії.

Стиснений файл потрібно хоча б перевірити на цілісність

gzip може перевірити, що архів не пошкоджений
gzip -t \  /path/to/backups/latest.sql.gz

Це ще не перевірка відновлення даних. Але якщо архів не проходить навіть базову перевірку цілісності, його точно не можна вважати придатною для відновлення резервною копією.

Файл може бути валідним архівом, але не містити потрібних даних

Базова перевірка вмісту резервної копії бази даних
gzip -dc \  /path/to/backups/latest.sql.gz \  | head -100

Команда резервного копіювання могла виконатися без синтаксичних помилок, але створений файл може бути порожнім, містити не ту базу даних або лише частину її структури.

Тому я перевіряю не лише формат архіву, а й наявність очікуваних даних у резервній копії, щоб переконатися, що вона справді містить те, що потрібно відновити.

Головна перевірка - чи backup можна відновити

Стратегія резервного копіювання обов’язково включає перевірку відновлення даних
Файл резервної копії        |        vТимчасова база даних        |        vВідновлення даних        |        vБазові перевірки роботи застосунку

Найважливіше питання не «чи є резервна копія?», а «чи можемо ми відновити з неї працездатну систему?».

Для цього я використовую окрему тимчасову базу даних або ізольоване середовище, відновлюю резервну копію та перевіряю базові умови правильності даних: таблиці існують, ключові записи доступні для читання, а кількість записів відповідає очікуванням.

Перевірка відновлення даних має бути відтворюваною, а не одноразовою ручною процедурою

Приклад відновлення резервної копії в ізольованому середовищі
createdb backup_restore_check gzip -dc \  /path/to/backups/latest.sql.gz \  | psql \      backup_restore_check

Конкретна команда залежить від системи керування базами даних і формату резервної копії.

Але принцип залишається незмінним: процедура відновлення має бути відома та перевірена заздалегідь, а не розроблятися під час аварійної ситуації.

Один останній backup не захищає від логічного пошкодження

Якщо пошкоджені дані потрапили до бази даних учора, а сьогоднішня резервна копія вже містить це пошкодження, останній файл не допоможе повернути систему до стану перед збоєм.

Тому важливо зберігати історію резервних копій за різні дати, щоб мати кілька точок відновлення, а не постійно перезаписувати один файл.

Перевіряємо наявність кількох точок відновлення даних
find /path/to/backups \  -maxdepth 1 \  -type f \  -printf '%TY-%Tm-%Td %p\n' \  | sort

Backup на тому самому сервері не покриває втрату самого сервера

Локальна резервна копія корисна для швидкого відновлення після помилки в даних або невдалого розгортання нової версії.

Але якщо диск пошкоджено, сервер втрачено або файлова система недоступна, основні дані та резервні копії можуть зникнути одночасно.

Тому я окремо перевіряю, чи зберігається резервна копія поза сервером або середовищем, збій якого може призвести до втрати основних даних.

Backup містить production data, тому його теж треба захищати

Резервна копія часто містить значно більше даних, ніж звичайний запит до застосунку може повернути за один раз.

Тому я перевіряю права доступу, коло користувачів, які можуть отримати копію, місце її зберігання, спосіб передавання та, за потреби, шифрування.

Наявність резервної копії не повинна створювати додатковий ризик витоку даних робочої системи.

Резервної копії бази даних може бути недостатньо для повного відновлення системи

Якщо застосунок зберігає завантажені користувачами файли, приватні документи або інші ресурси поза базою даних, її резервна копія не дозволить відновити їх.

Тому резервне копіювання має охоплювати всі важливі дані системи: базу даних, файли у зовнішніх сховищах, секретні налаштування, якщо їх неможливо відновити іншим способом, та інші незамінні файли.

Збій резервного копіювання має бути помітним без необхідності вручну перевіряти сервер

Якщо резервне копіювання перестало працювати вночі, я не хочу дізнатися про це через три тижні під час аварійної ситуації.

Мінімум, який мені потрібен, - журнал помилок і сповіщення про збій. Ще краще - окрема перевірка, яка визначає, чи не минуло більше часу від останнього успішного резервного копіювання, ніж передбачено розкладом.

Я оцінюю резервне копіювання як стан роботи системи, а не просто як наявність файлу

Такий стан резервного копіювання дає значно більше корисної інформації, ніж проста перевірка наявності файлу
Expected frequency: dailyLatest run:        2026-10-17 02:00Latest success:    2026-10-17 02:04Artifact size:     1.8 GBRetention:         14 daily copiesIntegrity check:   PASSLast restore test: 2026-10-12Off-host copy:     YES

Не обов’язково перевіряти відновлення після кожного резервного копіювання, але такі перевірки потрібно проводити регулярно

Щоденна повна перевірка відновлення може потребувати багато ресурсів, але ніколи не перевіряти можливість відновлення ще небезпечніше.

Я хочу мати чіткий графік перевірок: наприклад, регулярну автоматичну перевірку цілісності резервних копій і періодичне повне відновлення даних в ізольованому середовищі.

Конкретна частота залежить від критичності даних і ресурсів, необхідних для відновлення.

Моя production-перевірка backup strategy

  • Відомо, який процес створює резервні копії та як часто він запускається.

  • Остання успішна резервна копія створена відповідно до очікуваного розкладу.

  • Є журнали виконання або інший спосіб визначити успішне завершення чи збій.

  • Розмір останнього файлу резервної копії не має незвичних відхилень.

  • Архів проходить базову перевірку цілісності.

  • Зберігається кілька точок відновлення, а не один файл.

  • Є резервна копія поза основним середовищем зберігання даних.

  • Резервне копіювання охоплює всі незамінні дані системи.

  • Процедура відновлення відома та перевірена.

  • Відомі дата й результат останньої перевірки відновлення.

  • Система автоматично повідомляє про збої резервного копіювання.

Backup доведений тільки тоді, коли restore теж доведений

Файл на диску - це лише результат одного етапу резервного копіювання.

Надійна система резервного копіювання повинна регулярно створювати копії даних, повідомляти про збої, зберігати історію копій і мати перевірену процедуру відновлення.

Тому під час перевірки робочого середовища я більше не запитую «чи є резервна копія?». Я запитую «коли було останнє успішне резервне копіювання, коли перевіряли його результат і чи можемо ми справді відновити з нього систему?».

Backup, який ніколи не відновлювали, - це ще не гарантія відновлення. Це лише файл, на який ми сподіваємося.