✨ 주요 기능: - PBS (Proxmox Backup Server)에서 VM/Container 백업 복구 - 대화형 모드로 쉬운 백업 선택 및 복구 - 백업 목록 조회 및 VMID별 검색 - VM 및 Container 타입 자동 감지 - VMID 중복 확인 및 다른 VMID로 복구 (클론) - 스토리지 선택 가능 - 안전한 확인 절차 포함 🛠️ 포함 파일: - pbs-restore.sh: PBS 백업 복구 스크립트 - README.md: 상세한 사용 가이드, 시나리오 및 문제 해결 📦 사용 방법: # 대화형 모드 (권장) curl -fsSL https://git.0bin.in/thug0bin/pve-pbs-restore/raw/branch/main/pbs-restore.sh | bash # 백업 목록 보기 ./pbs-restore.sh -l -s pbs-backup -v 100 # 비대화형 복구 ./pbs-restore.sh -r -V "pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst" -t 100 -T vm 🔧 주요 기능: - qmrestore 및 pct restore 명령어 활용 - 컬러 출력으로 가독성 향상 - Volume ID 자동 파싱 - 백업 날짜 및 크기 표시 - 복구 전 확인 단계 - Root 권한 및 Proxmox VE 환경 자동 확인 🎯 사용 사례: - 삭제된 VM/Container 복구 - VM 클론 생성 (테스트 환경) - 특정 시점으로 롤백 - 재해 복구 (Disaster Recovery) - 자동화 스크립트에 통합 💡 특징: - 3가지 모드: 대화형, 목록, 복구 - VMID 가용성 자동 확인 - 다중 PBS 스토리지 지원 - 추가 복구 옵션 지원 (--unique, --force 등) - 상세한 에러 메시지 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| pbs-restore.sh | ||
| README.md | ||
PBS 백업 복구 스크립트
Proxmox Backup Server(PBS)에서 VM 및 Container 백업을 쉽고 빠르게 복구하는 스크립트입니다.
특징
- ✅ 대화형 모드로 쉬운 백업 선택 및 복구
- ✅ 백업 목록 조회 및 검색
- ✅ VM 및 Container 자동 감지
- ✅ VMID 중복 확인
- ✅ 다른 VMID로 복구 가능 (클론)
- ✅ 스토리지 선택 가능
- ✅ 컬러 출력으로 가독성 향상
- ✅ 안전한 확인 절차
요구사항
- Proxmox VE 7.0 이상
- PBS 스토리지가 PVE에 추가되어 있어야 함
- Root 권한
빠른 설치
방법 1: 원라인 실행 (대화형 모드)
curl -fsSL https://git.0bin.in/thug0bin/pve-pbs-restore/raw/branch/main/pbs-restore.sh | bash
방법 2: 다운로드 후 실행
wget https://git.0bin.in/thug0bin/pve-pbs-restore/raw/branch/main/pbs-restore.sh
chmod +x pbs-restore.sh
./pbs-restore.sh
사용 방법
1. 대화형 모드 (가장 쉬움, 권장)
스크립트를 실행하면 단계별로 안내합니다:
./pbs-restore.sh
진행 순서:
- PBS 스토리지 선택
- 복구할 원본 VMID 입력
- 백업 목록에서 선택
- 타겟 VMID 입력 (같은 VMID 또는 새로운 VMID)
- 복구할 스토리지 선택
- 확인 후 복구 진행
2. 백업 목록 보기
모든 백업 보기
./pbs-restore.sh -l -s pbs-backup
특정 VMID의 백업만 보기
./pbs-restore.sh -l -s pbs-backup -v 100
3. 비대화형 복구 (자동화)
VM 복구 (같은 VMID로)
./pbs-restore.sh -r \
-V "pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst" \
-t 100 \
-T vm
VM 복구 (다른 VMID로 - 클론)
./pbs-restore.sh -r \
-V "pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst" \
-t 150 \
-T vm \
-S local-lvm
Container 복구
./pbs-restore.sh -r \
-V "pbs-backup:backup/ct-200-2025_01_28-10_00_00.tar.zst" \
-t 200 \
-T ct
추가 옵션과 함께 복구
./pbs-restore.sh -r \
-V "pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst" \
-t 100 \
-T vm \
-S local-lvm \
-o "--unique --force"
명령어 옵션
모드 선택
| 옵션 | 설명 | 필수 |
|---|---|---|
| (없음) | 대화형 모드 실행 | - |
-l |
백업 목록 보기 모드 | - |
-r |
백업 복구 모드 | - |
-h |
도움말 표시 | - |
백업 목록 모드 옵션
| 옵션 | 설명 | 필수 |
|---|---|---|
-s STORAGE |
PBS 스토리지 이름 | ✓ |
-v VMID |
특정 VMID의 백업만 검색 | ✗ |
복구 모드 옵션
| 옵션 | 설명 | 필수 |
|---|---|---|
-V VOLID |
복구할 Volume ID | ✓ |
-t VMID |
타겟 VMID | ✓ |
-T TYPE |
백업 타입 (vm/ct) | ✗ (자동 감지) |
-S STORAGE |
복구할 스토리지 | ✗ |
-o OPTIONS |
추가 옵션 | ✗ |
사용 시나리오
시나리오 1: 삭제된 VM 복구
VM을 실수로 삭제한 경우 원래 VMID로 복구:
./pbs-restore.sh
# 대화형 모드에서:
# 1. PBS 스토리지 선택
# 2. 삭제된 VMID 입력
# 3. 최신 백업 선택
# 4. 같은 VMID로 복구
시나리오 2: VM 클론 (테스트용)
프로덕션 VM을 다른 VMID로 복구하여 테스트 환경 구축:
./pbs-restore.sh -r \
-V "pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst" \
-t 999 \
-T vm \
-S local-lvm
시나리오 3: 특정 시점으로 롤백
특정 날짜의 백업으로 복구:
# 1. 백업 목록에서 날짜 확인
./pbs-restore.sh -l -s pbs-backup -v 100
# 2. 원하는 날짜의 백업 선택하여 복구
./pbs-restore.sh -r \
-V "pbs-backup:backup/vm-100-2025_01_20-02_00_00.vma.zst" \
-t 100 \
-T vm
시나리오 4: Container 복구
LXC Container 복구:
./pbs-restore.sh
# Container VMID 입력
# 백업 선택
# 복구 진행
시나리오 5: 재해 복구 (Disaster Recovery)
서버 장애 후 전체 VM 복구:
# 각 VM에 대해 반복
for vmid in 100 101 102 200 201; do
./pbs-restore.sh -l -s pbs-backup -v $vmid
# 최신 백업 확인 후 복구
done
Volume ID 형식
PBS의 Volume ID는 다음과 같은 형식을 가집니다:
STORAGE:backup/TYPE-VMID-DATE.EXTENSION
예시:
pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst
pbs-backup:backup/ct-200-2025_01_28-15_30_00.tar.zst
구성 요소:
STORAGE: PBS 스토리지 이름TYPE:vm(가상머신) 또는ct(컨테이너)VMID: VM/CT IDDATE: 백업 날짜 및 시간EXTENSION: 압축 형식 (.vma.zst,.tar.zst등)
복구 옵션 상세
VM 복구 옵션 (qmrestore)
| 옵션 | 설명 | 예시 |
|---|---|---|
--storage |
복구할 스토리지 | --storage local-lvm |
--unique |
MAC 주소 및 UUID 재생성 | --unique |
--force |
기존 VM 덮어쓰기 | --force |
--pool |
리소스 풀 지정 | --pool production |
예시:
./pbs-restore.sh -r \
-V "pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst" \
-t 150 \
-T vm \
-o "--unique --pool test"
Container 복구 옵션 (pct restore)
| 옵션 | 설명 | 예시 |
|---|---|---|
--storage |
복구할 스토리지 | --storage local-lvm |
--force |
기존 CT 덮어쓰기 | --force |
--unprivileged |
비특권 컨테이너로 복구 | --unprivileged 1 |
--pool |
리소스 풀 지정 | --pool production |
예시:
./pbs-restore.sh -r \
-V "pbs-backup:backup/ct-200-2025_01_28-10_00_00.tar.zst" \
-t 201 \
-T ct \
-o "--unprivileged 1 --force"
PBS 스토리지 추가
PBS 스토리지가 아직 추가되지 않았다면, 먼저 추가해야 합니다:
# PBS 스토리지 추가 스크립트 사용
curl -fsSL https://git.0bin.in/thug0bin/pve-add-pbs-storage/raw/branch/main/add-pbs-storage.sh | bash
또는 수동으로:
pvesm add pbs pbs-backup \
--server 192.168.1.100 \
--datastore datastore1 \
--username "root@pam!backup" \
--password "your-token-secret"
복구 후 확인
복구가 완료된 후 다음 명령어로 확인:
VM 확인
# VM 상태 확인
qm status 100
# VM 설정 확인
qm config 100
# VM 시작
qm start 100
Container 확인
# CT 상태 확인
pct status 200
# CT 설정 확인
pct config 200
# CT 시작
pct start 200
문제 해결
백업을 찾을 수 없음
# PBS 스토리지 연결 확인
pvesm status --storage pbs-backup
# PBS 스토리지 컨텐츠 확인
pvesm list pbs-backup
VMID가 이미 사용 중
# 기존 VM/CT 삭제
qm destroy 100
# 또는
pct destroy 200
# 또는 다른 VMID로 복구
./pbs-restore.sh -r -V "..." -t 999 -T vm
복구 실패 - 스토리지 공간 부족
# 스토리지 공간 확인
pvesm status
# 다른 스토리지로 복구
./pbs-restore.sh -r -V "..." -t 100 -T vm -S other-storage
복구 실패 - 권한 문제
# Root로 실행 확인
sudo ./pbs-restore.sh
# PBS API Token 권한 확인 (PBS 웹 UI)
Volume ID를 찾을 수 없음
# 올바른 형식 확인
pvesm list pbs-backup | grep vm-100
# 복사한 Volume ID 사용
./pbs-restore.sh -r \
-V "pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst" \
-t 100 -T vm
고급 사용법
스크립트로 자동화
#!/bin/bash
# 자동 복구 스크립트 예시
PBS_STORAGE="pbs-backup"
VMID_LIST=(100 101 102)
for vmid in "${VMID_LIST[@]}"; do
echo "Checking backups for VMID: $vmid"
# 최신 백업 가져오기
latest_backup=$(pvesm list "$PBS_STORAGE" | \
grep -E "vm-${vmid}-" | \
tail -1 | \
awk '{print $1}')
if [ -n "$latest_backup" ]; then
echo "Restoring: $latest_backup"
./pbs-restore.sh -r -V "$latest_backup" -t "$vmid" -T vm
fi
done
특정 기간의 백업 찾기
# 특정 날짜의 백업 검색
./pbs-restore.sh -l -s pbs-backup -v 100 | grep "2025-01-28"
# 최근 7일 백업 검색
pvesm list pbs-backup | grep "vm-100" | tail -7
병렬 복구 (여러 VM 동시 복구)
#!/bin/bash
# 여러 VM을 동시에 복구 (신중하게 사용!)
restore_vm() {
local volid="$1"
local vmid="$2"
./pbs-restore.sh -r -V "$volid" -t "$vmid" -T vm &
}
restore_vm "pbs-backup:backup/vm-100-2025_01_28-10_00_00.vma.zst" 100
restore_vm "pbs-backup:backup/vm-101-2025_01_28-10_00_00.vma.zst" 101
restore_vm "pbs-backup:backup/vm-102-2025_01_28-10_00_00.vma.zst" 102
wait
echo "모든 복구 완료"
백업 전략 권장사항
- 정기 백업: 자동 백업 스케줄 설정
- 보존 정책: 적절한 백업 보관 기간 설정
- 복구 테스트: 정기적으로 복구 테스트 수행
- 문서화: 중요 VM의 복구 절차 문서화
- 오프사이트 백업: PBS Remote Sync로 원격 백업
보안 고려사항
- ✅ Root 권한으로만 실행
- ✅ PBS API Token 사용 권장
- ✅ 복구 전 항상 확인 단계 포함
- ✅ 중요 VM은 복구 테스트 수행
- ✅ 백업 암호화 사용 권장
참고 자료
라이선스
MIT License
기여
Issues 및 Pull Requests는 언제나 환영합니다!
관련 프로젝트
- pve-add-pbs-storage - PBS 스토리지 추가 스크립트
- pve9-repo-fix - Proxmox VE 9.0 저장소 수정 스크립트
지원
문제가 발생하면 GitHub Issues에 보고해주세요.