Почему бэкап может молча не работать: главный принцип диагностики
Диагностика сбоя начинается с журнала задания, однако найденная ошибка еще не доказывает, что последняя резервная копия пригодна для восстановления. Статус Success подтверждает завершение задачи. Он не подтверждает полноту данных, целостность цепочки инкрементальных копий, доступность ключа шифрования и запуск восстановленного сервиса.
Проверяйте резервное копирование в два этапа: локализуйте причину сбоя по логам и выполните тестовое восстановление в изолированной среде. Зафиксируйте фактические RPO, допустимую давность данных, и RTO, допустимое время возврата сервиса в работу. Только такой тест дает основание считать копию рабочей.
Сбой может оставаться незаметным в нескольких сценариях: задание скопировало пустой каталог из-за неверного пути, цепочка инкрементальных архивов потеряла базовую полную копию, хранилище приняло поврежденный файл, а пароль или ключ шифрования не попал в процедуру восстановления. Правило 3-2-1 снижает риск потери: храните минимум три копии на двух типах носителей, одну копию держите вне основной площадки. Практические схемы хранения, ретенции и репликации разобраны в руководстве по резервному копированию в системах хранения.
Критерии приемки задают до запуска проверки: какие объекты восстановить, какую дату данных считать допустимой, какие сервисы должны стартовать и сколько времени может занять процедура.
С чего начать диагностику: собираем улики из логов
Сначала определите точное время последнего успешного и первого неуспешного запуска. Затем сохраните полный лог до повторного запуска задания. Повторная попытка иногда перезаписывает временные файлы, меняет состояние хранилища и скрывает первопричину.
- Запишите идентификатор задания, время старта и завершения, исходный путь, целевое хранилище, объем ожидаемых данных.
- Найдите первую строку с уровнем
ERROR,FATAL,FAILEDили сообщением ядра об ошибке ввода-вывода. - Прочитайте 20-50 строк до нее: там часто указаны файл, сетевой узел, учетная запись или операция, вызвавшая сбой.
- Проверьте код возврата процесса и сопоставьте его с документацией конкретной программы.
- Проверьте журналы ОС и хранилища за тот же временной интервал.
Для заданий через cron вывод обычно отправляется локальной почтой либо перенаправляется в файл из crontab. У systemd сервисов журнал доступен через journalctl. Специализированные продукты часто пишут отдельные журналы в свой каталог, базу заданий или веб-консоль. На Linux полезны системный журнал, сообщения ядра и журнал службы:
journalctl -u backup.service --since "2026-09-05 01:00" --until "2026-09-05 04:00"
journalctl -p err..alert --since "2026-09-05 01:00"
grep -Ei "error|failed|fatal|denied|no space|timeout|i/o" /var/log/backup.log
tail -n 200 /var/log/backup.log
В Windows проверьте «Просмотр событий»: журналы Application, System и записи приложения резервного копирования. Фильтруйте события по времени, уровню Error и имени источника. Сообщения VSS, Disk, NTFS, Volsnap и приложений СУБД часто объясняют сбой лучше, чем итоговый статус задания.
Предупреждение WARNING не всегда останавливает бэкап, однако его нельзя игнорировать. Например, предупреждение о пропущенном файле может сделать архив неполным. Критичность определяют по объекту: пропуск временного каталога допустим, пропуск каталога с ключами, конфигурацией или данными СУБД требует расследования.
Как читать сообщения об ошибках: расшифровка типовых кодов
Код возврата сам по себе редко дает готовое решение. Его смысл зависит от программы, версии и платформы. Сопоставляйте код с названием процесса и ближайшими строками лога, а при поиске используйте запрос из трех частей: имя утилиты, номер версии и полный текст ошибки без имен хостов и секретов.
| Код или сообщение | Что часто означает | Что проверить первым |
|---|---|---|
exit code 1 | Общая ошибка приложения. Причина указана выше в журнале. | Первую строку ERROR, параметры задания, доступ к источнику и получателю. |
exit code 2 | Ошибка параметров, конфигурации или использования утилиты. | Синтаксис команды, путь к конфигурации, переменные окружения, версию инструмента. |
13, Permission denied, Access denied | Запрет доступа. Число 13 часто соответствует ошибке EACCES в Unix-подобных системах. | Права на каждый каталог пути, ACL, владельца процесса, права на хранилище и ключи. |
28, No space left on device | На Linux код 28 часто связан с ENOSPC. У некоторых сетевых клиентов код 28 может означать тайм-аут. | Свободное место, inode, место под временные файлы, текст сообщения и документацию утилиты. |
timeout, connection reset | Разрыв, задержка или отказ удаленного узла. | DNS, маршрут, порт, лимиты соединений, журнал сервера-получателя. |
I/O error, read-only file system | Ошибка носителя, файловой системы или контроллера. | Сообщения ядра, SMART, состояние RAID или ZFS, журнал файловой системы. |
Не ищите причину только в конце отчета. Итоговая строка вида job failed обычно фиксирует результат. Нужна первая ошибка по времени. Если задание использует несколько потоков, сверяйте отметки времени и идентификаторы операций: вторичная ошибка записи часто следует за исходной ошибкой сети или нехваткой места.
Типовые причины сбоев резервного копирования и их устранение
Пять категорий покрывают большую часть инцидентов: права доступа, свободное место, открытые файлы, сеть и состояние носителей. Проверяйте их в указанном порядке после чтения лога. Такой порядок сокращает время диагностики, потому что первые три причины часто выявляются локально и не требуют изменений в production.
Ошибки прав доступа: когда бэкап не может прочитать или записать данные
Симптомы: Permission denied, Access denied, cannot open, operation not permitted, пропуск отдельных файлов или каталогов. Задание может иметь права на файл, однако не иметь права выполнения x на одном из родительских каталогов. В таком случае путь недоступен даже при корректных правах самого файла.
id backup
namei -l /srv/application/data
ls -ld /srv /srv/application /srv/application/data
getfacl -p /srv/application/data
sudo -u backup test -r /srv/application/data/critical-file
sudo -u backup test -w /mnt/backup/.write-test
Создайте отдельную учетную запись для резервного копирования и дайте ей минимально необходимые разрешения. Не запускайте постоянное задание от root только для обхода ошибки: это расширяет последствия компрометации ключа, скрипта или агента.
Назначайте владельца и базовые права осознанно. ACL удобен, когда менять группу владельца нельзя:
chown -R root:backup /srv/application/data
chmod -R g+rX /srv/application/data
setfacl -R -m u:backup:rx /srv/application/data
setfacl -R -d -m u:backup:rx /srv/application/data
Команда с -R затрагивает все вложенные объекты. Перед ее применением проверьте дерево каталогов и требования приложения. Для удаленного хранилища отдельно проверьте SSH-ключ, права ключевого файла, IAM-политику или учетные данные агента. В логах источника и получателя должны быть совпадающие отметки времени.
Нехватка дискового пространства: когда бэкапу некуда записаться
Нехватка места проявляется сообщениями No space left on device, ошибками записи, обрывом архива или файлами нулевого размера. Свободные гигабайты не гарантируют успех: файловая система может исчерпать inode, а промежуточный каталог на другом разделе может заполниться раньше целевого репозитория.
df -hT /mnt/backup /var/tmp
df -i /mnt/backup /var/tmp
du -xhd1 /mnt/backup | sort -h
du -xhd1 /var/tmp | sort -h
Оцените емкость до запуска. Для полного бэкапа требуется место под объем измененных данных, метаданные и временные файлы инструмента. При сжатии фактический коэффициент зависит от типа данных: журналы и текст обычно сжимаются хорошо, уже сжатые образы, медиафайлы и зашифрованные данные почти не уменьшаются.
- Настройте ретенцию: удаляйте копии только после проверки новой точки восстановления.
- Разнесите временный каталог и репозиторий по разделам, если инструмент создает большие промежуточные файлы.
- Используйте инкрементальные схемы, дедупликацию или сжатие, если их поддерживает выбранный инструмент.
- Увеличьте емкость до того, как заполнение достигнет критического порога.
- Контролируйте место и inode отдельными метриками.
Порог оповещения выбирайте с запасом под самый крупный запуск. Для хранилища с ежедневными полными копиями часто нужен запас не менее объема одной ожидаемой точки восстановления. Конкретное значение зависит от политики хранения и скорости роста данных.
Блокировка файлов: когда ОС или приложения мешают копированию
Копирование активного файла может завершиться без ошибки и дать логически неконсистентную копию. Особенно это опасно для файлов баз данных, журналов транзакций, виртуальных дисков и файлов, которые приложение изменяет во время чтения.
На Linux выясните, какой процесс удерживает объект, затем выберите согласованный способ копирования:
lsof /srv/postgresql/data
fuser -vm /srv/application/data
ps aux | grep -E "postgres|mysqld|backup"
Для файловых систем используйте снапшот, созданный средствами LVM, ZFS, Btrfs или системой хранения. Монтируйте снимок только для чтения и копируйте данные из него. Контролируйте свободное место пула: snapshot хранит измененные блоки, поэтому активная запись способна быстро исчерпать емкость.
Для PostgreSQL используйте логический дамп pg_dump либо физическое резервирование штатным инструментом, подходящим для вашей версии и режима репликации. Для MySQL и MariaDB параметр --single-transaction дает согласованный снимок для таблиц InnoDB, однако не защищает таблицы без транзакций. Для Windows используйте VSS через совместимое ПО резервного копирования; прямое копирование открытых файлов СУБД не заменяет согласованный снимок.
После устранения блокировки не ограничивайтесь повторным запуском задания. Восстановите копию в отдельный экземпляр и проверьте запуск сервиса. Это выявит повреждение, которое журнал копирования мог не показать.
Сетевые ошибки: когда данные теряются по пути
Симптомы: timeout, connection reset by peer, broken pipe, ошибки DNS, неполные передачи и резкое падение скорости. Проверяйте имя узла, маршрут, доступность нужного TCP-порта и журнал сервера-получателя. Успешный ping не подтверждает работу SSH, S3-совместимого API или агента резервного копирования.
getent hosts backup.example.internal
ping -c 4 backup.example.internal
traceroute backup.example.internal
nc -vz backup.example.internal 22
ssh -vvv backup@backup.example.internal true
Замените доменное имя в командах на адрес своего хранилища. Не передавайте пароли, токены и закрытые ключи в командной строке или в текстах логов.
Для передачи больших наборов файлов настройте ограниченное число повторных попыток, разумный тайм-аут и возобновление передачи. В rsync полезны частичные файлы и проверка данных при продолжении:
rsync -aP --partial --append-verify /srv/data/ backup@host:/backup/data/
Параметры повторов не исправляют нестабильный канал. Если разрывы повторяются, проверьте MTU, перегрузку канала, правила firewall, лимиты одновременных сессий, срок действия сертификата и лимиты API. Сравните журнал отправителя с журналом получателя: сторона, первой зафиксировавшая отказ, обычно дает полезную точку начала расследования.
Повреждение носителей: когда сам диск подводит
Ошибки I/O error, повторные чтения, переход файловой системы в режим read-only, медленная запись и предупреждения SMART указывают на риск отказа носителя или тракта хранения. Проверяйте диск, кабель, контроллер, RAID, HBA и файловую систему. Замена только диска не поможет, если сбоит контроллер или питание.
smartctl -a /dev/sdX
smartctl -t long /dev/sdX
dmesg -T | grep -Ei "error|i/o|reset|timeout|medium"
zpool status -v
В RAID-массиве проверьте состояние каждого диска и процесс перестроения. В ZFS команда zpool status -v показывает ошибки чтения, записи и контрольных сумм. Репликация и RAID повышают доступность хранилища, однако отдельная резервная копия все равно нужна: повреждение, удаление или шифрование файлов могут попасть на все синхронные реплики.
Запускайте fsck только на размонтированной файловой системе или в режиме, который разрешает документация вашей платформы. Сначала создайте поблочную копию или снимок, если носитель еще читается. При растущем числе ошибок замените носитель до следующего планового бэкапа и проверьте восстановление из независимой копии.
Проверка резервной копии: тестовое восстановление как единственный способ убедиться
Статус задания, размер архива и контрольная сумма файла отвечают на разные вопросы. Они не подтверждают, что сервис запустится с восстановленными данными. Тестовое восстановление должно проходить в изолированной сети или на отдельном стенде без доступа к production, чтобы восстановленная СУБД, очередь, почта или веб-приложение не начали работать с боевыми системами.
- Определите критичный объект: файлы, базу данных, виртуальную машину, конфигурацию, секреты или весь сервис.
- Выберите контрольную копию с датой, которая укладывается в RPO.
- Подготовьте изолированный стенд с совместимой версией ОС, СУБД и приложения.
- Восстановите объект по документированной процедуре, включая расшифровку и все части цепочки инкрементов.
- Проверьте полноту, контрольные суммы, права, схему БД и критичные записи.
- Запустите зависимые сервисы без подключения к production.
- Зафиксируйте время, ошибки, фактические RPO и RTO, а затем оформите итоговый статус.
Подробный регламент с примерами проверки файлов, баз данных и настроек доступен в инструкции по тестовому восстановлению резервных копий. Сохраняйте журналы восстановления, контрольные результаты и сведения о версии ПО. Эти записи позволяют сравнить тесты между собой и быстрее расследовать будущий инцидент.
Что именно проверять: чек-лист для разных типов данных
| Тип объекта | Минимальная проверка | Признак успешного теста |
|---|---|---|
| Файлы | Структура каталогов, размер, контрольные суммы, права, выборочное открытие критичных файлов. | Файлы читаются, хеши совпадают, нужные учетные записи имеют ожидаемый доступ. |
| База данных | Импорт в отдельный экземпляр СУБД, схема, количество критичных записей, запросы приложения. | СУБД запускается, проверки проходят, прикладной сценарий работает с тестовой базой. |
| Конфигурация | Синтаксис конфигов, секреты, сертификаты, права доступа, старт сервисов. | Сервисы запускаются без критичных ошибок и не подключаются к production. |
| Виртуальная машина | Загрузка ОС, сетевые настройки в изолированной сети, диски, системные службы. | ОС загружается, критичные службы переходят в рабочее состояние за время RTO. |
Быстрая проверка целостности полезна между полными тестами. Проверяйте контрольные суммы, тестируйте чтение архива, монтируйте копию в режиме read-only и используйте штатную команду проверки репозитория выбранного инструмента. Быстрые проверки не заменяют запуск восстановленного сервиса.
sha256sum -c manifest.sha256
tar -tzf backup.tar.gz > /dev/null
Для зашифрованных копий проверьте доступность ключа до аварии. Храните его отдельно от основного хранилища, документируйте порядок получения и ограничьте доступ. Потерянный ключ делает технически целую копию бесполезной.
Автоматизация проверки: как встроить тестовое восстановление в регулярный процесс
Автоматизируйте повторяемые проверки: создание временной среды, восстановление контрольного набора, запуск тестов, сбор логов, удаление стенда и отправку результата. Полное восстановление всех сервисов можно выполнять реже, а проверку доступности репозитория и контрольных сумм - после каждого задания.
Подходящий график зависит от критичности системы. Для базы с RPO 24 часа ежемесячный тест не подтвердит, что ежедневная цепочка инкрементов восстанавливается. Для критичных сервисов добавьте регулярные тесты на свежей копии и отдельные сценарии восстановления всей площадки. Измеряйте длительность каждой фазы: получение копии, расшифровка, восстановление, старт сервисов, прикладная проверка.
Скрипт проверки должен завершаться ненулевым кодом при любой критичной ошибке. CI/CD-система, планировщик или средство резервного копирования затем отправит алерт. Для заданий на Linux с rsync, BorgBackup, Rclone и cron либо systemd используйте готовые подходы из руководства по резервному копированию сервера и автотестам восстановления.
Мониторинг и алерты: как узнавать о проблемах до того, как они станут критичными
Мониторинг должен видеть не один признак «задание завершилось». Собирайте длительность запуска, код возврата, время последнего успешного бэкапа, объем переданных данных, свободное место и inode, доступность хранилища, возраст последнего успешного тестового восстановления и ошибки проверки целостности.
| Метрика | Пример условия алерта | Действие после уведомления |
|---|---|---|
| Последний успешный бэкап | Старше RPO | Проверить планировщик, лог и доступность источника. |
| Код возврата | Не равен 0 | Сохранить журнал и найти первую ошибку. |
| Свободное место и inode | Ниже согласованного запаса | Проверить ретенцию, рост данных и временный каталог. |
| Объем копии | Резко ниже или выше обычного диапазона | Сверить список источников, исключения и изменения данных. |
| Проверка восстановления | Последний успешный тест устарел | Запланировать тест на актуальной точке восстановления. |
Zabbix, Prometheus и встроенные средства продукта подходят для сбора таких метрик. Уведомления отправляйте в почту, Telegram, Slack или систему обработки инцидентов. У каждого алерта должны быть владелец, уровень срочности и ссылка на внутреннюю инструкцию с первыми командами диагностики.
Для резервной площадки и хранения копий можно использовать облачную инфраструктуру с масштабируемыми ресурсами, например Timeweb Cloud. Перед размещением копий проверьте шифрование, сетевой доступ, политику хранения, стоимость исходящего трафика и процедуру восстановления в отдельной среде.
Чек-лист быстрой диагностики сбоя резервного копирования
- Зафиксируйте время инцидента, имя задания, исходный путь, хранилище и код возврата.
- Сохраните полный лог, найдите первую строку
ERROR,FAILEDили ошибку ядра. - Проверьте свободное место и inode на целевом разделе и во временном каталоге через
df -hTиdf -i. - Проверьте права учетной записи бэкапа на источник, все родительские каталоги и получатель.
- Проверьте активные процессы и согласованность копирования открытых файлов.
- Проверьте DNS, маршрут, TCP-порт, журнал удаленного хранилища и повторяющиеся сетевые разрывы.
- Проверьте SMART, сообщения ядра, состояние RAID или ZFS при ошибках ввода-вывода.
- После исправления причины создайте новую контрольную копию.
- Восстановите ее на изолированный стенд, проверьте целостность, запуск сервисов, RPO и RTO.
- Сохраните логи, результат теста, время восстановления и изменения в конфигурации.
Повторяющийся сбой требует изменения процесса: добавьте метрику, алерт, проверку конфигурации или тест восстановления. Закрывайте инцидент после подтверждения восстановимости, а не после исчезновения красного статуса в панели резервного копирования.