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 интерфейс + резервирование
Установить сервер PBS можно следующей командой:
# apt-get install proxmox-backup-server
Запустить и добавить в автозагрузку Proxmox Backup API Proxy Server:
# systemctl enable --now proxmox-backup-proxy.service
Служба proxmox-backup-proxy предоставляет API Proxmox Backup Server через TCP-порт 8007 с использованием HTTPS. Она имеет весьма ограниченные разрешения. Операции, требующие дополнительных разрешений, перенаправляются в локальную службу proxmox-backup.
Служба proxmox-backup предоставляет API управления Proxmox Backup Server по адресу 127.0.0.1:82. Она имеет разрешение на выполнение всех привилегированных операций.
Включить модуль можно следующей командой:
# modprobe zfs
Чтобы не вводить эту команду после перезагрузки, следует раскомментировать строку:
#zfsв файле /etc/modules-load.d/zfs.conf.
Установка клиента
Установить клиент PBS:
# apt-get install proxmox-backup-client
Веб-интерфейс
PBS предлагает интегрированный веб-интерфейс для управления сервером. Все административные задачи можно выполнять в веб-браузере. Веб-интерфейс также предоставляет встроенную консоль.
Веб-интерфейс PBS доступен по адресу https://<IP-адрес|имя>:8007. Потребуется пройти аутентификацию (логин по умолчанию: root, пароль указывается в процессе установки).
Хранилище данных
Управление дисками
Увидеть диски, подключенные к системе, можно в веб-интерфейсе «Управление» → «Хранилище/Диски»:
Просмотр списка дисков в командной строке:
# proxmox-backup-manager disk list
┌─────────┬─────────┬─────┬───────────┬──────────────┬──────────────────────┬─────────┬─────────┐
│ name │ used │ gpt │ disk-type │ size │ model │ wearout │ status │
╞═════════╪═════════╪═════╪═══════════╪══════════════╪══════════════════════╪═════════╪═════════╡
│ nvme0n1 │ zfs │ 1 │ ssd │ 161061273600 │ ORCL-VBOX-NVME-VER12 │ 0.00 % │ passed │
├─────────┼─────────┼─────┼───────────┼──────────────┼──────────────────────┼─────────┼─────────┤
│ nvme0n2 │ zfs │ 1 │ ssd │ 161061273600 │ ORCL-VBOX-NVME-VER12 │ 0.00 % │ passed │
├─────────┼─────────┼─────┼───────────┼──────────────┼──────────────────────┼─────────┼─────────┤
│ nvme0n3 │ mounted │ 1 │ ssd │ 53687091200 │ ORCL-VBOX-NVME-VER12 │ 0.00 % │ passed │
├─────────┼─────────┼─────┼───────────┼──────────────┼──────────────────────┼─────────┼─────────┤
│ sda │ mounted │ 1 │ hdd │ 62277025792 │ VBOX_HARDDISK │ - │ unknown │
└─────────┴─────────┴─────┴───────────┴──────────────┴──────────────────────┴─────────┴─────────┘
Создание файловой системы ext4 или xfs на диске в веб-интерфейсе:
Пример создания файловой системы в командной строке (будет создана файловая система ext4 и хранилище данных на диске nvme0n3, хранилище данных будет создано по адресу /mnt/datastore/store1):
# proxmox-backup-manager disk fs create store1 --disk nvme0n3 --filesystem ext4 --add-datastore true
create datastore 'store1' on disk nvme0n3
Chunkstore create: 1%
Chunkstore create: 2%
…
Chunkstore create: 99%
TASK OK
Для создания zpool в веб-интерфейсе, следует в разделе «Хранилище/Диски» перейти на вкладку «ZFS» и нажать кнопку «Создать: ZFS». В открывшемся окне следует задать параметры zpool: имя хранилища, выбрать диски, уровень RAID и нажать кнопку «OK»:
Команда для создания зеркального zpool с использованием двух дисков и монтированием в /mnt/datastore/zfs_st:
# proxmox-backup-manager disk zpool create zfs_st --devices nvme0n1,nvme0n2 --raidlevel mirror
Для мониторинга состояния локальных дисков используется пакет smartmontools. Он содержит набор инструментов для мониторинга и управления S.M.A.R.T. системой для локальных жестких дисков. Если диск поддерживает S.M.A.R.T. и поддержка SMART для диска включена, просмотреть данные S.M.A.R.T. можно в веб-интерфейсе или с помощью команды:
# proxmox-backup-manager disk smart-attributes sdX
Хранилище данных
Хранилище данных — это место, где хранятся резервные копии. Текущая реализация PBS использует каталог внутри стандартной файловой системы (ext4, xfs или zfs) для хранения данных резервного копирования. Информация о конфигурации для хранилищ данных хранится в файле /etc/proxmox-backup/datastore.cfg.
Необходимо настроить как минимум одно хранилище данных. Хранилище данных идентифицируется именем и указывает на каталог в файловой системе. С каждым хранилищем связаны настройки хранения, определяющие, сколько снимков резервных копий для каждого интервала времени (ежечасно, ежедневно, еженедельно, ежемесячно, ежегодно) хранить в этом хранилище.
Создание хранилища данных
Для создания хранилища в веб-интерфейсе, необходимо нажать кнопку «Добавить хранилище данных» в боковом меню в разделе «Хранилище данных». В открывшемся окне необходимо указать:
- «Имя» — название хранилища данных;
- «Путь к каталогу хранилища» — путь к каталогу, в котором будет создано хранилище данных;
- «Расписание сборщика мусора» — частота, с которой запускается сборка мусора;
- «Расписание удаления» — частота, с которой происходит удаление ранее созданных резервных копий;
- «Параметры удаления» — количество резервных копий, которые необходимо хранить.
Создание хранилища данных в консоли:
# proxmox-backup-manager datastore create store2 /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 store2 --gc-schedule 'Tue 04:27'
# proxmox-backup-manager datastore show store2
Удалить хранилище данных:
# proxmox-backup-manager datastore remove store2
Данная команда удалит только конфигурацию хранилища данных, данные из базового каталога удалены не будут.
Пользователи
Управление пользователями
PBS хранит данные пользователей в файле /etc/proxmox-backup/user.cfg.
Пользователя часто внутренне идентифицируют по его имени и области аутентификации в форме <user>@<realm>.
После установки PBS существует один пользователь root@pam, который соответствует суперпользователю ОС. Этого пользователя нельзя удалить, все системные письма будут отправляться на адрес электронной почты, назначенный этому пользователю. Суперпользователь имеет неограниченные права, поэтому рекомендуется добавить других пользователей с меньшими правами.
Области аутентификации
PBS поддерживает следующие области (методы) аутентификации:
- Стандартная аутентификация Linux PAM (Linux PAM standart authentication) — при использовании этой аутентификации системный пользователь должен существовать (должен быть создан, например, с помощью команды adduser). Пользователь аутентифицируется с помощью своего обычного системного пароля;
- Сервер аутентификации Proxmox Backup (Proxmox Backup authentication server) — аутентификация Proxmox Backup Server. Хэшированные пароли хранятся в файле /etc/proxmox-backup/shadow.json;
- Сервер LDAP — позволяет использовать внешний LDAP-сервер для аутентификации пользователей (например, OpenLDAP);
- Сервер OpenID Connect — уровень идентификации поверх протокола OATH 2.0. Позволяет аутентифицировать пользователей на основе аутентификации, выполняемой внешним сервером авторизации.
Для добавления пользователя в веб-интерфейсе, следует в веб-интерфейсе перейти в раздел «Конфигурация» → «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
В каждом поле представлены следующие данные:
- идентификатор acl;
- 1 или 0 – включено или отключено;
- объект, на который установлено разрешение;
- пользователи/токены, для которых установлено разрешение;
- устанавливаемая роль.
Добавление разрешения в веб-интерфейсе («Конфигурация» → «Управление доступом» вкладка «Разрешения»):
Добавление разрешения в консоли (добавить пользователя backup_u@pbs в качестве администратора хранилища данных для хранилища данных store2, расположенного в /mnt/backup/disk1/store2):
# proxmox-backup-manager acl update /datastore/store2 DatastoreAdmin --auth-id backup_u@pbs
Вывести список разрешений:
# proxmox-backup-manager acl list
Отобразить действующий набор разрешений пользователя или API-токена:
# proxmox-backup-manager user permissions backup_u@pbs --path /datastore/store2
Privileges with (*) have the propagate flag set
Path: /datastore/store2
- Datastore.Audit (*)
- Datastore.Backup (*)
- Datastore.Modify (*)
- Datastore.Prune (*)
- Datastore.Read (*)
- Datastore.Verify (*)
Двухфакторная аутентификация
Двухфакторная аутентификация реализована только для веб-интерфейса.
Proxmox Backup Server поддерживает три метода двухфакторной аутентификации:
- TOTP (одноразовый пароль на основе времени) — для создания этого кода используется алгоритм одноразового пароля с учетом времени входа в систему (код меняется каждые 30 секунд). Настройка аутентификации TOTP:
- WebAuthn (веб-аутентификация) — реализуется с помощью различных устройств безопасности, таких как аппаратные ключи или доверенные платформенные модули (TPM). Для работы веб-аутентификации необходим сертификат HTTPS;
- Ключи восстановления — список ключей, каждый из которых можно использовать только один раз. В каждый момент времени у пользователя может быть только один набор одноразовых ключей. Создание набора ключей:
Управление удалёнными PBS
Хранилища данных с удалённого сервера можно синхронизировать с локальным хранилищем с помощью задачи синхронизации.
Информация о конфигурации удалённых PBS хранится в файле /etc/proxmox-backup/remote.cfg.
Для добавления удалённого PBS в веб-интерфейсе следует перейти в раздел «Конфигурация» → «Удалённые хранилища» и нажать кнопку «Добавить»:
Или в командной строке:
# proxmox-backup-manager cert info | grep Fingerprint
Управление удалёнными PBS в консоли:
- добавить удалённый PBS:
# proxmox-backup-manager remote create pbs2 --host pbs2.test.alt --userid root@pam --password 'SECRET' --fingerprint 42:5d:ff:3a:50:38:53:5a:9b:f7:50:...:ab:1b
- список удалённых PBS:
# proxmox-backup-manager remote list
- удалить удалённый PBS:
# proxmox-backup-manager remote remove pbs2
Для настройки задачи синхронизации необходимо в разделе «Хранилище данных» перейти на вкладку «Задания синхронизации» и нажать кнопку «Добавить»:
Управление задачами синхронизации в консоли:
- добавить удалённый PBS:
# proxmox-backup-manager sync-job create test_job --remote pbs2 --remote-store remotestore --store zfs_st --schedule 'Sat 18:15'
- вывести список задач синхронизации:
# proxmox-backup-manager sync-job list
- изменить удалённый PBS:
# proxmox-backup-manager sync-job update test_job --comment 'offsite'
- удалить удалённый PBS:
# proxmox-backup-manager sync-job remove test_job
После создания задания синхронизации оно будет запускаться по заданному расписанию, также его можно запустить вручную из веб-интерфейса (кнопка «Запустить сейчас»).
Клиент резервного копирования
Клиент резервного копирования использует следующий формат для указания репозитория хранилища данных на сервере резервного копирования (где имя пользователя указывается в виде 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
Starting backup: host/host-197/2023-09-17T13:12:05Z
Client name: host-01
Starting backup protocol: Sun Sep 17 15:12:05 2023
No previous manifest available.
Upload directory '/home/user/' to 'pbs.test.alt:store1' as user.pxar.didx
user.pxar: had to backup 667.04 MiB of 667.04 MiB (compressed 190.182 MiB) in 26.22s
user.pxar: average backup speed: 25.436 MiB/s
Uploaded backup catalog (109.948 KiB)
Duration: 26.36s
End Time: Sun Sep 17 15:12:12 2023
Распространенными типами архивов являются .pxar для файловых архивов и .img для образов блочных устройств.
Команда создания резервной копии блочного устройства:
$ proxmox-backup-client backup mydata.img:/dev/mylvm/mydata
Шифрование
PBS поддерживает шифрование на стороне клиента с помощью AES-256 в режиме GCM.
Создать ключ шифрования:
$ proxmox-backup-client key create my-backup.key
Encryption Key Password: ******
Verify Password: ******
Создание зашифрованной резервной копии:
$ proxmox-backup-client backup user_s.pxar:/home/user/ --repository pbs.test.alt:store1 --keyfile ./my-backup.key
Password for "root@pam": ***
Starting backup: host/host-197/2023-09-17T12:17:16Z
Client name: host-01
Starting backup protocol: Sun Sep 17 14:17:19 2023
Using encryption key from './my-backup.key'..
Encryption Key Password: ******
Encryption key fingerprint: 0d:aa:4f:9b:ef:63:31:47
fingerprint: cf:24:11:66:bd:84:ca:7b:52:7c:5c:66:72:7b:c1:4e:4a:b7:ca:10:07:d5:c7:ca:fc:6b:f9:e8:49:89:43:e9
Are you sure you want to continue connecting? (y/n): y
Downloading previous manifest (Sun Sep 17 14:14:27 2023)
Upload directory '/home/user/' to '192.168.0.123:store1' as user_s.pxar.didx
user_s.pxar: had to backup 667.04 MiB of 667.04 MiB (compressed 190.028 MiB) in 21.16s
user_s.pxar: average backup speed: 31.518 MiB/s
Uploaded backup catalog (109.971 KiB)
Duration: 31.17s
End Time: Sun Sep 17 14:17:31 2023
Содержимое хранилища store1:
Восстановление данных
Список всех снимков на сервере:
$ proxmox-backup-client snapshot list --repository pbs.test.alt:store1
Password for "root@pam": ***
┌───────────────────────────────────┬─────────────┬──────────────────────────────────────┐
│ snapshot │ size │ files │
╞═══════════════════════════════════╪═════════════╪══════════════════════════════════════╡
│ host/host-01/2023-09-17T14:17:16Z │ 667.147 MiB │ catalog.pcat1 index.json user.pxar │
├───────────────────────────────────┼─────────────┼──────────────────────────────────────┤
│ host/host-01/2023-09-17T14:14:27Z │ 667.148 MiB │ catalog.pcat1 index.json user_s.pxar │
├───────────────────────────────────┼─────────────┼──────────────────────────────────────┤
│ host/pbs/2023-09-15T15:00:37Z │ 98.494 MiB │ catalog.pcat1 index.json user.pxar │
├───────────────────────────────────┼─────────────┼──────────────────────────────────────┤
│ host/pbs/2023-09-15T14:25:29Z │ 98.494 MiB │ catalog.pcat1 index.json user_s.pxar │
└───────────────────────────────────┴─────────────┴──────────────────────────────────────┘
Просмотреть содержимое снимка:
$ proxmox-backup-client catalog dump host/pbs/2023-09-15T15:00:37Z --repository pbs.test.alt:store1
Команда восстановления позволяет восстановить один архив из резервной копии:
$ proxmox-backup-client restore host/pbs/2023-09-15T15:00:37Z user.pxar /target/path/ --repository pbs.test.alt:store1
Получить содержимое любого архива можно, восстановив файл index.json в репозитории по целевому пути «-». Это выведет содержимое архива на стандартный вывод:
$ proxmox-backup-client restore host/pbs/2023-09-15T15:00:37Z index.json - --repository pbs.test.alt:store1
Если необходимо восстановить несколько отдельных файлов, можно использовать интерактивную оболочку восстановления:
$ proxmox-backup-client catalog shell host/host-01/2023-09-17T14:17:16Z user.pxar --repository pbs.test.alt:store1
Starting interactive shell
pxar:/ > ls
…
Пример поиска в содержимом архива и восстановление данных:
pxar:/ > find *.txt --select
/test/connection_trace.txt
/Рабочий стол/1.txt
pxar:/ > list-selected
/test/connection_trace.txt
/Рабочий стол/1.txt
pxar:/ > restore-selected /home/user/restore/
pxar:/ > restore /home/user/conf/ --pattern *.conf
pxar:/ > exit
где:
- find *.txt --select — найти все файлы с расширением .txt и добавить соответствующие шаблоны в список для последующего восстановления;
- list-selected — вывести шаблоны на экран;
- restore-selected /home/user/restore/ — восстановить все файлы в архиве, соответствующие шаблонам в /home/user/restore/ на локальном хосте;
- restore /home/user/conf/ --pattern *.conf — восстановить все файлы с расширением .conf в /home/user/conf/ на локальном хосте.
Вход и выход
При первой попытке получить доступ к серверу с использованием команды proxmox-backup-client
, потребуется ввести пароль пользователя.
Сервер проверяет учётные данные и отправляет билет, действительный в течение двух часов. Клиент использует этот билет для последующих запросов к этому серверу.
Можно вручную инициировать вход/выход. Команда входа:
$ proxmox-backup-client login --repository pbs.test.alt:store1
Password for "root@pam": ******
Удалить билет:
$ proxmox-backup-client logout --repository pbs.test.alt:store1
Интеграция с PVE
Proxmox Backup Server можно интегрировать в автономную или кластерную установку PVE, добавив его в качестве хранилища в PVE.
Для создания нового хранилища типа «Proxmox Backup Server» необходимо выбрать «Центр обработки данных» → «Хранилище», нажать кнопку «Добавить» и в выпадающем меню выбрать пункт «Proxmox Backup Server»:
Диалог создания хранилища pbs_backup типа «Proxmox Backup Server» для хранения резервных копий:
Или, выполнив следующую команду на сервере резервного копирования:
# 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 add pbs pbs_backup --server pbs.test.alt --datastore store2 --fingerprint c8:26:af:4a:c3:dc:60:72:...:99:a5 --username root@pam --password
Просмотреть состояние хранилища:
# pvesm status --storage pbs_backup
Name Type Status Total Used Available %
pbs_backup pbs active 30786448 3097752 26099504 10.06%
Добавив хранилище данных типа «Proxmox Backup Server» в PVE, можно создавать резервные копии ВМ и контейнеров в это хранилище, так же как и в любые другие хранилища (см. Резервное копирование и восстановление).
Резервная копия ВМ:
Ссылки: