Proxmox VE Backup & Restore
백업 없는 인프라는 인프라가 아님 — vzdump, PBS, 3-2-1 규칙
📌 이 글의 목적
VM/CT를 만들고 클러스터를 구성했으면, 마지막으로 백업 전략이 필요함. 하드웨어는 언젠가 고장나고, 사람은 실수함.
이 글을 읽고 나면:
- vzdump의 백업 모드와 옵션을 이해할 수 있음
- Proxmox Backup Server(PBS)를 설정하고 연동할 수 있음
- 자동 백업 스케줄을 구성할 수 있음
- 3-2-1 백업 규칙을 Proxmox 환경에 적용할 수 있음
- 재해 복구(DR) 시나리오를 계획할 수 있음
1. 백업 기초
1.1 백업 구조
1.2 vzdump 백업 모드
| 모드 | VM 중단 | 일관성 | Guest Agent | 추천 |
|---|---|---|---|---|
stop | ✅ VM 중지 | ✅ 완벽 | 불필요 | 중단 허용 시 |
suspend | ⚠️ 잠시 정지 | ✅ | 불필요 | 짧은 중단 |
snapshot | ❌ 무중단 | ⚠️ Agent 필요 | ✅ 필요 | ✅ 프로덕션 |
snapshot 모드 동작:
💡 snapshot 모드에서 Guest Agent가 없으면? 파일시스템 동결 없이 스냅샷을 찍음. 이 경우 디스크 I/O 중인 데이터의 일관성이 보장되지 않음. DB 서버 등에서는 Agent가 필수.
1.3 백업 포맷
| 포맷 | 확장자 | 설명 | 스토리지 |
|---|---|---|---|
| VMA | .vma | Proxmox 전용 VM 백업 | 로컬, NFS |
| tar | .tar | CT 백업 | 로컬, NFS |
| PBS | .pxar / .fidx | PBS 전용 (증분, 중복제거) | PBS |
압축 옵션:
| 압축 | 확장자 | 속도 | 압축률 | 추천 |
|---|---|---|---|---|
| 없음 | — | 최고 | — | 빠른 백업 우선 |
| LZO | .lzo | 빠름 | 낮음 | — |
| GZIP | .gz | 느림 | 높음 | — |
| ZSTD | .zst | 빠름 | 높음 | ✅ 추천 |
2. vzdump 백업
2.1 수동 백업
# VM 백업 (snapshot 모드, ZSTD 압축)
vzdump 100 --mode snapshot --compress zstd --storage local
# CT 백업
vzdump 200 --mode stop --compress zstd --storage local
# 여러 VM/CT 동시
vzdump 100 101 200 201 --mode snapshot --compress zstd --storage local
# 전체 VM/CT 백업
vzdump --all --mode snapshot --compress zstd --storage local
# 특정 노드의 전체 백업
vzdump --all --mode snapshot --compress zstd --storage local --node pve1
2.2 백업 옵션
vzdump 100 \
--mode snapshot \
--compress zstd \
--storage local \
--remove 1 \ # 완료 후 보관 기간 초과 백업 삭제
--maxfiles 3 \ # 최대 보관 백업 수 (스토리지당)
--notes-template '{{guestname}} backup {{cluster}}' \
--mailto admin@lab.local \
--mailnotification always \
--protected 0
| 옵션 | 설명 |
|---|---|
--mode | stop / suspend / snapshot |
--compress | 0 / lzo / gzip / zstd |
--storage | 백업 저장 스토리지 |
--maxfiles | 보관할 최대 백업 수 |
--remove | 오래된 백업 자동 삭제 |
--mailto | 알림 이메일 |
--exclude-path | CT에서 제외할 경로 |
--bwlimit | 대역폭 제한 (KB/s) |
--ionice | I/O 우선순위 (0~8) |
2.3 백업 파일 확인
# 백업 목록
ls -la /var/lib/vz/dump/
# 출력 예시:
# vzdump-qemu-100-2026_02_26-15_00_00.vma.zst
# vzdump-qemu-100-2026_02_26-15_00_00.log
# vzdump-lxc-200-2026_02_26-15_00_00.tar.zst
# 백업 상세 정보
vzdump --info /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst
3. 백업 스케줄
3.1 웹 UI에서 설정
Datacenter → Backup → Add
3.2 스케줄 구문
Proxmox는 systemd calendar event 문법을 사용함:
| 예시 | 설명 |
|---|---|
*-*-* 02:00 | 매일 02:00 |
sat *-*-* 03:00 | 매주 토요일 03:00 |
mon,wed,fri *-*-* 01:00 | 월수금 01:00 |
*-*-01 04:00 | 매월 1일 04:00 |
*-*-* 02:00,14:00 | 매일 02:00, 14:00 (2회) |
3.3 CLI에서 스케줄 설정
# 스케줄 설정 파일
cat /etc/pve/jobs.cfg
# 예시:
vzdump: daily-backup
all 1
compress zstd
dow mon,tue,wed,thu,fri
enabled 1
mailnotification always
mailto admin@lab.local
maxfiles 5
mode snapshot
schedule 02:00
storage pbs-backup
vzdump: weekly-full
all 1
compress zstd
dow sat
enabled 1
mode stop
schedule 03:00
storage pbs-backup
3.4 권장 스케줄 패턴
| 환경 | 스케줄 | 모드 | 보관 |
|---|---|---|---|
| 홈랩 | 주 1회 | snapshot | 4주 |
| 개발 | 일 1회 | snapshot | 7일 |
| 프로덕션 (일반) | 일 1회 + 주 1회 전체 | snapshot + stop | 일 7 / 주 4 / 월 3 |
| 프로덕션 (중요) | 일 2회 + 주 1회 전체 | snapshot + stop | 일 14 / 주 4 / 월 6 |
4. Proxmox Backup Server (PBS)
4.1 왜 PBS인가
일반 백업(vzdump → 파일)과 PBS의 차이:
| 항목 | vzdump → 파일 | vzdump → PBS |
|---|---|---|
| 백업 유형 | 전체 (매번) | 증분 (변경분만) |
| 중복 제거 | ❌ | ✅ |
| 백업 속도 | 느림 | 빠름 (증분) |
| 저장 공간 | 큼 | 작음 (50~80% 절감) |
| 무결성 검증 | ❌ | ✅ |
| 암호화 | ❌ | ✅ (클라이언트 측) |
| 원격 동기화 | 수동 | ✅ (PBS → 원격 PBS) |
| 단일 파일 복원 | ❌ (전체 복원 필요) | ✅ |
| 비용 | 무료 | 무료 |
4.2 PBS 아키텍처
4.3 PBS 설치
PBS는 별도 서버에 설치하는 것이 원칙. 같은 노드에 설치하면 노드 장애 시 백업도 함께 소실됨.
# === PBS 전용 서버 (Debian 12) ===
# PBS 리포지토리 추가
echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" > /etc/apt/sources.list.d/pbs-no-subscription.list
# Proxmox 키 추가
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
# PBS 설치
apt update
apt install proxmox-backup-server -y
# 웹 UI 접속: https://<PBS-IP>:8007
PBS Datastore 생성:
# 백업용 디스크를 마운트
mkdir -p /backup/main
# ZFS를 쓴다면 (추천 — 무결성 보장)
zpool create backup-pool mirror /dev/sdb /dev/sdc
zfs create backup-pool/main
# PBS Datastore 생성 (웹 UI 또는 CLI)
proxmox-backup-manager datastore create main /backup/main
4.4 PVE에서 PBS 연동
# Proxmox VE에서 PBS 스토리지 추가
pvesm add pbs pbs-main \
--server 10.10.10.70 \
--datastore main \
--username backup@pbs \
--password \
--fingerprint $(proxmox-backup-manager cert info --output-format json | jq -r '.fingerprint') \
--content backup
# 확인
pvesm status | grep pbs
웹 UI: Datacenter → Storage → Add → Proxmox Backup Server
4.5 PBS 백업 실행
# PBS로 백업 (증분 자동 적용)
vzdump 100 --mode snapshot --compress zstd --storage pbs-main
# PBS 상태 확인 (PBS 서버에서)
proxmox-backup-manager datastore list
proxmox-backup-client list --repository backup@pbs@10.10.10.70:main
4.6 PBS 보관 정책 (Prune)
PBS는 유연한 보관 정책을 제공함:
# Datastore Prune 설정
proxmox-backup-manager datastore update main \
--keep-last 3 \ # 최근 3개
--keep-daily 7 \ # 매일 7개
--keep-weekly 4 \ # 매주 4개
--keep-monthly 6 \ # 매월 6개
--keep-yearly 1 # 매년 1개
보관 정책 예시:
| 정책 | 값 | 결과 |
|---|---|---|
| keep-last | 3 | 가장 최근 백업 3개 유지 |
| keep-daily | 7 | 최근 7일 중 하루에 1개씩 |
| keep-weekly | 4 | 최근 4주 중 주에 1개씩 |
| keep-monthly | 6 | 최근 6개월 중 월에 1개씩 |
| keep-yearly | 1 | 최근 1년 중 연 1개 |
💡 Prune은 조건에 맞는 백업만 유지하고 나머지를 삭제함. 삭제 후 Garbage Collection(GC)으로 실제 디스크 공간을 회수함.
4.7 PBS 무결성 검증
# 검증 작업 실행 (PBS 서버에서)
proxmox-backup-manager verify main
# 스케줄 설정 (웹 UI)
# PBS → Datastore → Verify Jobs → Add
4.8 PBS 원격 동기화 (오프사이트)
# 원격 PBS 등록
proxmox-backup-manager remote add offsite-pbs \
--host 203.0.113.70 \
--port 8007 \
--auth-id sync@pbs \
--password
# Sync Job 생성
proxmox-backup-manager sync-job create offsite-sync \
--store main \
--remote offsite-pbs \
--remote-store offsite \
--schedule "sat 04:00" \
--remove-vanished true
5. 복원
5.1 VM 복원
# 파일 백업에서 복원
qmrestore /var/lib/vz/dump/vzdump-qemu-100-2026_02_26-15_00_00.vma.zst 100
# 다른 VMID로 복원
qmrestore /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst 150
# 다른 스토리지에 복원
qmrestore /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst 150 --storage zfs-data
# PBS에서 복원 (웹 UI 권장)
# Datacenter → Storage → pbs-main → Backups → Restore
5.2 CT 복원
# CT 복원
pct restore 200 /var/lib/vz/dump/vzdump-lxc-200-2026_02_26-15_00_00.tar.zst
# 다른 VMID + 설정 변경
pct restore 250 /var/lib/vz/dump/vzdump-lxc-200-*.tar.zst \
--hostname restored-ct \
--storage local-lvm \
--rootfs local-lvm:8
5.3 PBS 단일 파일 복원
PBS의 차별화 기능: 전체 복원 없이 개별 파일만 추출 가능.
# PBS에서 파일 브라우저 (웹 UI)
# PBS → Datastore → main → VM 100 → 백업 선택 → File Restore
# CLI에서 파일 추출
proxmox-backup-client restore \
backup@pbs@10.10.10.70:main \
vm/100/2026-02-26T15:00:00Z \
/etc/nginx/nginx.conf \
--target /tmp/restored-nginx.conf
5.4 복원 테스트
⚠️ 백업이 있다고 안심 금지. 복원이 되는지 주기적으로 테스트해야 함.
# 복원 테스트 절차:
# 1. 다른 VMID로 복원
qmrestore /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst 999
# 2. 네트워크 분리 상태에서 시작 (IP 충돌 방지)
qm set 999 --net0 virtio,bridge=vmbr99 # 격리된 브릿지
qm start 999
# 3. 콘솔에서 데이터 확인
# 4. 테스트 완료 후 삭제
qm stop 999
qm destroy 999 --purge
6. 3-2-1 백업 규칙
6.1 규칙
| 규칙 | 의미 | Proxmox 적용 |
|---|---|---|
| 3 복사본 | 원본 + 백업 2개 | VM + PBS 백업 + 원격 PBS |
| 2 미디어 | 서로 다른 스토리지 | NVMe(원본) + HDD(PBS) |
| 1 오프사이트 | 물리적으로 다른 장소 | 원격 PBS 또는 클라우드 |
6.2 Proxmox 환경에서 3-2-1 구현
홈랩에서의 현실적 3-2-1:
| 복사본 | 위치 | 미디어 | 방법 |
|---|---|---|---|
| 1 (원본) | Proxmox 노드 | NVMe | 운영 데이터 |
| 2 (로컬 백업) | 같은 네트워크 NAS/PBS | HDD | vzdump → PBS 매일 |
| 3 (오프사이트) | 클라우드 / 다른 집 | 클라우드 | PBS Sync 주간 |
7. 재해 복구 (DR)
7.1 DR 시나리오
| 시나리오 | 영향 | 복구 방법 |
|---|---|---|
| VM 파일 손상 | VM 1개 | 스냅샷 롤백 또는 백업 복원 |
| 노드 장애 (HW) | 해당 노드 VM | HA 자동 페일오버 + 백업에서 재구축 |
| 스토리지 장애 | 데이터 손실 | Ceph 자가복구 또는 백업 복원 |
| 전체 사이트 장애 | 모든 서비스 | 원격 PBS에서 전체 복원 |
| 랜섬웨어 | 데이터 암호화 | 격리된 백업에서 복원 |
7.2 RTO / RPO
| 지표 | 의미 | 결정 요소 |
|---|---|---|
| RPO (Recovery Point Objective) | 허용 가능한 데이터 손실 시간 | 백업 주기 |
| RTO (Recovery Time Objective) | 서비스 복구까지 걸리는 시간 | 복원 속도, 절차 |
| 목표 | RPO 달성 방법 | RTO 달성 방법 |
|---|---|---|
| 4시간 | 6시간마다 백업 | PBS 증분 복원 |
| 1시간 | 매시간 백업 (PBS 증분) | HA + 핫 스탠바이 |
| 거의 0 | Ceph 실시간 복제 | HA + Ceph |
7.3 DR 계획 템플릿
재해 복구 계획서
================
1. 우선순위 (복구 순서)
- Tier 1 (즉시): DNS, 인증, 네트워크
- Tier 2 (1시간): 웹 서버, API
- Tier 3 (4시간): 모니터링, 로깅
- Tier 4 (24시간): 개발, 테스트
2. 백업 현황
- 로컬 PBS: 192.168.1.70 (일일 백업)
- 원격 PBS: xxx.xxx.xxx.xxx (주간 동기화)
3. 복구 절차
a. 장애 범위 확인
b. 쿼럼 확인 (클러스터 상태)
c. HA 자동 복구 확인
d. 필요시 수동 복원 (PBS → 새 노드)
e. 네트워크/DNS 설정 확인
f. 서비스 정상 동작 검증
4. 테스트 일정: 분기 1회
8. 백업 설계 패턴
8.1 홈랩
# /etc/pve/jobs.cfg
vzdump: homelab-daily
all 1
compress zstd
enabled 1
mode snapshot
schedule sat 03:00
storage local
maxfiles 4
| 항목 | 설정 |
|---|---|
| 주기 | 주 1회 (토요일 03:00) |
| 모드 | snapshot |
| 대상 | 전체 VM/CT |
| 보관 | 4주 |
| 스토리지 | 로컬 |
8.2 프로덕션
# 일일 증분 백업 (PBS)
vzdump: prod-daily
all 1
compress zstd
enabled 1
mode snapshot
schedule *-*-* 02:00
storage pbs-main
# 주간 전체 백업 (중단 허용 시간에)
vzdump: prod-weekly-full
vmid 100,101,200
compress zstd
enabled 1
mode stop
schedule sat 04:00
storage pbs-main
PBS 보관 정책:
keep-last: 3
keep-daily: 7
keep-weekly: 4
keep-monthly: 6
keep-yearly: 1
8.3 전체 백업 토폴로지
9. 트러블슈팅
Q: 백업 중 "No space left on device"
# 백업 스토리지 여유 공간 확인
df -h /var/lib/vz/dump/
# 오래된 백업 삭제
# 웹 UI → Storage → Backups → 선택 → Remove
# 또는 CLI
rm /var/lib/vz/dump/vzdump-qemu-100-2026_01_*.vma.zst
Q: snapshot 백업이 느림
# I/O 우선순위 낮추기
vzdump 100 --mode snapshot --ionice 7 --bwlimit 51200
# 압축을 빠른 것으로
vzdump 100 --mode snapshot --compress lzo
Q: PBS 연결 실패
# 네트워크 확인
ping 10.10.10.70
nc -zv 10.10.10.70 8007
# Fingerprint 확인
proxmox-backup-manager cert info # PBS 서버에서
# 인증 확인
proxmox-backup-client list --repository backup@pbs@10.10.10.70:main
Q: 복원 후 VM이 부팅 안 됨
# 부팅 순서 확인
qm config 100 | grep boot
# 디스크 연결 확인
qm config 100 | grep scsi
# BIOS/UEFI 모드 확인 (원본과 동일해야 함)
qm config 100 | grep bios
10. VMware 대응표
| VMware | Proxmox | 비고 |
|---|---|---|
| Veeam Backup | PBS (무료!) | 증분, 중복제거 |
| VMware SRM | PBS Sync + DR 계획 | 자동 페일오버는 없음 |
| VADP | vzdump (snapshot) | 백업 API |
| CBT (Changed Block Tracking) | PBS 증분 | 변경 블록 추적 |
| vSphere Replication | PBS Remote Sync | |
| Backup Schedule | /etc/pve/jobs.cfg | 웹 UI에서 관리 |
| Retention Policy | PBS Prune | keep-daily/weekly/monthly |
💡 PBS는 무료임. VMware 환경에서 Veeam 라이선스 비용(노드당 수백만 원)을 생각하면 PBS의 가성비는 압도적임.
정리
백업 전략의 핵심 원칙:
- PBS를 사용 — 증분, 중복제거, 무결성 검증, 파일 단위 복원, 그리고 무료
- 3-2-1 규칙을 준수 — 3 복사본, 2 미디어, 1 오프사이트
- 자동화 필수 — 수동 백업은 잊히기 마련, 스케줄 설정
- 복원 테스트 — 분기 1회 이상 실제 복원 테스트
- RPO/RTO 정의 — 서비스별 중요도에 따라 백업 주기 결정
다음 글
→ Proxmox + Automation — Terraform Provider, Ansible, API, IaC 연동
🔗 관련 문서
- Storage Configuration — 백업 스토리지
- Cluster & HA — HA와 백업의 관계
- Proxmox VE Series Index — 시리즈 목차