Бэкапы VPS: снапшоты, копии в S3 и restic — что выбрать и как настроить
Чем снапшот отличается от копии в S3 и от restic, как настроить резервное копирование каталогов и баз на VPS, проверить восстановление и не потерять данные при падении сервера.
Содержание 20
- Коротко
- Три слоя защиты
- Как это выглядит в кабинете EGN
- Настройка restic с S3
- Резервная копия каталогов
- Срок хранения и очистка
- Расписание через cron
- Проверка восстановления
- Симптом → причина → решение
- Примеры
- Что будет при переустановке
- Что копировать и как часто
- Симптом → причина → решение (восстановление)
- Частые ошибки
- Итог
- Вопросы и ответы
- Снапшот — это то же самое, что бэкап?
- Сколько хранить копий?
- Можно ли обойтись без restic?
- Как часто делать копии?
Самая дорогая ошибка на VPS — отсутствие копий. Сервер можно случайно удалить, испортить обновлением или потерять вместе с машиной, на которой он работает. Поэтому бэкап — не опция, а часть настройки. Вопрос только в том, какой вариант выбрать и как проверить, что он работает.
Коротко
Снапшот — это быстрый откат всего диска на момент снимка, но он хранится на той же ноде и может пропасть вместе с ней. Копия в отдельном хранилище S3 переживает падение сервера. restic создаёт зашифрованные версии каталогов в S3 или на другом диске и управляет сроком хранения. Для надёжности комбинируйте: снапшот перед обновлением и restic по расписанию.
Три слоя защиты
Каждый вариант отвечает на свой вопрос. Снапшот отвечает на вопрос «как откатиться за минуту»: перед обновлением ядра или большой правкой конфигов вы снимаете снапшот и при ошибке возвращаете диск. Копия в S3 отвечает на вопрос «что делать, если сервер пропал»: данные лежат в другом месте, и их можно развернуть на новом VPS. restic отвечает на вопрос «какая версия файла была неделю назад» и даёт шифрование, дедупликацию и проверку целостности.
Важное различие: снапшот не заменяет копию. В кабинете EGN это прямо сказано в описании вкладки «Бэкапы»: копия диска хранится в отдельном хранилище S3, вне сервера и его ноды, и переживает потерю сервера. Снапшоты при этом лежат на локальном хранилище ноды.
Как это выглядит в кабинете EGN
В карточке VPS есть две вкладки: «Снапшоты» и «Бэкапы». Первая нужна для быстрых откатов, вторая — для копий в S3. На вкладке «Бэкапы» доступны две категории: «Горячее» с быстрым восстановлением и «Холодное», которое дешевле, но восстанавливается медленнее. Кнопка «Сделать копию сейчас» запускает копию вручную, а блок «Копии по расписанию» задаёт автоматику. Снапшоты оплачиваются по фактическому размеру снимка, списание идёт ежедневно, и у сервера есть лимит числа снапшотов, поэтому ненужные удаляйте. Актуальные цены и лимиты показаны в самой карточке.
Порядок действий в панели:
- Откройте карточку сервера в разделе «Облачные серверы».
- Перейдите на вкладку «Бэкапы» и выберите тип хранения: горячее для часто меняющихся данных, холодное для архивов.
- Нажмите «Сделать копию сейчас» перед важной операцией и дождитесь статуса готовности.
- Настройте расписание, если копии нужны регулярно. Если расписание выключено, копии делаются только вручную, и про них легко забыть.
- На вкладке «Снапшоты» создавайте снимок перед обновлением системы и удаляйте его, когда убедились, что всё работает.
Настройка restic с S3
restic — программа для резервного копирования, которая хранит данные в зашифрованном репозитории. Установите её и создайте репозиторий в S3. Пример для S3-совместимого хранилища:
sudo apt install -y restic
export RESTIC_REPOSITORY=s3:https://s3.example.com/vps-backups
export RESTIC_PASSWORD_FILE=/root/.restic-pass
export AWS_ACCESS_KEY_ID=ваш-ключ
export AWS_SECRET_ACCESS_KEY=ваш-секрет
restic initЭти же четыре строки удобно положить в файл /root/.restic-env (права 600) и подключать командой source /root/.restic-env.
Пароль репозитория сохраните в файл /root/.restic-pass с правами 600. Потерять пароль нельзя: восстановить данные без него невозможно. Ключи доступа к S3 держите в отдельном файле с правами 600 (ниже /root/.restic-env), а не в скриптах, которые попадают в git.
Для локального теста можно создать репозиторий на другом диске:
restic -r /srv/restic-test initРезервная копия каталогов
Копируйте не всё подряд, а то, что нельзя восстановить заново: конфиги, данные приложений, дампы баз, а не системные каталоги. Пример для сайта и настроек nginx:
restic backup /var/www /etc/nginx /root/backups
restic snapshotsКоманда restic snapshots выводит список версий с идентификаторами и датами. Каждая новая копия хранит только изменившиеся блоки, поэтому повторные запуски занимают мало места.
Срок хранения и очистка
Без политики хранения репозиторий растёт бесконечно. Команда forget удаляет старые версии по правилам, а --prune освобождает место:
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --pruneЭта команда оставляет семь последних дневных копий, четыре недельные и шесть месячных. Перед первым запуском посмотрите, что будет удалено, добавив --dry-run.
Расписание через cron
Запускайте резервное копирование по расписанию. Скрипт /root/restic-backup.sh подключает файл с переменными, выполняет backup и forget. Затем добавьте его в cron:
#!/bin/bash
set -e
source /root/.restic-env
restic backup /var/www /etc/nginx /root/backups
restic forget --keep-daily 7 --keep-weekly 4 --prunesudo chmod 700 /root/restic-backup.sh
sudo crontab -eСтрока для cron, которая запускает скрипт каждый день в 3:15:
15 3 * * * /root/restic-backup.sh >> /var/log/restic-backup.log 2>&1Лог поможет понять, что пошло не так, если копия перестала создаваться.
Проверка восстановления
Копия, которую не восстанавливали, не считается. Раз в месяц проверяйте восстановление на отдельном каталоге:
restic check
restic restore latest --target /root/restore-test --include /etc/nginx
ls /root/restore-test/etc/nginxrestic check проверяет целостность репозитория, а восстановление в тестовый каталог показывает, что файлы действительно извлекаются. После проверки удалите каталог /root/restore-test.
Симптом → причина → решение
| Симптом | Частая причина | Что сделать |
|---|---|---|
Fatal: wrong password |
Пароль в файле не совпадает с репозиторием | Проверьте RESTIC_PASSWORD_FILE, пароль нельзя восстановить |
Fatal: unable to open config file |
Неверный адрес или ключи S3 | Проверьте RESTIC_REPOSITORY и ключи доступа |
| Копия растёт слишком быстро | Бэкапят кеши, логи и временные файлы | Исключите их через --exclude |
| Старые версии не удаляются | forget запускали без --prune |
Добавьте --prune или запустите restic prune |
| Cron не создаёт копии | Скрипт не выполняется или нет переменных | Смотрите /var/log/restic-backup.log и запускайте скрипт вручную |
| После отката снапшота пропали свежие изменения | Откат возвращает диск на момент снимка, всё позднее теряется | Снимайте снапшот непосредственно перед операцией, а данные, изменённые после него, сохраняйте отдельно |
Примеры
Обновление ядра. Снимите снапшот, выполните обновление, перезагрузите сервер. Если система не поднялась, откатитесь на снапшот. Сразу после успешной проверки снапшот можно удалить.
Переезд сайта на другой VPS. Сделайте restic-копию каталогов и дамп базы, разверните их на новом сервере командой restic restore latest --target /, восстановите базу по дампу. Этот сценарий отрабатывает раз, когда вы переносите сервис.
Удалили файл по ошибке. Найдите версию командой restic snapshots, затем восстановите конкретный файл: restic restore <id> --target /root/restore-test --include /var/www/index.html.
Что будет при переустановке
Переустановка ОС на VPS удаляет файлы, базы и настройки на диске. Снапшоты и резервные копии при этом остаются, и к ним можно вернуться (так сказано в окне подтверждения переустановки в кабинете). Копии restic во внешнем S3 тоже не затрагиваются: после переустановки поставьте restic и выполните restic restore.
Что копировать и как часто
Разные данные меняются с разной скоростью, поэтому и копировать их нужно по-разному:
| Что | Как часто | Куда | Срок хранения |
|---|---|---|---|
| Дамп базы | раз в сутки | S3 через restic | 7 дней, 4 недели, 6 месяцев |
| Каталог сайта и загрузки | раз в сутки | S3 через restic | 7 дней, 4 недели |
| Конфиги nginx, cron, systemd | раз в неделю и перед правкой | S3 через restic | 4 недели |
| Снапшот VPS | перед обновлением ядра или крупной правкой | в кабинете | до проверки результата |
| Миры и файлы игрового сервера | по расписанию игры или раз в сутки | S3 или снапшот | 7 дней и 4 недели |
Таблица не универсальная: сверяйтесь с тем, сколько данных вы готовы потерять. Если сайт меняется каждый час, копируйте чаще.
Симптом → причина → решение (восстановление)
| Симптом | Причина | Решение |
|---|---|---|
restic restore завершился, но файлов нет |
Указан неверный --target или --include |
Выведите список restic ls latest, проверьте пути |
| Восстановленная база не поднимается | Дамп снят с другой версии PostgreSQL | Восстанавливайте на ту же версию или выполните миграцию |
| Права файлов после восстановления неверные | restic сохраняет владельца, но не всегда в новой системе | Проверьте chown для каталогов приложения после восстановления |
Частые ошибки
- Снапшот принимают за бэкап. Снапшот на той же ноде не спасёт при её потере. Нужна отдельная копия.
- Пароль restic хранят в скрипте. Файл с паролем должен иметь права 600 и не попадать в git.
- Копируют всё подряд. Системные каталоги проще восстановить переустановкой, а конфиги и данные нужно сохранить.
- Не проверяют восстановление. Через полгода выясняется, что копии пустые или повреждены.
- Дампы баз не делают отдельно. Копия каталога с работающей базой может быть несогласованной, поэтому используйте дамп, как описано в статье База данных на VPS: MySQL или PostgreSQL без утечек в интернет.
- Не следят за местом. Растущий репозиторий без
forgetв какой-то момент упрётся в лимит.
Итог
Работающая схема бэкапов VPS состоит из трёх частей: снапшот для быстрого отката, копия в S3 на случай потери сервера и restic с расписанием и политикой хранения. Проверяйте восстановление раз в месяц. Если сервер ставится под игры, посмотрите статью Игровой сервер на VPS или хостинг игр, там разобрано, когда копии делает панель, а когда вам.
Вопросы и ответы
Снапшот — это то же самое, что бэкап?
Нет. Снапшот хранится на той же ноде и откатывает диск, а копия в S3 лежит отдельно и переживает падение сервера.
Сколько хранить копий?
Для большинства проектов хватает семи ежедневных, четырёх недельных и шести месячных. Для важных данных добавьте ещё годовые.
Можно ли обойтись без restic?
Да, если вы копируете один каталог и вам достаточно архива через tar. restic нужен, когда важны версии, шифрование и проверка целостности.
Как часто делать копии?
Для данных, которые меняются каждый час, ежечасно или чаще. Для сайта и конфигов обычно хватает раза в сутки.
Сервер под игры за пару минут — egnetwork.ru
Читать далее
Вся рубрика →10G VPS в Польше: что это даёт и чего ждать
Что известно о линейке 10G VPS в Польше: сетевой порт до 10 Гбит/с, локальный NVMe без RAID, ежедневная копия системного диска и IPv6. Без цен и без обещаний, которых пока нет.
Мониторинг ресурсов VPS: htop, iotop и vnstat
Как за несколько минут понять, что тормозит VPS: процессор, память, диск или сеть. Команды htop, iotop, vnstat, free и df с примерами вывода и таблицей симптомов.
Трафик VPS: как посчитать объём и не получить сюрприз в конце месяца
Что считается трафиком, как перевести скорость канала в терабайты за месяц, как читать счётчик входящего и исходящего трафика в кабинете EGN и что делать, если лимит закончился.