Backup & Recovery

Triển khai Proxmox Backup Server

Backup VM/CT theo chuẩn 3-2-1: deduplication 90%+, incremental forever, encryption, retention pruning, offsite sync.

5
Phase
~2h
Thực hiện
90%
Dedup ratio
$0
License

PBS là gì & tại sao dùng?

Proxmox Backup Server (PBS) là backup appliance open-source (Debian-based) chuyên dụng cho hệ sinh thái Proxmox. Hỗ trợ content-defined chunking + deduplication, tiết kiệm 80–95% dung lượng so với backup truyền thống. Có thể backup không chỉ VM mà còn LXC, files, và host config.

Tính năng nổi bật

  • Deduplication chunk-level 4MB → giảm 90% dung lượng
  • Incremental forever — không cần full backup định kỳ
  • End-to-end encryption AES-256 client-side
  • Compression Zstandard (zstd) tốc độ cao
  • ✅ Verify backup integrity tự động
  • ✅ Tape support (LTO) cho air-gap
  • ✅ Sync giữa nhiều PBS → 3-2-1 strategy
  • ✅ Web UI :8007 đầy đủ chức năng

Kiến trúc

  • Datastore: nơi lưu chunks + index
  • Chunk store: deduplication pool
  • Backup Group: nhóm theo VM ID
  • Snapshot: 1 point-in-time backup
  • Namespace: phân tách theo project/tenant
  • GC (Garbage Collection): dọn chunk không dùng
  • Prune: xóa snapshot cũ theo policy
  • Verify: kiểm tra checksum chunks

Kiến trúc 3-2-1 với PBS

graph LR subgraph PROD["🏢 Production Site"] PVE[Proxmox VE Cluster
3 node + Ceph] PBS1[PBS Primary
Local Datastore] end subgraph DR["🌍 DR Site (Offsite)"] PBS2[PBS Secondary
Sync Target] end subgraph TAPE["📼 Cold Storage"] LTO[LTO Tape Library
Air-Gapped] end PVE -.daily backup.-> PBS1 PBS1 -.sync daily.-> PBS2 PBS1 -.tape job weekly.-> LTO style PVE fill:#fef3c7,stroke:#f59e0b,stroke-width:2px style PBS1 fill:#d1fae5,stroke:#10b981,stroke-width:2px style PBS2 fill:#d1fae5,stroke:#10b981,stroke-width:2px style LTO fill:#e0e7ff,stroke:#6366f1,stroke-width:2px

Quy tắc 3-2-1-1-0

3 bản backup · 2 loại media khác nhau · 1 offsite · 1 offline (air-gap) · 0 lỗi verify. PBS đáp ứng đủ với sync + tape.

P-1

Tính toán dung lượng & quy hoạch hardware

~15 phút — không thực hiện trên server

Công thức tính dung lượng PBS

# Công thức ước tính (PBS dedup ratio thực tế: 5x – 20x) Storage cần = (Tổng VM size × Retention factor) ÷ Dedup ratio # Ví dụ thực tế: # - 30 VM × 100GB = 3000GB raw # - Retention: daily 14 + weekly 8 + monthly 12 ~ 34 snapshot # - Dedup ratio trung bình: 10x 3000GB × 34 × 0.05 (5% change rate) ÷ 10 = ~510GB # Thực tế dùng buffer 50% → ~ 800GB # Khuyến nghị: tối thiểu 2x raw size, có thể giảm khi dedup tốt

Yêu cầu hardware

Thành phần Lab / Small SMB Production Enterprise
CPU2 core8 core16+ core
RAM4GB16–32GB64GB+ (ECC)
OS Disk32GB SSD120GB SSD240GB SSD RAID1
Backup Storage2TB HDD10–20TB HDD RAID6 / RAIDZ250TB+ RAIDZ2 + SSD special vdev
Filesystemext4ZFS RAIDZ1/2ZFS + L2ARC SSD
Network1Gbps10Gbps25Gbps + bond

Tại sao nên dùng ZFS?

PBS chunk có size 4MB cố định → ZFS với recordsize=4M cực kỳ tối ưu. ZFS còn cho snapshot toàn bộ datastore + replication sang PBS thứ 2 nhanh chóng + bit-rot detection.

P-2

Cài đặt PBS

~30 phút — 2 cách: ISO standalone hoặc Debian existing

Cách 1: Cài từ ISO (khuyến nghị)

  1. 1

    Download PBS ISO

    Tải từ proxmox.com/en/proxmox-backup-server/get-started (~600MB). Tạo USB boot bằng Rufus/dd.

  2. 2

    Boot & Install Wizard

    • Chọn ổ OS (240GB SSD) — KHÔNG chọn ổ backup storage
    • Filesystem: ZFS RAID1 nếu có 2 SSD
    • Hostname FQDN: pbs01.lab.local
    • IP / Gateway / DNS
  3. 3

    Đổi repository (no-subscription)

    sed -i 's|^deb|#deb|' /etc/apt/sources.list.d/pbs-enterprise.list echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" > /etc/apt/sources.list.d/pbs-no-sub.list apt update apt upgrade -y
  4. 4

    Truy cập Web UI

    https://<pbs-ip>:8007 · login root + Linux PAM

Cách 2: Cài lên Debian 12 có sẵn

# Thêm GPG key & repo wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" > /etc/apt/sources.list.d/pbs.list apt update apt install proxmox-backup-server -y
P-3

Tạo Datastore (kho backup)

~20 phút — chuẩn bị filesystem + tạo datastore

Bước 1: Tạo ZFS pool cho backup storage

# Xem disks có sẵn lsblk # Tạo ZFS pool RAIDZ2 (chịu được 2 disk fail) trên 6 HDD zpool create \ -o ashift=12 \ -O compression=zstd \ -O atime=off \ -O recordsize=4M \ -O xattr=sa \ backup-pool raidz2 \ /dev/sdb /dev/sdc /dev/sdd \ /dev/sde /dev/sdf /dev/sdg # Tạo dataset riêng cho PBS zfs create backup-pool/pbs-datastore # Verify zpool status df -h /backup-pool/pbs-datastore

Bước 2: Tạo Datastore qua Web UI

  1. 1

    Datastore → Add Datastore

    • Name: backup-main
    • Backing Path: /backup-pool/pbs-datastore
    • GC Schedule: daily
    • Prune Schedule: daily
    • ✅ Notify on errors
  2. 2

    Cấu hình Prune Policy (retention)

    Datastore → Prune & GC → Edit Prune Options:

    • Keep Last: 3 (luôn giữ 3 bản mới nhất)
    • Keep Daily: 14
    • Keep Weekly: 8
    • Keep Monthly: 12
    • Keep Yearly: 3 (cho audit)
  3. 3

    Tạo Verify Job

    Datastore → Verify Jobs → Add: schedule weekly, check chunks integrity

Bước 3: Tạo User & API Token cho Proxmox VE

# GUI: Configuration → Access Control → Users → Add # Hoặc CLI: proxmox-backup-manager user create \ backup@pbs \ --password 'StrongPass123!' # Tạo API Token (không cần đổi password sau) proxmox-backup-manager user generate-token backup@pbs pve-cluster01 # Lưu lại: tokenid + secret (chỉ hiện 1 lần) # Format: backup@pbs!pve-cluster01 # Phân quyền Datastore proxmox-backup-manager acl update \ /datastore/backup-main \ DatastoreBackup \ --auth-id 'backup@pbs!pve-cluster01'
P-4

Kết nối PBS với Proxmox VE

~15 phút — thực hiện trên PVE Web UI

  1. 1

    Lấy PBS Fingerprint

    # Trên PBS server, chạy: proxmox-backup-manager cert info | grep Fingerprint # VD: Fingerprint (sha256): AB:CD:12:34:...:XY
  2. 2

    Add PBS Storage trên Proxmox VE

    PVE Web UI → Datacenter → Storage → Add → Proxmox Backup Server

    • ID: pbs-main
    • Server: PBS IP/FQDN
    • Username: backup@pbs!pve-cluster01 (API token format)
    • Password: API token secret đã lưu
    • Datastore: backup-main
    • Fingerprint: paste fingerprint từ step 1
    • ✅ Enable
  3. 3

    Tạo Backup Job

    Datacenter → Backup → Add:

    • Storage: pbs-main
    • Schedule: 02:00 daily
    • Selection mode: All hoặc Include/Exclude
    • Mode: Snapshot (no downtime)
    • Compression: zstd
    • Notification: email khi error
  4. 4

    Test backup ngay

    Click vào job → Run Now → quan sát log. Lần đầu sẽ full backup, các lần sau là incremental (chỉ chunk thay đổi).

Khi backup chạy thành công

Trên PBS Web UI → Datastore → Content → thấy VM ID xuất hiện. Click vào để xem các snapshot, verify status, encryption status.

P-5

Encryption, Sync & Tape

~40 phút — nâng cao theo chuẩn 3-2-1

Encryption client-side

Data được mã hóa trước khi gửi sang PBS — kể cả admin PBS cũng không đọc được. Key lưu trên PVE.

# Trên PVE node, generate encryption key proxmox-backup-client key create /etc/pve/backup-encryption.key # Backup encryption key này ra nơi an toàn (NẾU MẤT → mất data!) cat /etc/pve/backup-encryption.key # Lưu vào password manager, USB stick offline, in giấy... # GUI: chỉnh Storage pbs-main → Edit → Encryption Key → paste key

MẤT KEY = MẤT DATA

Encryption key phải backup ra ít nhất 2 nơi offline. Không thể restore backup nếu mất key. PBS không lưu key trên server.

Sync Job — Replication sang PBS Secondary (offsite)

  1. 1

    Add Remote — PBS Primary connect to PBS Secondary

    PBS Primary → Configuration → Remotes → Add: host PBS secondary, user, fingerprint

  2. 2

    Create Sync Job

    Datastore → Sync Jobs → Add: source remote + datastore → schedule daily

    💡 PBS chỉ sync chunks thay đổi — incremental forever — cực kỳ tiết kiệm bandwidth

Tape Backup (LTO) — Air-gap

1 Cắm tape drive (vd LTO-8) & verify

# Check device path ls /dev/tape/by-id/

2 Add Tape Drive & Changer qua GUI

  • Tape Backup → Drives → Add (thêm tape drive)
  • Tape Backup → Changers → Add (nếu là tape library)

3 Tạo Media Pool (nhóm tape theo retention)

GUI: Tape Backup → Media Pools → Add

NAME

pool-monthly

ALLOCATION

continue

RETENTION

1 year

4 Tạo Tape Backup Job

GUI: Tape Backup → Backup Jobs → Add

DATASTORE

backup-main

POOL

pool-monthly

SCHEDULE

monthly

Test Restore

Backup chỉ tốt khi restore được. Test định kỳ:

# Trên PVE: VM list → chọn VM → Backup → chọn snapshot → Restore # Hoặc CLI: qmrestore pbs-main:backup/vm/100/2026-06-04T02:00:00Z 999 --storage local-lvm # File-level restore từ snapshot (không restore cả VM) # PBS Web UI → Datastore → click snapshot → "Browse" → tải file ra

Hoàn thành 3-2-1!

VM → PBS Primary → Sync to PBS Secondary (offsite) → Tape monthly (air-gap). Đáp ứng đầy đủ DR best practices.

Troubleshooting thường gặp

Backup chậm

Nguyên nhân thường gặp:

  • Network 1Gbps đầy — nâng cấp lên 10Gbps
  • HDD chậm — thêm SSD special vdev cho ZFS metadata
  • Compression CPU bottleneck — đổi từ zstd-19 xuống zstd-3
  • Verify chunks song song — dời job sang giờ thấp điểm
Datastore đầy nhanh — dedup không hoạt động?

Dedup PBS dùng content-defined chunking 4MB. Nếu disk nhiều file nhỏ thay đổi → dedup giảm. Check:

proxmox-backup-manager datastore list --output-format=json
# Xem fields: total, used, dedup ratio

Chạy GC để dọn chunks không còn ref: proxmox-backup-manager garbage-collection start backup-main

Verify job báo "chunk corrupt"

Disk hỏng hoặc bit-rot. ZFS sẽ tự heal nếu có redundancy. Check:

zpool status -v backup-pool
zpool scrub backup-pool

Nếu pool RAIDZ + chunk bị mất → cần restore từ PBS secondary qua sync.