Бэкапы Nextcloud: правило 3-2-1 на практике
Свой облачный диск интересен до первой потери данных. После неё он становится либо очень надёжным, либо его уже нет. Я дошёл до своей схемы бэкапов не сразу, поэтому опишу её подробно.
Что сохранять
Для полноценного восстановления Nextcloud нужны три вещи:
- Каталог данных с файлами пользователей. Это самая большая часть.
- База данных: метаданные, шары, календари, контакты, настройки приложений. Без неё файлы останутся, но всё остальное потеряется.
- Каталог
configс файломconfig.php. Там лежатinstanceid,passwordsaltиsecret. Без них восстановить установку один в один будет мучительно.
Порядок действий
Чтобы копия была консистентной, я включаю режим обслуживания:
occ maintenance:mode --on
pg_dump -Fc nextcloud > /backup/db/nextcloud-$(date +%F).dump
occ maintenance:mode --off
Дамп PostgreSQL занимает секунды, так что пользователи почти ничего не замечают. Файлы копирую уже после выключения режима обслуживания: в худшем случае пара файлов будет новее, чем записи о них в базе, а это лечится командой occ files:scan.
Для самих файлов я использую restic. Он делает дедупликацию и шифрование, а ещё умеет отправлять копии и на локальный USB-диск, и в удалённое объектное хранилище. Ежедневные снимки хранятся неделю, еженедельные месяц, ежемесячные год.
Правило 3-2-1
Три копии данных, на двух разных типах носителей, одна из них вне дома. У меня это рабочий сервер, внешний диск, который подключается раз в неделю, и зашифрованный репозиторий restic на другой площадке.
Проверка восстановления
Бэкап, который ни разу не восстанавливали, на самом деле надежда, а не бэкап. Раз в квартал я поднимаю на отдельной виртуалке чистый стенд, разворачиваю на нём дамп и файлы и проверяю, что вхожу в систему, вижу файлы и календари. Однажды так я обнаружил, что в архив не попадал каталог config: скрипт исключал все скрытые файлы, а заодно и нужный мне каталог. Хорошо, что это всплыло на учениях, а не после поломки диска.
Мониторинг
Скрипт бэкапа в конце пишет время и код возврата в файл, а простая проверка раз в сутки шлёт мне уведомление, если последний успешный бэкап старше 36 часов. Тихо сломавшийся бэкап — самый опасный.