Skip to main content

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.vmaProxmox 전용 VM 백업로컬, NFS
tar.tarCT 백업로컬, NFS
PBS.pxar / .fidxPBS 전용 (증분, 중복제거)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
옵션설명
--modestop / suspend / snapshot
--compress0 / lzo / gzip / zstd
--storage백업 저장 스토리지
--maxfiles보관할 최대 백업 수
--remove오래된 백업 자동 삭제
--mailto알림 이메일
--exclude-pathCT에서 제외할 경로
--bwlimit대역폭 제한 (KB/s)
--ioniceI/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회snapshot4주
개발일 1회snapshot7일
프로덕션 (일반)일 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-last3가장 최근 백업 3개 유지
keep-daily7최근 7일 중 하루에 1개씩
keep-weekly4최근 4주 중 주에 1개씩
keep-monthly6최근 6개월 중 월에 1개씩
keep-yearly1최근 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/PBSHDDvzdump → PBS 매일
3 (오프사이트)클라우드 / 다른 집클라우드PBS Sync 주간

7. 재해 복구 (DR)

7.1 DR 시나리오

시나리오영향복구 방법
VM 파일 손상VM 1개스냅샷 롤백 또는 백업 복원
노드 장애 (HW)해당 노드 VMHA 자동 페일오버 + 백업에서 재구축
스토리지 장애데이터 손실Ceph 자가복구 또는 백업 복원
전체 사이트 장애모든 서비스원격 PBS에서 전체 복원
랜섬웨어데이터 암호화격리된 백업에서 복원

7.2 RTO / RPO

지표의미결정 요소
RPO (Recovery Point Objective)허용 가능한 데이터 손실 시간백업 주기
RTO (Recovery Time Objective)서비스 복구까지 걸리는 시간복원 속도, 절차
목표RPO 달성 방법RTO 달성 방법
4시간6시간마다 백업PBS 증분 복원
1시간매시간 백업 (PBS 증분)HA + 핫 스탠바이
거의 0Ceph 실시간 복제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 대응표

VMwareProxmox비고
Veeam BackupPBS (무료!)증분, 중복제거
VMware SRMPBS Sync + DR 계획자동 페일오버는 없음
VADPvzdump (snapshot)백업 API
CBT (Changed Block Tracking)PBS 증분변경 블록 추적
vSphere ReplicationPBS Remote Sync
Backup Schedule/etc/pve/jobs.cfg웹 UI에서 관리
Retention PolicyPBS Prunekeep-daily/weekly/monthly

💡 PBS는 무료임. VMware 환경에서 Veeam 라이선스 비용(노드당 수백만 원)을 생각하면 PBS의 가성비는 압도적임.


정리

백업 전략의 핵심 원칙:

  1. PBS를 사용 — 증분, 중복제거, 무결성 검증, 파일 단위 복원, 그리고 무료
  2. 3-2-1 규칙을 준수 — 3 복사본, 2 미디어, 1 오프사이트
  3. 자동화 필수 — 수동 백업은 잊히기 마련, 스케줄 설정
  4. 복원 테스트 — 분기 1회 이상 실제 복원 테스트
  5. RPO/RTO 정의 — 서비스별 중요도에 따라 백업 주기 결정

다음 글

Proxmox + Automation — Terraform Provider, Ansible, API, IaC 연동


🔗 관련 문서


📝 참고 자료