Module 6: Backup & Restore (vzdump)¶
학습 목표¶
이 모듈을 완료하면 다음을 이해하게 됩니다: - vzdump의 백업 모드와 각각의 장단점 - Proxmox Backup Server(PBS) 통합 및 고급 기능 - 백업 보존 정책(Retention)의 설계 및 적용 - 복원(Restore) 절차와 Live-Restore 기능
1. 백업 아키텍처 개요¶
1.1 Proxmox VE 백업 시스템¶
┌─────────────────────────────────────────────────────────────────────────┐
│ Proxmox VE Backup Architecture │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ vzdump (Backup Tool) │ │
│ │ │ │
│ │ • VM/CT 설정 + 데이터를 함께 백업 │ │
│ │ • 항상 Full Backup (증분 없음 - PBS 제외) │ │
│ │ • Live Backup 지원 (실행 중 백업) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌────────────────────┼────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │
│ │ File-Level │ │ Block-Level │ │ Proxmox │ │
│ │ Storage │ │ Storage │ │ Backup Server│ │
│ │ │ │ │ │ │ │
│ │ • NFS │ │ • Local Dir │ │ • 증분 백업 │ │
│ │ • CIFS │ │ • (VMA files)│ │ • 중복 제거 │ │
│ │ • Local Dir │ │ │ │ • 암호화 │ │
│ └───────────────┘ └───────────────┘ └───────────────┘ │
│ │
│ 백업 파일 형식: │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ VM: vzdump-qemu-<vmid>-<date>-<time>.vma[.zst|.gz|.lzo] │ │
│ │ CT: vzdump-lxc-<vmid>-<date>-<time>.tar[.zst|.gz|.lzo] │ │
│ │ PBS: Chunked + Deduplicated (index + chunks) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
1.2 백업 스토리지 유형 비교¶
| 스토리지 유형 | 파일 형식 | 증분 백업 | 중복 제거 | 암호화 | 권장 용도 |
|---|---|---|---|---|---|
| Proxmox Backup Server | Chunks | ✅ | ✅ | ✅ (Client-side) | 프로덕션 권장 |
| NFS/CIFS | .vma/.tar | ❌ | ❌ | ❌ | 간단한 백업 |
| Local Directory | .vma/.tar | ❌ | ❌ | ❌ | 테스트/임시 |
1.3 주요 설정 파일¶
| 파일 경로 | 용도 |
|---|---|
/etc/vzdump.conf |
노드별 기본 백업 설정 |
/etc/pve/jobs.cfg |
스케줄된 백업 작업 |
/etc/pve/storage.cfg |
백업 스토리지 정의 |
2. 백업 모드 (Backup Modes)¶
2.1 VM 백업 모드¶
┌─────────────────────────────────────────────────────────────────────────┐
│ VM Backup Modes │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ SNAPSHOT Mode (기본값, 권장) │ │
│ │ ═══════════════════════════════════════════════════════════════ │ │
│ │ │ │
│ │ 1. QEMU에 "copy-before-write" 필터 설치 │ │
│ │ 2. Guest 계속 실행 (다운타임 최소) │ │
│ │ 3. 새로운 쓰기 발생시 → 기존 데이터 먼저 백업 │ │
│ │ 4. QEMU Guest Agent → fs-freeze (일관성 보장) │ │
│ │ │ │
│ │ Timeline: │ │
│ │ ───────────────────────────────────────────────────────── │ │
│ │ [fs-freeze] → [Backup Start] → [Data Copy] → [fs-thaw] │ │
│ │ (~1sec) │ │ (~1sec) │ │
│ │ VM Running VM Running │ │
│ │ │ │
│ │ 장점: 최소 다운타임, 모든 스토리지 지원 │ │
│ │ 단점: I/O 부하 (copy-before-write 오버헤드) │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ SUSPEND Mode │ │
│ │ ═══════════════════════════════════════════════════════════════ │ │
│ │ │ │
│ │ 1. VM을 일시 중지 (vCPU halt, RAM 유지) │ │
│ │ 2. Dirty bitmap 확보 │ │
│ │ 3. VM 재개 │ │
│ │ 4. Dirty 데이터 백업 │ │
│ │ │ │
│ │ Timeline: │ │
│ │ ───────────────────────────────────────────────────────── │ │
│ │ [VM Suspend] → [Bitmap] → [VM Resume] → [Backup Dirty] │ │
│ │ │ │ │ │ │
│ │ Downtime (~1sec) Running │ │
│ │ │ │
│ │ 장점: Guest Agent 불필요 │ │
│ │ 단점: 짧은 다운타임 발생 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ STOP Mode │ │
│ │ ═══════════════════════════════════════════════════════════════ │ │
│ │ │ │
│ │ 1. VM 완전 종료 │ │
│ │ 2. 디스크 백업 │ │
│ │ 3. VM 재시작 │ │
│ │ │ │
│ │ Timeline: │ │
│ │ ───────────────────────────────────────────────────────── │ │
│ │ [VM Stop] ═════════════════════════════════════ [VM Start] │ │
│ │ ←──────── Full Downtime ────────────→ │ │
│ │ (백업 전체 시간) │ │
│ │ │ │
│ │ 장점: 최고의 일관성 보장 │ │
│ │ 단점: 긴 다운타임 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
2.2 Container 백업 모드¶
┌─────────────────────────────────────────────────────────────────────────┐
│ Container Backup Modes │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ SNAPSHOT Mode (기본값) │ │
│ │ │ │
│ │ • 스토리지 스냅샷 기능 사용 │ │
│ │ • LVM, ZFS, Ceph RBD 등 지원 │ │
│ │ • 컨테이너 계속 실행 │ │
│ │ • 파일 시스템 일관성: 스냅샷 시점 기준 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ SUSPEND Mode │ │
│ │ │ │
│ │ • 컨테이너 프로세스 freeze (SIGSTOP) │ │
│ │ • 로컬 파일시스템 + NFS 타겟 조합시 성능 향상 (4배↑) │ │
│ │ • ACL이 있는 로컬 CT → NFS 백업시 필수 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ STOP Mode │ │
│ │ │ │
│ │ • 컨테이너 완전 종료 │ │
│ │ • 가장 긴 다운타임 │ │
│ │ • 최고 일관성 보장 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
2.3 모드 선택 가이드¶
| 상황 | 권장 모드 | 이유 |
|---|---|---|
| 일반 프로덕션 VM | snapshot |
최소 다운타임, Guest Agent로 일관성 |
| Guest Agent 없는 VM | suspend |
짧은 일시정지로 일관성 확보 |
| 데이터베이스 서버 | snapshot + App dump |
DB 일관성 별도 확보 필요 |
| 크리티컬 시스템 | stop (점검 시간) |
완벽한 일관성 |
| 스냅샷 지원 스토리지의 CT | snapshot |
빠르고 효율적 |
| NFS 타겟 + 로컬 CT | suspend |
성능 최적화 |
3. vzdump 사용법¶
3.1 기본 백업 명령어¶
# 단일 VM 백업 (기본 설정)
vzdump 100
# 모드 지정
vzdump 100 --mode snapshot # 스냅샷 모드 (기본)
vzdump 100 --mode suspend # 일시정지 모드
vzdump 100 --mode stop # 정지 모드
# 여러 VM 백업
vzdump 100 101 102
# 모든 VM 백업
vzdump --all
# 특정 VM 제외
vzdump --all --exclude 100,101
# 스토리지 지정
vzdump 100 --storage backup-storage
# 디렉토리 직접 지정
vzdump 100 --dumpdir /mnt/backup
# 압축 설정
vzdump 100 --compress zstd # zstd (권장, 빠름)
vzdump 100 --compress gzip # gzip
vzdump 100 --compress lzo # lzo (가장 빠름, 압축률 낮음)
vzdump 100 --compress 0 # 압축 안함
3.2 고급 백업 옵션¶
# 대역폭 제한 (KiB/s)
vzdump 100 --bwlimit 51200 # 50 MiB/s
# 메일 알림
vzdump 100 --mailto [email protected]
# 알림 조건
vzdump 100 --mailnotification always # 항상
vzdump 100 --mailnotification failure # 실패시만
# 보호된 백업으로 생성
vzdump 100 --protected 1
# 노트 템플릿 (메타데이터)
vzdump 100 --notes-template "{{guestname}} backup on {{node}}"
# I/O 우선순위 (BFQ 스케줄러)
vzdump 100 --ionice 7 # 0-7 (7=최저 우선순위)
# 특정 경로 제외 (CT만)
vzdump 200 --exclude-path /var/cache --exclude-path /tmp
# stdout으로 출력 (파이프용)
vzdump 100 --stdout | ssh remote "cat > /backup/vm100.vma"
3.3 Backup Fleecing (VM)¶
백업 중 새로운 쓰기가 발생하면, 기존 데이터를 임시로 저장하여 백업 성능을 개선합니다.
# Fleecing 활성화
vzdump 100 --fleecing enabled=1,storage=local-lvm
# 설명:
# - 백업 중 Guest가 블록에 새로 쓰면
# - 기존 데이터를 fleecing storage에 임시 저장
# - 백업 타겟의 속도와 무관하게 Guest I/O 유지
┌─────────────────────────────────────────────────────────────────────────┐
│ Backup Fleecing Flow │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Without Fleecing: │
│ ┌─────────┐ Write ┌─────────┐ Old Data ┌───────────┐ │
│ │ Guest │ ──────────────►│ Disk │ ─────────────►│ Backup │ │
│ │ │ │ │ (slow) │ Target │ │
│ └─────────┘ └─────────┘ └───────────┘ │
│ │ │
│ Guest waits for backup target │
│ │
│ With Fleecing: │
│ ┌─────────┐ Write ┌─────────┐ Old Data ┌───────────┐ │
│ │ Guest │ ──────────────►│ Disk │ ─────────────►│ Fleecing │ │
│ │ │ │ │ (fast) │ Storage │ │
│ └─────────┘ └─────────┘ │ │ (local) │ │
│ │ │ │ └───────────┘ │
│ │ │ │ │ │
│ No wait! ┌────▼────┐ │ ┌──────▼──────┐ │
│ │ Backup │◄─────┘ │ Backup │ │
│ │ Process │◄─────────────│ Target │ │
│ └─────────┘ │ (slow) │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
3.4 PBS Change Detection (Container)¶
PBS로 컨테이너 백업시 변경 감지 최적화:
# 메타데이터 기반 변경 감지 (빠름)
vzdump 200 --storage pbs --pbs-change-detection-mode metadata
# 모드 설명:
# default: 기본 동작
# metadata: mtime/ctime 기반 (빠르지만 덜 정확할 수 있음)
4. 백업 스케줄링¶
4.1 Web UI를 통한 스케줄 설정¶
경로: Datacenter → Backup → Add
┌─────────────────────────────────────────────────────────────────────────┐
│ Backup Job Configuration │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ General: │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Storage: [backup-storage ▼] │ │
│ │ Schedule: [daily ▼] 또는 Cron: [0 2 * * *] │ │
│ │ Selection: ○ All ○ Exclude selected ● Include selected │ │
│ │ Mode: [Snapshot ▼] │ │
│ │ Compression: [ZSTD ▼] │ │
│ │ Mail: [[email protected]] │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Advanced: │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Bandwidth Limit: [51200] KiB/s │ │
│ │ I/O Nice: [7] │ │
│ │ Enable Fleecing: [✓] Storage: [local-lvm] │ │
│ │ Protected: [ ] │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Retention: │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ ○ Use storage defaults │ │
│ │ ● Custom: keep-last=7, keep-weekly=4, keep-monthly=6 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
4.2 CLI를 통한 스케줄 관리¶
# 백업 작업 목록 조회
pvesh get /cluster/backup
# 새 백업 작업 생성
pvesh create /cluster/backup \
--storage backup-storage \
--schedule "0 2 * * *" \
--mode snapshot \
--compress zstd \
--vmid 100,101,102 \
--prune-backups keep-last=7,keep-weekly=4
# 백업 작업 수정
pvesh set /cluster/backup/<job-id> --mailto [email protected]
# 백업 작업 삭제
pvesh delete /cluster/backup/<job-id>
# 즉시 백업 작업 실행
vzdump --jobid <job-id>
4.3 스케줄 표현식¶
| 표현식 | 의미 |
|---|---|
daily |
매일 00:00 |
hourly |
매시간 |
weekly |
매주 일요일 00:00 |
monthly |
매월 1일 00:00 |
0 2 * * * |
매일 02:00 |
0 3 * * 0 |
매주 일요일 03:00 |
0 4 1 * * |
매월 1일 04:00 |
4.4 jobs.cfg 파일 구조¶
vzdump: backup-daily
all 1
compress zstd
mailnotification always
mailto [email protected]
mode snapshot
node pve1,pve2,pve3
prune-backups keep-last=7,keep-weekly=4,keep-monthly=6
schedule 0 2 * * *
storage pbs-backup
5. 백업 보존 정책 (Retention)¶
5.1 보존 옵션 설명¶
┌─────────────────────────────────────────────────────────────────────────┐
│ Retention Options Processing │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 처리 순서 (앞에서부터): │
│ │
│ 1. keep-last : 최근 N개 백업 유지 │
│ 2. keep-hourly : 시간당 최신 백업 N개 유지 │
│ 3. keep-daily : 일당 최신 백업 N개 유지 │
│ 4. keep-weekly : 주당 최신 백업 N개 유지 │
│ 5. keep-monthly : 월당 최신 백업 N개 유지 │
│ 6. keep-yearly : 연당 최신 백업 N개 유지 │
│ │
│ ※ 각 옵션은 독립적으로 동작, 이미 선택된 백업은 다음 옵션에서 제외 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
5.2 보존 정책 예제¶
# 예제 1: 간단한 보존 (최근 7개)
vzdump 100 --prune-backups keep-last=7
# 예제 2: 복합 보존 정책
vzdump 100 --prune-backups keep-last=3,keep-daily=14,keep-weekly=8,keep-monthly=12,keep-yearly=5
# 예제 3: 모든 백업 유지 (주의!)
vzdump 100 --prune-backups keep-all=1
5.3 권장 보존 정책 (10년 보관)¶
┌─────────────────────────────────────────────────────────────────────────┐
│ Recommended Retention Policy (10 Years) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ keep-last=3 │
│ └── 추가 수동 백업 대비 (예: 메이저 업데이트 전) │
│ │
│ keep-hourly=0 (설정 안함) │
│ └── 일일 백업이면 불필요 │
│ │
│ keep-daily=14 │
│ └── 2주간의 일일 백업 │
│ │
│ keep-weekly=8 │
│ └── 2개월간의 주간 백업 │
│ │
│ keep-monthly=12 │
│ └── 1년간의 월간 백업 │
│ │
│ keep-yearly=10 │
│ └── 10년간의 연간 백업 │
│ │
│ 설정 예: │
│ prune-backups: keep-last=3,keep-daily=14,keep-weekly=8, │
│ keep-monthly=12,keep-yearly=10 │
│ │
│ 시각화: │
│ ───────────────────────────────────────────────────────────── │
│ [Day 1-14: Daily] → [Week 1-8: Weekly] → [Month 1-12: Monthly] │
│ → [Year 1-10: Yearly] │
│ │
└─────────────────────────────────────────────────────────────────────────┘
5.4 스토리지에 기본 보존 정책 설정¶
# 스토리지 설정에 기본 보존 정책 추가
pvesm set backup-storage --prune-backups keep-last=7,keep-weekly=4,keep-monthly=6
# storage.cfg 확인
cat /etc/pve/storage.cfg | grep -A5 "dir: backup"
5.5 수동 Prune 실행¶
# 특정 스토리지의 백업 정리 (dry-run)
pvesm prune-backups backup-storage --dry-run
# 실제 정리 실행
pvesm prune-backups backup-storage
# 특정 VM의 백업만 정리
pvesm prune-backups backup-storage --vmid 100
# 커스텀 보존 정책으로 정리
pvesm prune-backups backup-storage --keep-last=3 --keep-daily=7
6. Proxmox Backup Server (PBS) 통합¶
6.1 PBS 아키텍처¶
┌─────────────────────────────────────────────────────────────────────────┐
│ Proxmox Backup Server Architecture │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Proxmox VE Cluster Proxmox Backup Server │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ │ │ │ │
│ │ ┌─────┐ ┌─────┐ │ HTTPS │ Datastore │ │
│ │ │VM100│ │VM101│ │ ──────────► │ ┌───────────────┐ │ │
│ │ └─────┘ └─────┘ │ API/Data │ │ Chunks │ │ │
│ │ │ │ │ (Deduplicated)│ │ │
│ │ vzdump with PBS │ │ │ │ │ │
│ │ storage backend │ │ │ Index Files │ │ │
│ │ │ │ │ (Metadata) │ │ │
│ └─────────────────────┘ │ └───────────────┘ │ │
│ │ │ │
│ 특징: │ 추가 기능: │ │
│ • 증분 백업 │ • Verify │ │
│ • Client-side 암호화 │ • Tape Backup │ │
│ • Live-restore │ • S3 Sync │ │
│ │ • Remote Sync │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
6.2 PBS 스토리지 추가¶
Web UI: Datacenter → Storage → Add → Proxmox Backup Server
# CLI로 PBS 스토리지 추가
pvesm add pbs pbs-backup \
--server pbs.example.com \
--username backup@pbs \
--datastore main-datastore \
--fingerprint <SHA256-fingerprint>
# Password 설정 (대화형)
pvesm set pbs-backup --password
# 또는 password file 사용
echo "SecretPassword" > /etc/pve/priv/storage/pbs-backup.pw
chmod 600 /etc/pve/priv/storage/pbs-backup.pw
6.3 PBS storage.cfg 예제¶
pbs: pbs-backup
datastore main-datastore
server pbs.example.com
username backup@pbs
fingerprint AA:BB:CC:DD:...
content backup
prune-backups keep-all=1
6.4 Client-side 암호화¶
# 암호화 키 생성 (password 없이)
proxmox-backup-client key create --kdf none /etc/pve/priv/storage/pbs-backup.enc
# 스토리지에 암호화 키 설정
pvesm set pbs-backup --encryption-key /etc/pve/priv/storage/pbs-backup.enc
# Paper Key 생성 (재해 복구용)
proxmox-backup-client key paperkey /etc/pve/priv/storage/pbs-backup.enc --output-format text
# Master Key 설정 (관리자가 복호화 가능)
proxmox-backup-client key create-master-key master-public.pem master-private.pem
pvesm set pbs-backup --master-pubkey master-public.pem
┌─────────────────────────────────────────────────────────────────────────┐
│ PBS Encryption Architecture │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ AES-256-GCM ┌─────────────────────┐ │
│ │ VM Data │ ─────────────────►│ Encrypted Chunks │ │
│ └─────────────┘ │ (on PBS) │ │
│ │ └─────────────────────┘ │
│ │ │ │
│ ▼ │ │
│ ┌─────────────┐ │ │
│ │ Client Key │ (encryption-key) │ │
│ │ .enc file │ │ │
│ └──────┬──────┘ │ │
│ │ │ │
│ │ RSA Encrypt │ │
│ ▼ │ │
│ ┌─────────────┐ Stored with ┌───────▼───────────┐ │
│ │ Master Pub │ ─────────────────►│ Encrypted Key │ │
│ │ Key │ each backup │ (recovery) │ │
│ └─────────────┘ └───────────────────┘ │
│ │
│ ⚠️ 키 분실 = 백업 복구 불가! Paper key와 Master key 안전 보관 필수 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
6.5 PBS 스토리지 명령어¶
# PBS datastore 목록 조회
pvesm scan pbs --server pbs.example.com --username backup@pbs
# 백업 목록 조회
pvesm list pbs-backup --content backup
# 특정 VM의 백업 목록
pvesm list pbs-backup --content backup --vmid 100
# 백업 설정 추출
pvesm extractconfig pbs-backup backup/vm/100/2024-01-15T02:00:00Z
# 최근 스냅샷의 특정 파일 추출
pvesm extract pbs-backup backup/vm/100/2024-01-15T02:00:00Z /etc/hostname
7. 복원 (Restore)¶
7.1 VM 복원¶
# 기본 복원
qmrestore /var/lib/vz/dump/vzdump-qemu-100-2024_01_15-02_00_00.vma 100
# 다른 VMID로 복원
qmrestore /var/lib/vz/dump/vzdump-qemu-100-2024_01_15-02_00_00.vma 200
# PBS에서 복원
qmrestore pbs-backup:backup/vm/100/2024-01-15T02:00:00Z 100
# 스토리지 지정
qmrestore backup.vma 100 --storage local-lvm
# 복원 후 즉시 시작
qmrestore backup.vma 100 --start 1
# 대역폭 제한
qmrestore backup.vma 100 --bwlimit 51200
# 고유 MAC 생성 (충돌 방지)
qmrestore backup.vma 200 --unique 1
# HA 리소스로 추가
qmrestore backup.vma 100 --ha 1
7.2 Container 복원¶
# 기본 복원
pct restore 200 /var/lib/vz/dump/vzdump-lxc-200-2024_01_15-02_00_00.tar.zst
# 스토리지 및 크기 지정
pct restore 200 backup.tar.zst --rootfs local-lvm:8
# PBS에서 복원
pct restore 200 pbs-backup:backup/ct/200/2024-01-15T02:00:00Z
# unprivileged 컨테이너로 복원
pct restore 200 backup.tar.zst --unprivileged 1
# 마운트 포인트 커스터마이즈
pct restore 200 backup.tar.zst --rootfs local-lvm:16 --mp0 local-lvm:8,mp=/data
# 고유 MAC 및 호스트명
pct restore 200 backup.tar.zst --unique 1 --hostname newcontainer
# 대역폭 제한
pct restore 200 backup.tar.zst --bwlimit 51200
7.3 Live-Restore (PBS 전용)¶
PBS에서 VM을 복원하면서 즉시 시작:
┌─────────────────────────────────────────────────────────────────────────┐
│ Live-Restore Timeline │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Traditional Restore: │
│ ─────────────────────────────────────────────────────────────────── │
│ [Start] ════════════════════════════════════════════════ [VM Ready] │
│ ←────────── Full Download (Wait) ──────────────→ │
│ │
│ Live-Restore: │
│ ─────────────────────────────────────────────────────────────────── │
│ [Start] [VM Boot] ──────────────────────────────────── [Fully Local] │
│ │ │ │ │ │
│ │ │ Background │ │ │
│ │ │ Download │ │ │
│ │ │ ↓ │ │ │
│ │ └── Prioritize ──────┘ │ │
│ │ accessed chunks │ │
│ │ │ │
│ └─── VM available in seconds! ────────────────────────────┘ │
│ │
│ ⚠️ 주의사항: │
│ • 백업 서버 접근 필수 (복원 완료 전까지) │
│ • 디스크 읽기 성능 제한 (데이터가 로컬에 없으면 PBS에서 로드) │
│ • 실패시 VM 상태 불확실 → 다시 복원 필요 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
7.4 파일 단위 복원 (PBS)¶
# Web UI에서 파일 브라우저 사용 가능
# Backup → 선택 → File Restore
# CLI로 특정 파일 추출
proxmox-backup-client restore pbs-backup:backup/vm/100/2024-01-15T02:00:00Z \
drive-scsi0.img.fidx /target/path --repository user@pbs:datastore
7.5 백업 설정만 추출¶
# vzdump 백업에서 설정 추출
pvesm extractconfig backup-storage vzdump-qemu-100-2024_01_15-02_00_00.vma
# 출력 예:
# [main]
# name: webserver
# memory: 4096
# cores: 4
# net0: virtio=AA:BB:CC:DD:EE:FF,bridge=vmbr0
# scsi0: local-lvm:vm-100-disk-0,size=32G
# ...
8. 백업 설정 파일¶
8.1 /etc/vzdump.conf¶
# vzdump default settings
# Default storage for backups
storage: backup-storage
# Default backup mode
mode: snapshot
# Default compression
compress: zstd
# I/O nice level (0-7, 7=lowest priority)
ionice: 5
# Default retention
prune-backups: keep-last=3,keep-daily=7,keep-weekly=4,keep-monthly=6
# Bandwidth limit (KiB/s), 0 = no limit
bwlimit: 0
# Mail recipients (comma separated)
# mailto: [email protected]
# Notification mode: always, failure
# mailnotification: always
# Note template
notes-template: {{guestname}} - {{node}} - {{vmid}}
# Backup fleecing
# fleecing: enabled=1,storage=local-lvm
# PBS change detection (metadata|default)
# pbs-change-detection-mode: metadata
8.2 디스크 백업 제외¶
개별 디스크를 백업에서 제외:
# VM 디스크 백업 제외 설정
qm set 100 --scsi1 local-lvm:vm-100-disk-1,backup=0
# CT 마운트 포인트 백업 제외
pct set 200 --mp0 local-lvm:subvol-200-disk-0,mp=/data,backup=0
# 또는 포함 설정
pct set 200 --mp0 local-lvm:subvol-200-disk-0,mp=/data,backup=1
9. 모니터링 및 알림¶
9.1 백업 작업 로그 확인¶
# 최근 백업 작업 목록
pvesh get /cluster/tasks --typefilter vzdump
# 특정 작업 로그
pvenode task log UPID:pve1:00010D94:001CA6EA:6124E1B9:vzdump:100:root@pam:
# 작업 상태 확인
pvesh get /nodes/pve1/tasks/<upid>/status
9.2 알림 설정¶
notification-priv.cfg 예제:
matcher: backup-failures
match-field exact:type=vzdump
match-severity error
target backup-admins
comment Send backup failure notifications to admins
target: backup-admins
mailto [email protected],[email protected]
9.3 백업 관련 알림 유형¶
| 이벤트 | 타입 | 심각도 |
|---|---|---|
| 백업 성공 (작업) | vzdump | info |
| 백업 실패 (작업) | vzdump | error |
| 개별 VM 백업 성공 | vzdump | info |
| 개별 VM 백업 실패 | vzdump | error |
10. 문제 해결¶
10.1 일반적인 문제¶
| 문제 | 원인 | 해결 방법 |
|---|---|---|
| 백업 중 VM 느려짐 | copy-before-write 오버헤드 | fleecing 사용, ionice 설정 |
| 백업 파일 손상 | 스토리지 문제 | verify 실행, 스토리지 점검 |
| PBS 연결 실패 | 인증서/네트워크 | fingerprint 확인, 방화벽 점검 |
| 공간 부족 | 보존 정책 미설정 | prune-backups 설정 |
| CT 백업 느림 | 많은 작은 파일 | PBS + metadata 모드 사용 |
10.2 디버깅 명령어¶
# vzdump 상세 로그
vzdump 100 --mode snapshot 2>&1 | tee /tmp/vzdump.log
# PBS 연결 테스트
proxmox-backup-client status --repository user@pbs:datastore
# 스토리지 상태 확인
pvesm status
# 백업 무결성 검증 (PBS)
proxmox-backup-client verify --repository user@pbs:datastore backup/vm/100/2024-01-15T02:00:00Z
# 디스크 공간 확인
df -h /var/lib/vz/dump
pvesm list backup-storage
10.3 백업 실패 복구¶
# 중단된 백업 정리
rm -f /var/lib/vz/dump/vzdump-qemu-100-*.tmp
# Lock 해제 (주의!)
qm unlock 100
# PBS 미완료 백업 정리 (PBS 서버에서)
proxmox-backup-manager garbage-collect <datastore>
11. 베스트 프랙티스¶
11.1 백업 전략 체크리스트¶
- PBS 사용 - 증분, 중복제거, 암호화 지원
- 3-2-1 규칙 - 3개 복사본, 2개 미디어, 1개 오프사이트
- 정기 테스트 - 분기별 복원 테스트
- 보존 정책 - 비즈니스 요구사항에 맞게 설정
- 암호화 키 백업 - Paper key 인쇄 및 보관
- 알림 설정 - 실패 알림 필수
11.2 권장 설정¶
# /etc/vzdump.conf 권장 설정
storage: pbs-backup
mode: snapshot
compress: zstd
ionice: 5
prune-backups: keep-last=3,keep-daily=14,keep-weekly=8,keep-monthly=12,keep-yearly=5
fleecing: enabled=1,storage=local-lvm
notes-template: {{guestname}} ({{vmid}}) on {{node}} - {{cluster}}
11.3 대역폭 관리¶
# 스토리지 레벨 대역폭 제한
pvesm set backup-storage --bwlimit restore=102400 # 100 MiB/s
# Datacenter 레벨 기본값
pvesh set /cluster/options --bwlimit "restore=51200,default=0"
12. 요약¶
핵심 명령어¶
| 작업 | 명령어 |
|---|---|
| 백업 생성 | vzdump 100 --storage backup --mode snapshot |
| VM 복원 | qmrestore backup.vma 100 |
| CT 복원 | pct restore 200 backup.tar.zst |
| 백업 목록 | pvesm list backup-storage --content backup |
| 보존 정리 | pvesm prune-backups backup-storage |
| 설정 추출 | pvesm extractconfig backup-storage backup-file |
백업 모드 요약¶
| 모드 | VM | CT | 다운타임 | 일관성 |
|---|---|---|---|---|
| snapshot | ✅ | ✅ | 최소 | 높음 (Agent) |
| suspend | ✅ | ✅ | 짧음 | 높음 |
| stop | ✅ | ✅ | 김 | 최고 |
다음 단계¶
- Module 7: Firewall - 네트워크 보안 및 방화벽 규칙
- Module 8: User Management - 사용자, 권한, 인증 관리