Бэкапим PVE на PBS и локально

автор: rss9020 2 мин. чтения

К сожалению нет штатного механизма по бэкапу Proxmox Virtual Environment. Поэтому будем изобретать велосипед в виде bash скрипта. Конфигурация Proxmox расположена в следующих каталогах:

  • /etc/pve \
  • /etc/network/interfaces \
  • /etc/hostname \
  • /etc/hosts

Создаем скрипт для бэкапа PVE /root/backup/scriptbackup.sh

#!/bin/bash

set -euo pipefail

# === НАСТРОЙКИ ===
BACKUP_DIR="/var/lib/vz/dump"
BACKUP_DIR2="/mnt/pve/hdd4tb/dump"

DATE=$(date +%Y-%m-%d_%H-%M)
HOSTNAME=$(hostname)

ARCHIVE_NAME="${HOSTNAME}_config_${DATE}.tar.gz"
ARCHIVE="${BACKUP_DIR}/${ARCHIVE_NAME}"

# === PBS ===
PBS_USER="root@pam!backupscript"
PBS_SERVER="IP PBS"
PBS_DATASTORE="Название хранилища PBS"

export PBS_FINGERPRINT="xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"

TOKEN_FILE="/root/backup/.pbs-token"

# === ПРОВЕРКИ ===
if [[ ! -f "$TOKEN_FILE" ]]; then
    echo "ERROR: PBS token file not found: $TOKEN_FILE"
    exit 1
fi

# === ПАПКИ ===
mkdir -p "$BACKUP_DIR" "$BACKUP_DIR2"

# === СОЗДАНИЕ АРХИВА ===
echo "==> Создание локального архива..."

tar -czf "$ARCHIVE" \
    /etc/pve \
    /etc/network/interfaces \
    /etc/hostname \
    /etc/hosts

# === КОПИЯ НА HDD ===
echo "==> Копирование во второе хранилище..."

cp "$ARCHIVE" "$BACKUP_DIR2/"

# === PBS BACKUP ===
echo "==> Отправка копии на Proxmox Backup Server..."

exec 3< "$TOKEN_FILE"
export PBS_SECRET_KEY_FD=3

trap 'exec 3<&-' EXIT

proxmox-backup-client backup \
    "config.conf:$ARCHIVE" \
    --repository "${PBS_USER}@${PBS_SERVER}:${PBS_DATASTORE}" \
    --backup-id "${HOSTNAME}-config"

# === ОЧИСТКА ===
echo "==> Очистка старых архивов (старше 3 дней)..."

find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +3 -delete
find "$BACKUP_DIR2" -type f -name "*.tar.gz" -mtime +3 -delete

echo "==> Бэкап успешно завершен:"
echo "    Локально: $ARCHIVE"
echo "    PBS ID: ${HOSTNAME}-config"

API Token
  1. Создаем API Token на PBS (лучше не root, а отдельный пользователь с минимальными правами):
    • На PBS → AccessAPI Tokens → Add
    • Даём права DatastoreAdmin (или Backup) на нужный datastore с propagate.
    • Копируем Token Secret (он показывается только один раз).
Настраиваем файл токена:
# Создай файл
mkdir -p /root/backup
echo "твой_очень_длинный_секрет_токена_здесь" > /root/backup/.pbs-token

# Очень важные права!
chmod 600 /root/backup/.pbs-token

Создаем задание по удалению старых копий на PBS

Создаем задачу в планировщике на PVE
crontab -e

Результат

1 Ответ на “Бэкапим PVE на PBS и локально”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *