По мотивам обсуждения в tg группе решил вынести сюда свой микро-проект одного вечера
Для чего это
Простой скрипт для удобного бэкапирования выбранных каталогов linux на сервер PBS с дополнительными плюшками
Требования
- Наличие Proxmox Backup Server (ну логично же)
- debian based или не только arm64 или amd64
Установка
- В PVE уже установлен
- Debian arm64 качаем отсюда
- Для debian на примере
trixie
Устанавливаем подпись репозитория
wge http://download.proxmox.com/debian/pbs-client/dists/trixie/main/binary-amd64/proxmox-archive-keyring_4.0_all.deb
sudo dpkg -i proxmox-archive-keyring_4.0_all.deb
Добавляем репозиторий
sudo tee /etc/apt/sources.list.d/pbs-client.sources > /dev/null <<'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/pbs-client
Suites: trixie
Components: main
Enabled: yes
EOF
Устанавливаем клиента
sudo apt update
sudo apt install proxmox-backup-client
Если ругается на зависимости, например 25.04 ubuntu, то просто устанавливаем статически собранный клиент
sudo apt install proxmox-backup-client-static
- Для остальных amd64
sudo wget -P /usr/local/bin https://cloud-pbs.com/wp-content/uploads/2025/06/proxmox-backup-client
sudo chmod +x /usr/local/bin/proxmox-backup-client
Скрипты
pbs_backup_settings
#!/bin/sh
PBC=/usr/bin/proxmox-backup-client
LOG_FILE=/tmp/pbs_backup.log
BACKUP_ID=$(hostname)
NS="hosts"
NOTES="${BACKUP_ID}"
BACKUPS="etc.pxar:/etc corosync.pxar:/etc/pve"
EXCLUDE=""
DETECTION_MODE=metadata
EXTRA_ARGS=""
pbs_backup_secrets
#!/bin/bash
PBS_PASSWORD=YYY
PBS_REPOSITORY=client@pbs@192.168.0.10:backups
PBS_FINGERPRINT=XXXX
pbs_backup.sh
#!/bin/bash
set -euo pipefail
# Function to check files
check_files() {
for f in "$@"; do
if [[ ! -f "$f" ]]; then
echo "Error: file not found: $f" >&2
exit 1
fi
done
}
# Function to check environment variables
check_env() {
for var in "$@"; do
if [[ -z "${!var:-}" ]]; then
echo "Error: environment variable not set: $var" >&2
exit 1
fi
done
}
dir=$(dirname $0)
check_files "$dir/pbs_backup_secrets" "$dir/pbs_backup_settings"
. $dir/pbs_backup_secrets
. $dir/pbs_backup_settings
check_env "BACKUPS" "PBS_REPOSITORY" "PBS_PASSWORD" "PBS_FINGERPRINT" "DETECTION_MODE"
if [[ -z "BACKUP_ID" ]]; then
BACKUP_ID=$(hostname)
fi
ts=$(date -u +%s)
iso=$(date -u -d "@$ts" +"%Y-%m-%dT%H:%M:%SZ")
SNAPSHOT="host/${BACKUP_ID}/${iso}"
if [ -n "$NS" ]; then
ns_op="--ns ${NS}"
else
ns_op=""
fi
excludes=""
for item in $EXCLUDE ; do
excludes="${excludes} --exclude ${item}"
done
BACKUPS="$BACKUPS pbs_backup.conf:$dir/pbs_backup_settings"
export PBS_PASSWORD
export PBS_FINGERPRINT
$PBC \
backup \
$BACKUPS \
$excludes \
--backup-time ${ts} \
--backup-id $BACKUP_ID \
${ns_op} \
--change-detection-mode $DETECTION_MODE \
--repository $PBS_REPOSITORY \
$EXTRA_ARGS \
> $LOG_FILE 2>&1
if [[ -n "$LOG_FILE" ]]; then
$PBC snapshot upload-log $SNAPSHOT $LOG_FILE ${ns_op} --repository ${PBS_REPOSITORY} >/dev/null 2>&1
fi
if [[ -n "$NOTES" ]]; then
$PBC snapshot notes update $SNAPSHOT $NOTES ${ns_op} --repository ${PBS_REPOSITORY} >/dev/null 2>&1
fi
Как пользоваться
Создаем 3 файла, pbs_backup.sh делаем исполняемым
в pbs_backup_settings вносим нужные настройки. Файл содержит настройки бекапирования без чувствительных данных
| Параметр | Значение | Пример значения |
|---|---|---|
| PBC | Полный путь к бинарнику, например, для крона | /usr/bin/proxmox-backup-client |
| LOG_FILE | Путь к логу бекапирования | /tmp/pbs_backup.log |
| BACKUP_ID | ID бекапа, уникальное значение для каждого сервера | $(hostname) |
| NS | Пространство бекапов, если используете, у меня серваки и виртуалки разнесены | hosts |
| NOTES | Заметки, как отображается списке | ${BACKUP_ID} |
| BACKUPS | Разделенные пробелами бекапы в формате filenae:pxar:/путь на сервере | etc.pxar:/etc corosync.pxar:/etc/pve |
| EXCLUDE | Маска исключения файлов | *.log |
| DETECTION_MODE | Режим детекции изменений legacy|data|metadata | metadata |
| EXTRA_ARGS | Дополнительные пользовательские аргументы | –all-file-systems true |
DETECTION_MODE
- legacy - режим по-умолчанию, минимальная нагрузка на сервер,может генерировать большой трафик и размер архива, читает все файлы с диска, что сильно нагружает его
- metadata - мой избранный режим, сравнивает дату изменения относительно предыдущего бекапа и загружает только изменения, минимальный трафик и дублирование данных, работает очень быстро, но нагружает сервер бекапов т.к. скачивает метаданные предыдущего бекапа и параллельно создает новый
- data - самый надежный, но рсурсоемкий, вроде как читает файлы и сравнивает контрольные суммы
в pbs_backup_secrets вносим нужные настройки. Файл содержит ключи доступа
| Параметр | Значение | Пример значения |
|---|---|---|
| PBS_PASSWORD | Пароль токена доступа | qwerty |
| PBS_REPOSITORY | Репозиторий с имемем пользователя | client@pbs@10.110.10.130:backups |
| PBS_FINGERPRINT | Снимок ssl сертификата сервера | 92:85:9f:87:b0:af:c9:66:a5:88:e1:09:b6:f0:4a:e2:51:cb:de:93:f4:19:f5:74:d0:a2:95:ff:66:ce:17:6d |
Взять можно тут
Ну и если создаете пользователя, то настраиваете для него права доступа

добавить в crontab
0 */6 * * * /root/pbs_backup.sh
Что делает скрипт
- Загружает бекапы на сервер
- Загружает лог бекапирования на сервер
- Загружает файл с настройками на сервер
- Устанавливает заметку для бекапа
Ссылки
Чего не хватает
- Не настраивал шифрование
P.S.
Это оптимальная конфигурация для бэкапирования Proxmox ноды
P.P.S.
Скоро подготовлю docker образ





