Proxmox Backup Server

2025-03-04 · 11 мин. для прочтения

Proxmox Backup Server.

Содержание

1 Общая информация

1.1 Требования

  • Минимальные требования к серверу (предназначены только для тестирования):
    • CPU: 64bit (x86-64 или AMD64), 2+ Ядра
    • ОЗУ: 2 ГБ
    • Диск: от 8 ГБ
    • Сеть: 1 интерфейс
  • Рекомендуемые требования к серверу:
    • CPU: 64bit, 4 Ядра
    • ОЗУ: 4 ГБ (+1 ГБ на каждый ТБ дискового пространства)
    • Диск: от 32 ГБ + резервное хранилище
    • Сеть: 1 интерфейс + резервирование

2 Установка

2.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. Она имеет разрешение на выполнение всех привилегированных операций.
  • Установите клиент PBS:
    apt-get install proxmox-backup-client
    

2.2 Контейнер LXC

  • Запустите в консоли Proxmox VE:
    bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/proxmox-backup-server.sh)"
    

2.3 Виртуальная машина

  • Создадим виртуальную машину:

    qm create 150 --name pbs --memory 16000 --cores 4 --sockets 1 --net0 virtio,bridge=vmbr1,firewall=1,mtu=1,tag=12
    
    • tag задаёт используемый vlan.
  • Подключим QEMU Guest Agent (см. KVM. QEMU Guest Agent):

    qm set 150 --agent enabled=1,fstrim_cloned_disks=1
    
  • Создадим диск (80GB):

    pvesm alloc local-lvm 150 vm-150-disk-0 80G
    
  • Зададим драйвер диска:

    qm set 150 --scsihw virtio-scsi-single
    
  • Подключим диск:

    qm set 150 --virtio0 local-lvm:vm-150-disk-0
    
  • Подключим CDROM:

    qm set 150 --ide2 local:iso/proxmox-backup-server_3.3-1.iso,media=cdrom
    
  • Зададим порядок загрузки (CD-ROM, затем диск)

    qm set 150 --boot c --bootdisk virtio0
    qm set 150 --boot order='ide2;virtio0'
    
  • Зададим тип CPU:

    qm set 150 --cpu cputype=host
    
  • Подключим для мышки:

    qm set 150 --tablet 1
    
  • Запустите виртуальную машину и установите систему.

3 Настройка после установки

3.1 Повышение комфорта работы

  • Обновите список програм:
    apt update
    
  • Программы для удобства работы в консоли:
    apt -y install tmux mc
    
  • Программы мониторинга:
    apt -y install htop lsof
    
  • Утилита для ssh:
    apt -y install mosh
    
  • Удобство работы с bash:
    apt -y install bash-completion
    
  • Разные утилиты:
    apt -y install p7zip-full git
    
  • Для удалённой работы с kitty:
    apt -y install kitty-terminfo kitty-shell-integration
    
  • Установите qemu-guest-agent:
    apt -y install qemu-guest-agent
    
  • Запустите qemu-guest-agent:
    systemctl enable --now qemu-guest-agent
    

3.2 Скрипты для тьюнинга (см. Proxmox. Вспомогательные скрипты)

  • Proxmox Backup Server Post Install
    bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/post-pbs-install.sh)"
    

3.3 Обновление

  • Обновите систему:
    apt update
    apt -y upgrade
    

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

4 Подключение

4.1 Веб-интерфейс

  • PBS предлагает интегрированный веб-интерфейс для управления сервером.
  • Веб-интерфейс PBS доступен по адресу <https://<ip-адрес|имя>:8007>.
  • Потребуется пройти аутентификацию (логин по умолчанию: root, пароль указывается в процессе установки).

5 Хранилище

5.1 Хранилище данных

  • Хранилище данных — это место, где хранятся резервные копии.
  • Текущая реализация PBS использует каталог внутри стандартной файловой системы (ext4, xfs или zfs) для хранения данных резервного копирования.
  • Информация о конфигурации для хранилищ данных хранится в файле /etc/proxmox-backup/datastore.cfg.
  • Необходимо настроить как минимум одно хранилище данных.

5.1.1 Добавление диска

  • Если установка выполнялась как виртуальная машина, добавим диск в Proxmox VE:
    pvesm alloc local-lvm 150 vm-150-disk-1 2000G
    
  • Подключим диск:
    qm set 150 --virtio1 local-lvm:vm-150-disk-1
    

5.1.2 Создание хранилища данных

  • Увидеть диски, подключенные к системе, можно в веб-интерфейсе «Управление» → «Хранилище/Диски».

  • Просмотр списка дисков в командной строке:

    proxmox-backup-manager disk list
    
  • Для создания хранилища в веб-интерфейсе, необходимо нажать кнопку «Добавить хранилище данных» в боковом меню в разделе «Хранилище данных». В открывшемся окне необходимо указать:

    • «Имя» — название хранилища данных;
    • «Путь к каталогу хранилища» — путь к каталогу, в котором будет создано хранилище данных;
    • «Расписание сборщика мусора» — частота, с которой запускается сборка мусора;
    • «Расписание удаления» — частота, с которой происходит удаление ранее созданных резервных копий;
    • «Параметры удаления» — количество резервных копий, которые необходимо хранить.
  • Создадим хранилище:

    proxmox-backup-manager disk fs create store1 --disk vdb --filesystem ext4 --add-datastore true
    
  • Хранилище данных будет создано по адресу /mnt/datastore/store1.

  • После создания хранилища данных по умолчанию появляется следующая структура каталогов:

    # ls -arilh /mnt/datastore/store1
    итого 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. В этих каталогах будут храниться фрагментированные данные, после выполнения операции резервного копирования.

5.1.3 Управление хранилищами данных

  • Вывести список существующих хранилищ данных:
    proxmox-backup-manager datastore list
    
  • Изменить расписание сборки мусора и вывести свойства хранилища данных:
    proxmox-backup-manager datastore update store2 --gc-schedule 'Tue 04:27'
    
  • Просмотреть информацию:
    proxmox-backup-manager datastore show store1
    
  • Удалить хранилище данных:
    proxmox-backup-manager datastore remove store1
    
  • Данная команда удалит только конфигурацию хранилища данных, данные из базового каталога удалены не будут.

5.1.4 Очистка хранилища

  • Ротирование бэкапов

  • GC Schedule — периодичность выполнения сборки мусора, фактически выполняет задачу дедупликации.

  • Prune Schedule — периодичность очистки хранилища от устаревших резервных копий.

  • Опции очистки устаревших копий (Prune Options) можно настроить как сразу, так и потом, либо изменить в любое удобное время.

  • Задание очистки обрабатывает опции, в порядке перечисления, уже обработанные копии из дальнейшей обработки исключаются:

    • Keep Last <N> : хранить последние <N> снимки резервных копий;
    • Keep Hourly <N> : хранить резервные копии за последние <N> часов (если за один час создаётся более одной резервной копии, сохраняется только последняя);
    • Keep Daily <N> : хранить резервные копии за последние <N> дней (если за один день создаётся более одной резервной копии, сохраняется только последняя);
    • Keep Weekly <N> : хранить резервные копии за последние <N> недель (недели начинаются в понедельник и заканчиваются в воскресенье; если за одну неделю создаётся более одной резервной копии, сохраняется только последняя);
    • Keep Monthly <N> : хранить резервные копии за последние <N> месяцев (если за один месяц создаётся более одной резервной копии, сохраняется только последняя);
    • Keep Yearly <N> : хранить резервные копии за последние <N> лет (если за один год создаётся более одной резервной копии, сохраняется только самая последняя).
  • Если за один период создаётся более одной резервной копии, сохраняется только последняя.

  • Визуализировать заданное расписание можно с помощью симулятора очистки (https://pbs.proxmox.com/docs/prune-simulator/).

  • Безусловное удаление конкретного бэкапа можно осуществить, выполнив:

    proxmox-backup-client forget <snapshot>
    
    • Выполнение команды приведёт к необратимому удалению архивов бэкапа.
  • Условное удаление:

    proxmox-backup-client prune <group> <option1>..<optionN>
    
    • <group> : название группы бэкапов;
    • <options> :
      • --keep-last <N> : оставит последние <N> резервных копий;
      • --keep-hourly <N> : оставит резервные копии за последние <N> часов;
      • --keep-daily <N> : оставит резервные копии за последние <N> дней;
      • --keep-weekly <N> : оставит резервные копии за последние <N> недель;
      • --keep-monthly <N> : оставит резервные копии за последние <N> месяцев;
      • --keep-yearly <N> : оставит резервные копии за последние <N> лет.

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

6.1 Управление пользователями

  • PBS хранит данные пользователей в файле /etc/proxmox-backup/user.cfg.
  • Пользователя внутренне идентифицируют по его имени и области аутентификации в форме <user>@<realm>.
  • После установки PBS существует один пользователь root@pam, который соответствует суперпользователю ОС.
  • Этого пользователя нельзя удалить, все системные письма будут отправляться на адрес электронной почты, назначенный этому пользователю.
  • Суперпользователь имеет неограниченные права, поэтому рекомендуется добавить других пользователей с меньшими правами.

6.1.1 Области аутентификации

  • PBS поддерживает следующие области (методы) аутентификации:
    • Стандартная аутентификация Linux PAM (Linux PAM standart authentication) — пользователь аутентифицируется с помощью своего обычного системного пароля;
    • Сервер аутентификации Proxmox Backup (Proxmox Backup authentication server) — аутентификация Proxmox Backup Server. Хэшированные пароли хранятся в файле /etc/proxmox-backup/shadow.json;
    • Сервер LDAP — позволяет использовать внешний LDAP-сервер для аутентификации пользователей (например, OpenLDAP);
    • Сервер OpenID Connect — уровень идентификации поверх протокола OATH 2.0. Позволяет аутентифицировать пользователей на основе аутентификации, выполняемой внешним сервером авторизации.

6.1.2 Стандартная аутентификация Linux PAM

  • При использовании аутентификации Linux PAM системный пользователь должен существовать (должен быть создан, например, с помощью команды adduser).
  • Область Linux PAM создается по умолчанию и не может быть удалена.

6.1.3 Сервер аутентификации Proxmox Backup

  • Область аутентификации PBS представляет собой хранилище паролей в стиле Unix (/etc/proxmox-backup/shadow.json). Пароль шифруется с использованием метода хеширования SHA-256.
  • Область создается по умолчанию.
  • Для добавления пользователя в веб-интерфейсе, следует в веб-интерфейсе перейти в раздел «Конфигурация» → «Управление доступом» и на вкладке «Управление пользователями» нажать кнопку «Добавить».
  • Управление пользователями в консоли:
    • просмотреть список пользователей:
      proxmox-backup-manager user list
      
    • создать пользователя:
      proxmox-backup-manager user create backup_u@pbs --email backup_u@example.com
      
    • обновить или изменить любые свойства пользователя:
      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
      

6.2 API-токены

  • Любой аутентифицированный пользователь может генерировать API-токены, которые, в свою очередь, можно использовать для настройки клиентов вместо прямого ввода имени пользователя и пароля.
  • API-токены служат двум целям:
    • простой отзыв в случае компрометации клиента;
    • возможность ограничить разрешения для каждого клиента/токена в рамках разрешений пользователей.
  • API-токен состоит из двух частей: идентификатора, состоящего из имени пользователя, области и имени токена (user@realm!имя токена), и секретного значения.
  • Можно создать API-токен в веб-интерфейсе.
  • Создание API-токена в консоли:
    proxmox-backup-manager user generate-token backup_u@pbs client1
    
  • Отображаемое секретное значение необходимо сохранить, так как после создания токена его нельзя будет отобразить снова.

6.3 Контроль доступа

  • По умолчанию новые пользователи и API-токены не имеют никаких разрешений.
  • Добавить разрешения можно, назначив роли пользователям/токенам на определённых объектах, таких как хранилища данных или удалённые устройства.
  • PBS использует систему управления разрешениями на основе ролей и путей.
  • Запись в таблице разрешений позволяет пользователю играть определённую роль при доступе к объекту или пути.
  • Это означает, что такое правило доступа может быть представлено как тройка (путь, пользователь, роль) или (путь, API-токен, роль), причем роль содержит набор разрешенных действий, а путь представляет цель этих действий.
  • Информация о правах доступа хранится в файле /etc/proxmox-backup/acl.cfg.
  • Файл содержит 5 полей, разделенных двоеточием (:):
    acl:1:/datastore:backup_u@pbs!client1:DatastoreAdmin
    
  • В каждом поле представлены следующие данные:
    • идентификатор acl;
    • 1 или 0 – включено или отключено;
    • объект, на который установлено разрешение;
    • пользователи/токены, для которых установлено разрешение;
    • устанавливаемая роль.
  • Добавить разрешение можно в веб-интерфейсе («Конфигурация» → «Управление доступом» вкладка «Разрешения»).
  • Добавление разрешения в консоли (добавить пользователя backup_u@pbs в качестве администратора хранилища данных для хранилища данных= store1=, расположенного в /mnt/datastore/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
    

7 Управление удалёнными PBS

  • Хранилища данных с удалённого сервера можно синхронизировать с локальным хранилищем с помощью задачи синхронизации.

  • Информация о конфигурации удалённых PBS хранится в файле /etc/proxmox-backup/remote.cfg.

  • Для добавления удалённого PBS в веб-интерфейсе следует перейти в раздел «Конфигурация» → «Удалённые хранилища» и нажать кнопку «Добавить».

  • Отпечаток TLS-сертификата можно получить на удалённом PBS в веб-интерфейсе.

  • Отпечаток TLS-сертификата можно получить на удалённом PBS в командной строке:

    proxmox-backup-manager cert info | grep Fingerprint
    
  • Управление удалёнными PBS в консоли:

    • добавить удалённый PBS:
      proxmox-backup-manager remote create pbs2 --host pbs2.example.com --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
      
  • Для настройки задачи синхронизации необходимо в разделе «Хранилище данных» перейти на вкладку «Задания синхронизации» и нажать кнопку «Добавить».

  • Управление задачами синхронизации в консоли:

    • добавить задачу синхронизации:
      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
      
    • изменить задачу синхронизации:
      proxmox-backup-manager sync-job  update test_job --comment 'offsite'
      
    • удалить задачу синхронизации:
      proxmox-backup-manager sync-job remove test_job
      
  • После создания задания синхронизации оно будет запускаться по заданному расписанию, также его можно запустить вручную из веб-интерфейса (кнопка «Запустить сейчас»).

8 Клиент резервного копирования

  • Клиент резервного копирования использует следующий формат для указания репозитория хранилища данных на сервере резервного копирования (где имя пользователя указывается в виде user@realm):
    [[username@]server[:port]:]datastore
    
  • Значение по умолчанию для имени пользователя: root@pam.
  • Если сервер не указан, используется локальный хост: localhost.
  • Указать репозиторий можно, передав его в параметре --repository, или установив переменную среды PBS_REPOSITORY:
    export PBS_REPOSITORY=pbs.example.com:store1
    

8.1 Создание резервной копии

  • Создать резервную копию домашнего каталога пользователя user (будет создан архив user.pxar):
    proxmox-backup-client backup user.pxar:/home/user/ --repository store1
    
  • Распространёнными типами архивов являются .pxar для файловых архивов и .img для образов блочных устройств.
  • Команда создания резервной копии блочного устройства:
    proxmox-backup-client backup mydata.img:/dev/mylvm/mydata
    

8.1.1 Шифрование

  • PBS поддерживает шифрование на стороне клиента с помощью AES-256 в режиме GCM.
  • Создать ключ шифрования:
    proxmox-backup-client key create my-backup.key
    
  • Создание зашифрованной резервной копии:
    proxmox-backup-client backup user_s.pxar:/home/user/ --repository pbs.example.com:store1 --keyfile ./my-backup.key
    

8.2 Восстановление данных

  • Список всех снимков на сервере:
    proxmox-backup-client snapshot list --repository pbs.example.com:store1
    
  • Просмотреть содержимое снимка:
    proxmox-backup-client catalog dump host/pbs/2023-09-15T15:00:37Z --repository pbs.example.com:store1
    
  • Команда восстановления позволяет восстановить один архив из резервной копии:
    proxmox-backup-client restore host/pbs/2023-09-15T15:00:37Z user.pxar /target/path/ --repository pbs.example.com:store1
    
  • Получить содержимое любого архива можно, восстановив файл index.json в репозитории по целевому пути -.
  • Это выведет содержимое архива на стандартный вывод:
    proxmox-backup-client restore host/pbs/2023-09-15T15:00:37Z index.json - --repository pbs.example.com:store1
    
  • Если необходимо восстановить несколько отдельных файлов, можно использовать интерактивную оболочку восстановления:
    proxmox-backup-client catalog shell host/host-01/2023-09-17T14:17:16Z user.pxar --repository pbs.example.com:store1
    

8.3 Вход и выход

  • При первой попытке получить доступ к серверу с использованием команды proxmox-backup-client потребуется ввести пароль пользователя.
  • Сервер проверяет учётные данные и отправляет билет, действительный в течение двух часов.
  • Клиент использует этот билет для последующих запросов к этому серверу.
  • Можно вручную инициировать вход/выход.
  • Команда входа:
    proxmox-backup-client login --repository pbs.example.com:store1
    
  • Удалить билет:
    proxmox-backup-client logout --repository pbs.example.com:store1
    

9 Интеграция с PVE

  • Proxmox Backup Server можно интегрировать в автономную или кластерную установку PVE, добавив его в качестве хранилища в PVE.
  • Для создания нового хранилища типа «Proxmox Backup Server» необходимо выбрать «Центр обработки данных» → «Хранилище», нажать кнопку «Добавить» и в выпадающем меню выбрать пункт «Proxmox Backup Server».
  • Отпечаток TLS-сертификата можно получить в веб-интерфейсе сервера резервного копирования.
  • Отпечаток TLS-сертификата можно получить, выполнив следующую команду на сервере резервного копирования:
    proxmox-backup-manager cert info | grep Fingerprint
    
  • Добавление хранилища в командной строке:
    pvesm add pbs pbs_backup --server pbs.example.com --datastore store2 --fingerprint  c8:26:af:4a:c3:dc:60:72:...:99:a5 --username root@pam --password
    
  • Просмотреть состояние хранилища:
    pvesm status --storage pbs_backup
    
  • Добавив хранилище данных типа «Proxmox Backup Server» в PVE, можно создавать резервные копии ВМ и контейнеров в это хранилище, так же как и в любые другие хранилища.
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.