489 lines
15 KiB
Markdown
489 lines
15 KiB
Markdown
# 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 (без остановки сервисов) |
|
||
|
||
### 📊 Архитектура
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[Proxmox VE Host<br/>Olimp 192.168.1.220] --> 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**:
|
||
```bash
|
||
# Список бэкапов
|
||
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
|
||
```
|
||
|
||
### Ручной запуск бэкапа
|
||
|
||
**Один контейнер/ВМ**:
|
||
```bash
|
||
vzdump 201 --storage olimpbkp --mode snapshot --compress zstd
|
||
```
|
||
|
||
**Все бэкапируемые системы**:
|
||
```bash
|
||
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**:
|
||
```bash
|
||
# 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**:
|
||
```bash
|
||
# Смонтировать бэкап
|
||
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
|
||
```
|
||
|
||
---
|
||
|
||
## Мониторинг и обслуживание
|
||
|
||
### Проверка статуса бэкапов
|
||
|
||
**Ежедневная проверка**:
|
||
```bash
|
||
# Последние задачи
|
||
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 ежедневно. Вручную:
|
||
|
||
```bash
|
||
# На PBS сервере
|
||
proxmox-backup-manager garbage-collection start olimpbkp
|
||
|
||
# Проверка статуса
|
||
proxmox-backup-manager garbage-collection status olimpbkp
|
||
```
|
||
|
||
### Prune (удаление старых бэкапов)
|
||
|
||
Автоматически по retention политике. Вручную:
|
||
|
||
```bash
|
||
proxmox-backup-manager prune-job run <job-id>
|
||
```
|
||
|
||
### Проверка целостности (Verify)
|
||
|
||
```bash
|
||
# Проверить все бэкапы
|
||
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`
|
||
|
||
### Перенос старых бэкапов (опционально)
|
||
|
||
```bash
|
||
# На новом 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
|
||
|
||
После подтверждения что новые бэкапы работают:
|
||
|
||
```bash
|
||
# На 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
|
||
|
||
### Бэкап не запускается
|
||
|
||
```bash
|
||
# Проверить хранилище
|
||
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
|
||
|
||
```bash
|
||
# Проверить занятое место
|
||
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
|
||
```
|
||
|
||
### Ошибка аутентификации
|
||
|
||
```bash
|
||
# Сгенерировать новый токен
|
||
proxmox-backup-manager user generate-token pve@pbs backup-token
|
||
|
||
# Обновить в Proxmox VE
|
||
pvesm update olimpbkp --password <новый_токен>
|
||
```
|
||
|
||
---
|
||
|
||
## Полезные команды
|
||
|
||
### На Proxmox VE
|
||
|
||
```bash
|
||
# Список хранилищ
|
||
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
|
||
|
||
```bash
|
||
# Список 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
|
||
```
|
||
|
||
---
|
||
|
||
## Метрики и отчётность
|
||
|
||
### Ежедневная проверка
|
||
|
||
```bash
|
||
# Размер бэкапов за сегодня
|
||
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
|
||
```
|
||
|
||
### Еженедельный отчёт
|
||
|
||
```bash
|
||
# Дедупликация
|
||
proxmox-backup-client datastore stats olimpbkp | grep "Deduplication"
|
||
|
||
# Прирост за неделю
|
||
# Сравнить размер datastore с прошлой неделей
|
||
```
|
||
|
||
---
|
||
|
||
**Связанные разделы:**
|
||
- [Гипервизор Proxmox](02-hypervisor.md)
|
||
- [Виртуальные машины и LXC](03-vms-lxcs.md)
|
||
- [Безопасность](10-security.md)
|
||
- [Мониторинг и логирование](08-monitoring.md) |