Docs/docs/11-backup.md
2026-04-11 18:43:02 +05:00

15 KiB
Raw Blame History

11. Резервное копирование

Обзор

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

Текущий статус (апрель 2026): Настроена полнофункциональная система резервного копирования на базе Proxmox Backup Server

  • Отдельный физический сервер PBS (192.168.1.199)
  • Хранилище 1 TB с дедупликацией и компрессией
  • Автоматические бэкапы всех критичных систем
  • Протестированное восстановление

Текущее состояние

Настроено и работает

Компонент Статус Описание
Proxmox Backup Server Отдельный сервер (Olimpbs, 192.168.1.199)
Хранилище 1 TB (LVM), datastore olimpbkp
Бэкапы ВМ/LXC Автоматические, по расписанию
Дедупликация Встроена в PBS
Компрессия ZSTD (fast and good)
Расписание 2 раза в день (02:30 и 22:30)
Retention 14 последних, 7 ежедневных, 4 недельных, 4 месячных
Режим Snapshot (без остановки сервисов)

📊 Архитектура

graph TD
    A["Proxmox VE Host<br/>Olimp 192.168.1.200"] --> B["LXC Containers<br/>201-211"]
    A --> C["Virtual Machines<br/>205, 213"]
    A -->|Network| D["Proxmox Backup Server<br/>Olimpbs 192.168.1.199"]
    D --> E["Datastore: olimpbkp<br/>1 TB LVM"]
    E --> F["/var/lib/proxmox-backup/olimpbkp"]

Что бэкапится

LXC Контейнеры (10 шт.)

ID Имя Тип данных Примерный размер
201 gateway Конфигурации, прокси ~5 GB
202 data Базы данных (BookStack, Mealie) ~10 GB
203 media Конфигурации Jellyfin, метаданные ~60 GB*
204 photo Immich конфиги ~20 GB
206 talk Matrix, XMPP конфиги ~10 GB
207 games Конфигурации игровых серверов ~20 GB
208 manage Grafana, Loki, мониторинг ~15 GB
209 git GitLab репозитории ~30 GB
210 ansible Ansible конфиги, vault ~5 GB
211 torrent qBittorrent настройки ~5 GB

*Без медиафайлов (исключены из бэкапа)

Виртуальные машины (2 шт.)

ID Имя Тип данных Примерный размер
205 Nextcloud Файлы, БД PostgreSQL ~10 GB
213 VPN OpenVPN/WireGuard конфиги ~12 GB

Исключено из бэкапа

  • Большие диски (16 TB RAID6): медиафайлы, игры, загрузки
  • Причина: занимают слишком много места, можно восстановить из источников
  • Что включено: только конфигурации и метаданные (через backup=1)

Расписание бэкапов

Автоматическое расписание

Два раза в день:

  • 02:30 — ночной бэкап
  • 22:30 — вечерний бэкап

Proxmox Backup Server автоматически определяет:

  • Первый бэкап — полный
  • Последующие — инкрементальные (только изменения)
  • Периодически — полный для целостности данных

Retention политика

Тип хранения Количество Фактический срок
Keep Last 14 Минимум 14 последних бэкапов
Keep Daily 7 7 ежедневных копий
Keep Weekly 4 4 недельных копии
Keep Monthly 4 4 месячных копии

Итого: ~1-2 месяца истории бэкапов


Текущая конфигурация

На Proxmox VE (Olimp)

Хранилище подключено:

  • ID: olimpbkp
  • Тип: Proxmox Backup Server
  • Server: 192.168.1.199:8007
  • Datastore: olimpbkp
  • Content: Backup
  • Status: Enabled

Backup Job:

Node: Olimp
Storage: olimpbkp
Schedule: 02:30, 22:30 (daily)
Mode: Snapshot
Compression: ZSTD
VM/CT: 201-211, 205, 213
Retention: keep-last=14, keep-daily=7, keep-weekly=4, keep-monthly=4

На PBS (Olimpbs)

Datastore:

Name: olimpbkp
Path: /var/lib/proxmox-backup/olimpbkp
Size: 1 TB (912 GB available)
GC Schedule: daily
Prune Schedule: daily

Пользователи:

  • root@pam — администратор (веб-интерфейс)
  • pve@pbs — для Proxmox VE (API токен)

Управление бэкапами

Просмотр бэкапов

Через веб-интерфейс PBS:

https://192.168.1.199:8007
  → Datastore → olimpbkp → Content

Через Proxmox VE:

https://192.168.1.220:8006
  → Datacenter → Storage → olimpbkp → Content

Через CLI:

# Список бэкапов
proxmox-backup-client list --repository root@pam@192.168.1.199:8007:olimpbkp

# Детальная информация
proxmox-backup-client show-backup --repository root@pam@192.168.1.199:8007:olimpbkp ct/201

# Статистика datastore
proxmox-backup-client datastore stats olimpbkp

Ручной запуск бэкапа

Один контейнер/ВМ:

vzdump 201 --storage olimpbkp --mode snapshot --compress zstd

Все бэкапируемые системы:

for id in 201 202 203 204 205 206 207 208 209 210 211 213; do
  vzdump $id --storage olimpbkp --mode snapshot --compress zstd &
done
wait

Восстановление из бэкапа

Через веб-интерфейс Proxmox VE:

  1. Datacenter → Storage → olimpbkp → Content
  2. Выбрать бэкап → Restore
  3. Указать:
    • Storage: целевое хранилище (local-lvm, vmsystem)
    • VMID: новый ID (или существующий для перезаписи)
  4. Start

Через CLI:

# LXC контейнер
pct restore 216 olimpbkp:backup/ct/201/2026-04-11T13:19:03Z --storage local-lvm

# Виртуальная машина
qm restore 216 olimpbkp:backup/vm/205/2026-04-11T13:19:03Z --storage vmsystem

Восстановление отдельных файлов

Через File Restore:

  1. PBS веб-интерфейс → Datastore → Content
  2. Выбрать бэкап → File Restore
  3. Смонтировать бэкап
  4. Скачать нужные файлы
  5. Unmount

Через CLI:

# Смонтировать бэкап
mkdir -p /mnt/restore
proxmox-backup-client mount ct/201/2026-04-11T13:19:03Z /mnt/restore \
  --repository root@pam@192.168.1.199:8007:olimpbkp

# Скопировать файлы
cp /mnt/restore/root.pxar/etc/config/file.conf /tmp/

# Размонтировать
proxmox-backup-client unmount /mnt/restore

Мониторинг и обслуживание

Проверка статуса бэкапов

Ежедневная проверка:

# Последние задачи
pvesm status olimpbkp

# Логи бэкапов
tail -f /var/log/pve/tasks/*

# Проверка места на PBS
ssh root@192.168.1.199 "df -h /var/lib/proxmox-backup/olimpbkp"

Garbage Collection (очистка)

PBS автоматически запускает GC ежедневно. Вручную:

# На PBS сервере
proxmox-backup-manager garbage-collection start olimpbkp

# Проверка статуса
proxmox-backup-manager garbage-collection status olimpbkp

Prune (удаление старых бэкапов)

Автоматически по retention политике. Вручную:

proxmox-backup-manager prune-job run <job-id>

Проверка целостности (Verify)

# Проверить все бэкапы
proxmox-backup-manager verify olimpbkp

# Проверить конкретный бэкап
proxmox-backup-client verify ct/201/2026-04-11T13:19:03Z \
  --repository root@pam@192.168.1.199:8007:olimpbkp

Миграция со старого PBS

История

Март 2026: PBS был развёрнут в LXC контейнере (CT 220) на том же хосте Olimp

  • Хранилище: ZFS dataset rpool/pbs-backups (187 GB)
  • Datastore: ssd-backups

Апрель 2026: Развёрнут отдельный физический сервер PBS (Olimpbs)

  • Хранилище: 1 TB LVM
  • Datastore: olimpbkp

Перенос старых бэкапов (опционально)

# На новом PBS
mkdir -p /mnt/old-pbs
sshfs root@192.168.1.220:/rpool/pbs-backups /mnt/old-pbs

# Копирование
rsync -avh /mnt/old-pbs/data/ /var/lib/proxmox-backup/olimpbkp/

# Исправление прав
chown -R backup:backup /var/lib/proxmox-backup/olimpbkp

# Перезапуск
systemctl restart proxmox-backup-proxy

Удаление старого PBS

После подтверждения что новые бэкапы работают:

# На Proxmox VE (Olimp)
pvesm remove pbs-ssd

# Удалить dataset
zfs destroy rpool/pbs-backups

# Удалить LXC контейнер (опционально)
pct stop 220
pct destroy 220

Безопасность

Аутентификация

  • PBS пользователи: root@pam, pve@pbs
  • API токены: для автоматизации (без паролей)
  • Fingerprint: SHA-256 отпечаток сертификата

Сетевая безопасность

  • Порт: 8007 (TCP)
  • Шифрование: TLS 1.3
  • Доступ: только из локальной сети (192.168.1.0/24)

Рекомендации

  • Включить 2FA для root@pam
  • Создать отдельного пользователя для бэкапов (не root)
  • Настроить firewall на PBS сервере
  • Регулярно обновлять систему (unattended-upgrades)

Планы на будущее

🔵 Краткосрочные (1-2 месяца)

  • Настроить уведомления (email/telegram) о статусе бэкапов
  • Включить 2FA для доступа к PBS
  • Настроить репликацию в облако (Backblaze B2 / Wasabi)
  • Провести тестовое восстановление всех критичных ВМ

🔵 Долгосрочные (3-6 месяцев)

  • Добавить второй PBS для репликации
  • Настроить оффсайт-копии (внешний диск + облако)
  • Внедрить шифрование бэкапов на стороне клиента
  • Автоматизировать тестирование восстановления

Troubleshooting

Бэкап не запускается

# Проверить хранилище
pvesm status | grep olimpbkp

# Проверить подключение к PBS
ping 192.168.1.199
nc -zv 192.168.1.199 8007

# Переподключить хранилище
pvesm remove olimpbkp
pvesm add proxmox-backup olimpbkp \
  --server 192.168.1.199 \
  --datastore olimpbkp \
  --username pve@pbs

Закончилось место на PBS

# Проверить занятое место
proxmox-backup-client datastore stats olimpbkp

# Запустить GC
proxmox-backup-manager garbage-collection start olimpbkp

# Удалить старые бэкапы вручную
proxmox-backup-client prune \
  --repository root@pam@192.168.1.199:8007:olimpbkp \
  --max-daily 7 --max-weekly 2

Ошибка аутентификации

# Сгенерировать новый токен
proxmox-backup-manager user generate-token pve@pbs backup-token

# Обновить в Proxmox VE
pvesm update olimpbkp --password <новый_токен>

Полезные команды

На Proxmox VE

# Список хранилищ
pvesm list

# Статус бэкап хранилища
pvesm status olimpbkp

# Запустить бэкап
vzdump <vmid> --storage olimpbkp --mode snapshot

# Восстановить
pct restore <new-vmid> olimpbkp:backup/ct/<ctid>/<timestamp>
qm restore <new-vmid> olimpbkp:backup/vm/<vmid>/<timestamp>

На PBS

# Список datastore
proxmox-backup-manager datastore list

# Статистика
proxmox-backup-client datastore stats olimpbkp

# Список бэкапов
proxmox-backup-client list --repository root@pam@192.168.1.199:8007:olimpbkp

# Информация о бэкапе
proxmox-backup-client show-backup ct/201 --repository root@pam@192.168.1.199:8007:olimpbkp

# Проверка целостности
proxmox-backup-manager verify olimpbkp

# Garbage collection
proxmox-backup-manager garbage-collection start olimpbkp

Метрики и отчётность

Ежедневная проверка

# Размер бэкапов за сегодня
du -sh /var/lib/proxmox-backup/olimpbkp/data/*

# Количество бэкапов
proxmox-backup-client list --repository root@pam@192.168.1.199:8007:olimpbkp | wc -l

# Свободное место
df -h /var/lib/proxmox-backup/olimpbkp

Еженедельный отчёт

# Дедупликация
proxmox-backup-client datastore stats olimpbkp | grep "Deduplication"

# Прирост за неделю
# Сравнить размер datastore с прошлой неделей

Связанные разделы: