PVE/Backup Server
Proxmox Backup Server (PBS) — клиент-серверное решение для резервного копирования и восстановления виртуальных машин, контейнеров и физических узлов. Решение оптимизировано для проекта PVE и позволяет безопасно создавать резервные копии. Поддерживается инкрементное резервное копирование с полной дедупликацией, что значительно снижает нагрузку на сеть и экономит пространство для хранения.
Сервер резервного копирования хранит данные резервного копирования и предоставляет API для создания хранилищ данных и управления ими. С помощью API также можно управлять дисками и другими ресурсами на стороне сервера. Клиент резервного копирования использует этот API для доступа к резервным данным.
Одна резервная копия может содержать несколько архивов. Например, при резервном копировании ВМ каждый диск сохраняется как отдельный архив внутри этой резервной копии. Сама конфигурация ВМ хранится в виде дополнительного файла.
Установка
Минимальные требования к серверу (предназначены только для тестирования):
- CPU: 64bit (x86-64 или AMD64), 2+ Ядра
- ОЗУ: 2 ГБ
- Диск: от 8 ГБ
- Сеть: 1 интерфейс
Рекомендуемые требования к серверу:
- CPU: 64bit, 4 Ядра
- ОЗУ: 4 ГБ (+1 ГБ на каждый ТБ дискового пространства)
- Диск: от 32 ГБ + резервное хранилище
- Сеть: 1 интерфейс + резервирование
Установить сервер резервного копирования PVE можно следующей командой:
# apt-get install proxmox-backup-server
Запустить и добавить в автозагрузку Proxmox Backup API Proxy Server:
# systemctl enable --now proxmox-backup-proxy.service
Включить модуль можно следующей командой:
# modprobe zfs
Чтобы не вводить эту команду после перезагрузки, следует раскомментировать строку:
#zfsв файле /etc/modules-load.d/zfs.conf.
Веб-интерфейс
PBS предлагает интегрированный веб-интерфейс для управления сервером. Все административные задачи можно выполнять в веб-браузере. Веб-интерфейс также предоставляет встроенную консоль.
Веб-интерфейс PBS доступен по адресу https://<ip-адрес/имя>:8007. Потребуется пройти аутентификацию (логин по умолчанию: root, пароль указывается в процессе установки).
Хранилище данных
Управление дисками
Увидеть диски, подключенные к системе, можно в веб-интерфейсе «Управление» → «Storage/Disks» («Хранилище/Диски»):
Также можно воспользоваться командой:
# proxmox-backup-manager disk list
┌─────────┬────────────┬─────┬───────────┬─────────────┬──────────────────────┬─────────┬─────────┐
│ name │ used │ gpt │ disk-type │ size │ model │ wearout │ status │
╞═════════╪════════════╪═════╪═══════════╪═════════════╪══════════════════════╪═════════╪═════════╡
│ nvme0n1 │ zfs │ 1 │ ssd │ 21474836480 │ ORCL-VBOX-NVME-VER12 │ 0.00 % │ passed │
├─────────┼────────────┼─────┼───────────┼─────────────┼──────────────────────┼─────────┼─────────┤
│ nvme0n2 │ zfs │ 1 │ ssd │ 21474836480 │ ORCL-VBOX-NVME-VER12 │ 0.00 % │ passed │
├─────────┼────────────┼─────┼───────────┼─────────────┼──────────────────────┼─────────┼─────────┤
│ sda │ mounted │ 0 │ ssd │120034123776 │ GOODRAM │ 0.00 % │ passed │
├─────────┼────────────┼─────┼───────────┼─────────────┼──────────────────────┼─────────┼─────────┤
│ sdb │ partitions │ 0 │ hdd │ 62914560000 │ USB_DISK_2.0 │ - │ unknown │
└─────────┴────────────┴─────┴───────────┴─────────────┴──────────────────────┴─────────┴─────────┘
Создание файловой системы ext4 или xfs на диске в веб-интерфейсе:
Создание файловой системы в командной строке (создать файловую систему ext4 и хранилище данных на диске nvme0n3,хранилище данных будет создано по адресу /mnt/datastore/store2):
# proxmox-backup-manager disk fs create store2 --disk nvme0n3 --filesystem ext4 --add-datastore true
create datastore 'store2' on disk nvme0n3
Chunkstore create: 1%
Chunkstore create: 2%
…
Chunkstore create: 99%
TASK OK
Для создания хранилища ZFS в веб-интерфейсе, следует в разделе «Storage/Disks» перейти на вкладку «ZFS» и нажать кнопку «Создать: ZFS». В открывшемся окне следует задать параметры ZFS хранилища: имя хранилища, выбрать диски, уровень RAID и нажать кнопку «OK»:
Команда для создания зеркального zpool с использованием двух дисков и монтированием в /mnt/datastore/zfs_st:
# proxmox-backup-manager disk zpool create zfs_st --devices nvme0n1,nvme0n2 --raidlevel mirror
Хранилище данных
Хранилище данных — это место, где хранятся резервные копии. Текущая реализация использует каталог внутри стандартной файловой системы (ext4, xfs или zfs) для хранения данных резервного копирования. Информация о конфигурации для хранилищ данных хранится в файле /etc/proxmox-backup/datastore.cfg.
Необходимо настроить как минимум одно хранилище данных. Хранилище данных идентифицируется именем и указывает на каталог в файловой системе. Каждое хранилище данных имеет связанные параметры хранения, определяющие количество моментальных снимков резервных копий для каждого интервала (ежечасно, ежедневно, еженедельно, ежемесячно, ежегодно), а также независимое от времени количество резервных копий, которые следует хранить в этом хранилище.
Создание хранилища данных
Для создания хранилища в веб-интерфейсе, необходимо нажать кнопку «Add Datastore» («Добавить хранилище данных») в боковом меню в разделе «Datastore». В открывшемся окне необходимо указать:
- «Имя» — название хранилища данных;
- «Backing Path» — путь к каталогу, в котором будет создано хранилище данных;
- «GC Schedule» — частота, с которой запускается сборка мусора;
- «Prune Schedule» — частота, с которой происходит обрезка;
- «Prune Options» — количество резервных копий, которые необходимо хранить.
Создание хранилища данных в консоли:
# proxmox-backup-manager datastore create store1 /mnt/backup/disk1
После создания хранилища данных по умолчанию появляется следующий макет:
# ls -arilh /mnt/backup/disk1/
итого 1,1M
665243 -rw-r--r-- 1 backup backup 0 мар 31 14:05 .lock
665242 drwxr-x--- 1 backup backup 1,1M мар 31 14:05 .chunks
665240 drwxr-xr-x 3 root root 4,0K мар 31 13:56 ..
665241 drwxr-xr-x 3 backup backup 4,0K мар 31 14:05
- .lock — это пустой файл, используемый для блокировки процесса;
- каталог .chunks содержит папки, начиная с 0000 и увеличивая шестнадцатеричные значения до ffff. Эти каталоги будут хранить фрагментированные данные, классифицированные по контрольной сумме, после выполнения операции резервного копирования.
Управление хранилищами данных
Вывести список существующих хранилищ данных:
# proxmox-backup-manager datastore list
Изменить расписание сборки мусора и вывести свойства хранилища данных:
# proxmox-backup-manager datastore update store1 --gc-schedule 'Tue 04:27'
# proxmox-backup-manager datastore show store1
Удалить хранилище данных:
# proxmox-backup-manager datastore remove store1
Данная команда удалит только конфигурацию хранилища данных, данные из базового каталога удалены не будут.
Пользователи
Управление пользователями
PBS поддерживает следующие области (методы) аутентификации:
- pam — cтандартная аутентификация Linux PAM (Linux PAM standart authentication). При использовании этой аутентификации системный пользователь должен существовать (должен быть создан например, с помощью команды adduser). Пользователь аутентифицируется с помощью своего обычного системного пароля;
- pbs — аутентификации Proxmox Backup Server. Хэшированные пароли хранятся в файле /etc/proxmox-backup/shadow.json;
- openid — сервер OpenID Connect. Пользователи могут проходить аутентификацию на внешнем сервере OpenID Connect.
После установки PBS существует один пользователь root@pam, который соответствует суперпользователю ОС. Суперпользователь имеет неограниченные права, поэтому рекомендуется добавить других пользователей с меньшими правами.
Для добавления пользователя в веб-интерфейсе, следует в веб-интерфейсе перейти в раздел «Конфигурация» → «Access Control» («Контроль доступа») и на вкладке «Управление пользователями» нажать кнопку «Добавить»:
Управление пользователями в консоли:
- просмотреть список пользователей:
# proxmox-backup-manager user list ┌──────────────┬────────┬────────┬───────────┬──────────┬───────┬───────────┐ │ userid │ enable │ expire │ firstname │ lastname │ email │ comment │ ╞══════════════╪════════╪════════╪═══════════╪══════════╪═══════╪═══════════╡ │ backup_u@pbs │ 1 │ never │ │ │ │ │ ├──────────────┼────────┼────────┼───────────┼──────────┼───────┼───────────┤ │ root@pam │ 1 │ never │ │ │ │ Superuser │ └──────────────┴────────┴────────┴───────────┴──────────┴───────┴───────────┘
- создать пользователя:
# proxmox-backup-manager user create backup_u@pbs --email backup_u@test.alt
- обновить или изменить любые свойства пользователя:
# proxmox-backup-manager user update backup_u@pbs --firstname Дмитрий --lastname Иванов
- отключить учетную запись пользователя:
# proxmox-backup-manager user update backup_u@pbs --enable 0
- удалить учетную запись пользователя:
# proxmox-backup-manager user remove backup_u@pbs
API-токены
Любой аутентифицированный пользователь может генерировать API-токены, которые, в свою очередь, можно использовать для настройки клиентов вместо прямого ввода имени пользователя и пароля.
API-токены служат двум целям:
- простой отзыв в случае компрометации клиента;
- возможность ограничить разрешения для каждого клиента/токена в рамках разрешений пользователей.
API-токен состоит из двух частей: идентификатора, состоящего из имени пользователя, области и имени токена (user@realm!имя токена), и секретного значения.
Генерация API-токена в веб-интерфейсе:
Генерация API-токена в консоли:
# proxmox-backup-manager user generate-token backup_u@pbs client1
Result: {
"tokenid": "backup_u@pbs!client1",
"value": "ff13e5e0-30df-4a70-99f1-c62b13803769"
}
Контроль доступа
По умолчанию новые пользователи и API-токены не имеют никаких разрешений. Добавить разрешения можно, назначив роли пользователям/токенам на определенных объектах, таких как хранилища данных или удаленные устройства.
PBS использует систему управления разрешениями на основе ролей и путей. Запись в таблице разрешений позволяет пользователю играть определенную роль при доступе к объекту или пути. Это означает, что такое правило доступа может быть представлено как тройка (путь, пользователь, роль) или (путь, API-токен, роль), причем роль содержит набор разрешенных действий, а путь представляет цель этих действий.
Информация о правах доступа хранится в файле /etc/proxmox-backup/acl.cfg. Файл содержит 5 полей, разделенных двоеточием (':'):
acl:1:/datastore:backup_u@pbs!client1:DatastoreAdmin
Добавление разрешения в веб-интерфейсе:
Добавление разрешения в консоли (добавить пользователя backup_u@pbs в качестве администратора хранилища данных для хранилища данных store1, расположенного в /mnt/backup/disk1/store1):
# proxmox-backup-manager acl update /datastore/store1 DatastoreAdmin --auth-id backup_u@pbs
Вывести список разрешений:
# proxmox-backup-manager acl list
Отобразить действующий набор разрешений пользователя или API-токена:
# proxmox-backup-manager user permissions backup_u@pbs --path /datastore/store1
Privileges with (*) have the propagate flag set
Path: /datastore/store1
- Datastore.Audit (*)
- Datastore.Backup (*)
- Datastore.Modify (*)
- Datastore.Prune (*)
- Datastore.Read (*)
- Datastore.Verify (*)
Двухфакторная аутентификация
Двухфакторная аутентификация реализована только для веб-интерфейса.
Proxmox Backup Server поддерживает три метода двухфакторной аутентификации:
- TOTP (Time-based One-Time Password) — для создания этого кода используется алгоритм одноразового пароля с учетом времени входа в систему (код меняется каждые 30 секунд). Настройка аутентификации TOTP:
- WebAuthn (веб-аутентификация) — реализуется с помощью различных устройств безопасности, таких как аппаратные ключи или доверенные платформенные модули (TPM). Для работы веб-аутентификации необходим сертификат HTTPS;
- Одноразовые ключи восстановления — список ключей, каждый из которых можно использовать только один раз. В каждый момент времени у пользователя может быть только один набор одноразовых ключей. Создание набора ключей:
Клиент резервного копирования
Клиент резервного копирования использует следующий формат для указания репозитория хранилища данных на сервере резервного копирования (где имя пользователя указывается в виде user@realm):
[[username@]server[:port]:]datastore
Значение по умолчанию для имени пользователя — root@pam. Если сервер не указан, используется локальный хост — localhost.
Указать репозиторий можно, передав его в параметре --repository, или установив переменную среды PBS_REPOSITORY, например:
# export PBS_REPOSITORY=pbs.test.alt:store1
Пример | Пользователь | Хост:Порт | Хранилище |
---|---|---|---|
store1 | root@pam | localhost:8007 | store1 |
pbs.test.alt:store1 | root@pam | pbs.test.alt:8007 | store1 |
backup_u@pbs@pbs.test.alt:store1 | backup_u@pbs | pbs.test.alt:8007 | store1 |
backup_u@pbs!client1@pbs.test.alt:store1 | backup_u@pbs!client1 | pbs.test.alt:8007 | store1 |
192.168.0.123:1234:store1 | root@pam | 192.168.0.123:1234 | store1 |
Создание резервной копии
В этом разделе рассмотрено, как создать резервную копию внутри машины (физического хоста, ВМ или контейнера). Такие резервные копии могут содержать архивы файлов и изображений. Предполагается что сервер резерного копирования уже настроен.
Создать резевную копию домашнего каталога пользователя user (будет создан архив user.pxar):
# proxmox-backup-client backup user.pxar:/home/user/ --repository store1
Password for "root@pam": ******
Starting backup: host/pbs/2022-04-01T14:11:27Z
Client name: pbs
Starting backup protocol: Fri Apr 1 16:11:29 2022
fingerprint: 42:5d:29:20:72:56:18:66:bb:ba:85:fb:7f:0b:11:99:91:a0:ea:5f:a2:55:d1:be:bc:c0:c0:a9:9b:b1:a8:1b
Are you sure you want to continue connecting? (y/n): y
No previous manifest available.
Upload directory '/home/user/' to 'store1' as user.pxar.didx
user.pxar: had to backup 98.346 MiB of 98.346 MiB (compressed 21.303 MiB) in 3.65s
user.pxar: average backup speed: 26.951 MiB/s
Uploaded backup catalog (151.103 KiB)
Duration: 6.95s
End Time: Fri Apr 1 16:11:36 2022
Распространенными типами архивов являются .pxar для файловых архивов и .img для образов блочных устройств.
Команда создания резервной копии блочного устройства:
# proxmox-backup-client backup mydata.img:/dev/mylvm/mydata
Шифрование
PBS поддерживает шифрование на стороне клиента с помощью AES-256 в режиме GCM.
Cначала следует создать ключ шифрования:
# proxmox-backup-client key create my-backup.key
Encryption Key Password: ******
Verify Password: ******
Создание зашифрованной резервной копии:
# proxmox-backup-client backup user_s.pxar:/home/user/ --repository store1 --keyfile ./my-backup.key
Password for "root@pam": ***
Starting backup: host/pbs/2022-04-01T14:25:29Z
Client name: pbs
Starting backup protocol: Fri Apr 1 16:25:31 2022
Using encryption key from './my-backup.key'..
Encryption Key Password: ******
Encryption key fingerprint: b9:7d:0d:6d:51:e6:12:d6
Downloading previous manifest (Fri Apr 1 16:11:27 2022)
Upload directory '/home/user/' to 'store1' as user_s.pxar.didx
user_s.pxar: had to backup 98.346 MiB of 98.346 MiB (compressed 21.292 MiB) in 1.66s
user_s.pxar: average backup speed: 59.289 MiB/s
Uploaded backup catalog (151.104 KiB)
Duration: 7.44s
End Time: Fri Apr 1 16:25:38 2022
Содержимое хранилища store1:
Восстановление данных
Список всех снимков на сервере:
# proxmox-backup-client snapshot list --repository store1
Password for "root@pam": ***
┌───────────────────────────────┬────────────┬──────────────────────────────────────┐
│ snapshot │ size │ files │
╞═══════════════════════════════╪════════════╪══════════════════════════════════════╡
│ host/pbs/2022-04-01T14:11:27Z │ 98.494 MiB │ catalog.pcat1 index.json user.pxar │
├───────────────────────────────┼────────────┼──────────────────────────────────────┤
│ host/pbs/2022-04-01T14:25:29Z │ 98.494 MiB │ catalog.pcat1 index.json user_s.pxar │
└───────────────────────────────┴────────────┴──────────────────────────────────────┘
Просмотреть содержимое снимка:
# proxmox-backup-client catalog dump host/pbs/2022-04-01T14:11:27Z --repository store1
Команда восстановления позволяет восстановить один архив из резервной копии:
# proxmox-backup-client restore host/pbs/2022-04-01T14:11:27Z user.pxar /target/path/ --repository store1
Интеграция с PVE
Proxmox Backup Server можно интегрировать в автономную или кластерную установку PVE, добавив его в качестве хранилища в PVE.
Для создания нового хранилища типа «Proxmox Backup Server» необходимо выбрать «Датацентр» → «Хранилище», нажать кнопку «Добавить» и в выпадающем меню выбрать пункт «Proxmox Backup Server»:
Диалог создания хранилища pbs_backup типа «Proxmox Backup Server» для хранения резервных копий:
Добавление хранилища в командной строке:
# pvesm add pbs pbs_backup --server pbs.test.alt --datastore store2
# pvesm set pbs_backup --username root@pam --password
Если сервер резервного копирования использует самоподписанный сертификат, то необходимо добавить отпечаток сертификата в конфигурацию. Получить отпечаток можно, выполнив следующую команду на сервере резервного копирования:
# proxmox-backup-manager cert info | grep Fingerprint
Fingerprint (sha256): c8:26:af:4a:c3:dc:60:72:4a:0b:4d:c1:e6:58:02:62:90:39:cb:fc:75:5d:00:9a:57:ca:3d:28:a0:2c:99:a5
Добавить отпечаток в конфигурацию, чтобы установить доверительные отношения:
# pvesm set pbs_backup --fingerprint c8:26:af:4a:c3:dc:60:72:...:99:a5
Просмотреть состояние хранилища:
# pvesm status --storage pbs_backup
Name Type Status Total Used Available %
pbs_backup pbs active 30786448 3097752 26099504 10.06%
Добавив хранилище данных типа «Proxmox Backup Server» в PVE, можно создавать резервные копии ВМ и контейнеров в это хранилище так же, как и в любые другие хранилища (см. Резервное копирование и восстановление).
Резервная копия ВМ:
Ссылки: