Sao lưu với PBS (Simple)

Sao lưu PVE sẽ chia làm 2 phần.

Sao lưu cấu hình PVE

Vì PVE không có chức năng backup cấu hình nên chúng ta sẽ cần sử dụng script và dùng systemd timer để lên lịch backup tự động.

Backup script

Trước khi bắt đầu với script chúng ta cần chuẩn bị 2 thứ là PBS API Token và Fingerprint

Tạo script backup bằng lệnh nano /usr/local/bin/pve-host-backup.sh với nội dung sau. Điền thông tin đã chuẩn bị vào phần Cấu hình.

#!/usr/bin/env bash
set -euo pipefail

########################################
# CẤU HÌNH PBS
########################################
# IP/FQDN PBS và Datastore
PBS_HOST='PBS IP'
PBS_DATASTORE='Datastore'

PBS_USER_TOKEN='Token ID'
PBS_TOKEN_SECRET='API Token Sceret'
PBS_FINGERPRINT='Fingerprint'

########################################
# TUỲ CHỌN CHUNG
########################################
BACKUP_ID="${BACKUP_ID:-"$(hostname)-hostcfg"}"
DRY_RUN="${DRY_RUN:-0}"

export PBS_REPOSITORY="${PBS_USER_TOKEN}@${PBS_HOST}:${PBS_DATASTORE}"
export PBS_PASSWORD="${PBS_TOKEN_SECRET}"
export PBS_FINGERPRINT="${PBS_FINGERPRINT}"

########################################
# NGUỒN BACKUP (CHỈ THƯ MỤC, KHÔNG FILE LẺ)
########################################
SOURCES=(
  "pve-etc.pxar:/etc"                           # Bao trọn: pve, network, hosts, resolv.conf, hostname, apt, ssh, default, kernel, modules, modprobe.d, sysc>
  "pve-cron.pxar:/etc/cron.d"                   # Cron.d
  "pve-crontabs.pxar:/var/spool/cron/crontabs"  # Tất cả crontab user (bao gồm root)
  "pve-root-home.pxar:/root"                    # Script & key quản trị (cân nhắc exclude bớt)
  "pve-usrlocal.pxar:/usr/local"                # Script/service tự thêm (nếu có)
)

# Loại trừ cho nhẹ (tuỳ bạn chỉnh)
EXCLUDES=(
  "--exclude=/root/*.iso"
  "--exclude=/root/*.img"
  "--exclude=/root/.cache"
)

########################################
# TIỀN KIỂM TRA
########################################
echo "[*] Checking PBS login..."
proxmox-backup-client login --repository "${PBS_REPOSITORY}"

########################################
# THỰC HIỆN BACKUP
########################################
echo "[*] Starting host-config backup (backup-id=${BACKUP_ID})"
CMD=(proxmox-backup-client backup)
CMD+=("${SOURCES[@]}")
CMD+=("${EXCLUDES[@]}")
CMD+=(--backup-id "${BACKUP_ID}")
CMD+=(--backup-type host)

if [[ "${DRY_RUN}" == "1" ]]; then
  CMD+=(--dry-run)
  echo "[*] DRY RUN enabled"
fi

# In câu lệnh (ẩn secret) rồi chạy
echo "[*] Running: ${CMD[*]/${PBS_TOKEN_SECRET}/***SECRET***}"
"${CMD[@]}"

echo "[✓] Backup finished"

# Dọn biến nhạy cảm
unset PBS_PASSWORD

Cấp quyền thực thi cho script chmod +x /usr/local/bin/pve-host-backup.sh

Dùng lệnh DRY_RUN=1 /usr/local/bin/pve-host-backup.sh để kiểm tra. Nếu kết thúc bằng [✓] Backup finished tức là thành công.

Dùng lệnh /usr/local/bin/pve-host-backup.sh để chạy script

Lập lịch tự động

Thực hiện trên console hoặc ssh của PVE

Kết quả kiểm tra
Mon 2025-11-10 00:00:00 +07 20h Sun 2025-11-09 00:00:43 +07 3h 47min ago dpkg-db-backup.timer dpkg-db-backup.service
Tue 2025-11-11 02:00:00 +07 1 day 22h - - backup.timer backup.service

Tự động Verify sau khi backup

Chuẩn bị ssh key trên PVE

Thêm code post-verify vào cuối script backup trên.

# ==== POST: VERIFY DATASTORE TRÊN PBS SAU KHI BACKUP THÀNH CÔNG ====
if [[ "${DRY_RUN}" != "1" ]]; then
  echo "[*] Trigger verify on PBS for datastore '${PBS_DATASTORE}' ..."
  # Chạy verify toàn datastore. Mặc định --ignore-verified=true nên chỉ verify snapshot mới/chưa verified
  # hoặc snapshot đã quá hạn theo --outdated-after
  ssh -o BatchMode=yes root@"${PBS_HOST}" \
    "proxmox-backup-manager verify '${PBS_DATASTORE}' --ignore-verified true --outdated-after 7" \
    && echo '[✓] Verify job started on PBS' \
    || echo '[!] Failed to start verify job on PBS'
fi

Sao lưu VM/CTs

Mục tiêu là lên lịch để PVE tự động chạy backup mỗi thứ 3, 5, 7 vào lúc 4h và thực hiện verify sau đó vào lúc 5h

Lên lịch backup

Lên lịch verify

Lưu ý

Với task backup cho DSM. PVE sẽ thực hiện backup tất cả các ổ đĩa được passthrough cho DSM nên dung lượng cần backup là rất lớn, và điều này cũng là không cần thiết vì DSM đã sử dụng Hyper Backup.

Để tắt backup cho 2 ổ cứng này PVE Web > pve > VM DSM > Hardware > Disk. Tick chọn Advanced > Bỏ tích Backup

image.png


Revision #4
Created 2025-11-08 18:37:08 UTC by ThanhDV
Updated 2025-11-21 10:12:28 UTC by ThanhDV