초기 커밋: Proxmox VE PBS Storage 자동 추가 스크립트
✨ 주요 기능: - PBS (Proxmox Backup Server)를 PVE 스토리지로 자동 추가 - 대화형 모드로 쉬운 설정 - 비대화형 모드로 자동화 지원 - API Token 및 사용자명/비밀번호 인증 지원 - SSL 핑거프린트 검증 기능 - 자동 연결 테스트 및 검증 🛠️ 포함 파일: - add-pbs-storage.sh: PBS 스토리지 추가 스크립트 - README.md: 상세한 사용 가이드 및 예시 📦 사용 방법: # 대화형 모드 curl -fsSL https://git.0bin.in/thug0bin/pve-add-pbs-storage/raw/branch/main/add-pbs-storage.sh | bash # 비대화형 모드 (API Token) ./add-pbs-storage.sh -i pbs-backup -s 192.168.1.100 -d datastore1 -t "root@pam!backup" -T "token-secret" 🔧 주요 특징: - pvesm 명령어를 사용한 안전한 스토리지 추가 - 컬러 출력으로 가독성 향상 - 상세한 에러 메시지 및 문제 해결 가이드 - Root 권한 및 Proxmox VE 환경 자동 확인 🎯 사용 사례: - 로컬 네트워크 PBS 연결 - 원격 PBS 서버 연결 (SSL 검증) - 다중 백업 보관 정책 설정 - 자동화 스크립트에 통합 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
commit
6395f8a03b
353
README.md
Normal file
353
README.md
Normal file
@ -0,0 +1,353 @@
|
||||
# Proxmox VE - PBS Storage 자동 추가 스크립트
|
||||
|
||||
Proxmox Backup Server(PBS)를 Proxmox VE의 스토리지로 쉽고 빠르게 추가하는 스크립트입니다.
|
||||
|
||||
## 특징
|
||||
|
||||
- ✅ 대화형 모드로 쉬운 설정
|
||||
- ✅ 비대화형 모드로 자동화 가능
|
||||
- ✅ API Token 및 사용자명/비밀번호 인증 지원
|
||||
- ✅ SSL 핑거프린트 검증 지원
|
||||
- ✅ 자동 연결 테스트
|
||||
- ✅ 상세한 에러 메시지
|
||||
|
||||
## 요구사항
|
||||
|
||||
- Proxmox VE 7.0 이상
|
||||
- PBS (Proxmox Backup Server) 설치 및 실행 중
|
||||
- PBS에서 생성된 API Token 또는 사용자 계정
|
||||
- Root 권한
|
||||
|
||||
## 빠른 설치
|
||||
|
||||
### 방법 1: 원라인 설치 (대화형 모드)
|
||||
|
||||
```bash
|
||||
curl -fsSL https://git.0bin.in/thug0bin/pve-add-pbs-storage/raw/branch/main/add-pbs-storage.sh | bash
|
||||
```
|
||||
|
||||
### 방법 2: 다운로드 후 실행
|
||||
|
||||
```bash
|
||||
wget https://git.0bin.in/thug0bin/pve-add-pbs-storage/raw/branch/main/add-pbs-storage.sh
|
||||
chmod +x add-pbs-storage.sh
|
||||
./add-pbs-storage.sh
|
||||
```
|
||||
|
||||
## 사용 방법
|
||||
|
||||
### 1. 대화형 모드 (권장)
|
||||
|
||||
스크립트를 실행하면 대화형으로 필요한 정보를 입력받습니다:
|
||||
|
||||
```bash
|
||||
./add-pbs-storage.sh
|
||||
```
|
||||
|
||||
입력할 정보:
|
||||
- 스토리지 ID (예: `pbs-backup`)
|
||||
- PBS 서버 주소 (IP 또는 도메인)
|
||||
- 데이터스토어 이름 (기본값: `datastore1`)
|
||||
- 인증 방법 (API Token 또는 사용자명/비밀번호)
|
||||
- 포트 (기본값: `8007`)
|
||||
- SSL 핑거프린트 (선택사항)
|
||||
|
||||
### 2. 비대화형 모드 (자동화)
|
||||
|
||||
#### API Token 사용 (권장)
|
||||
|
||||
```bash
|
||||
./add-pbs-storage.sh \
|
||||
-i "pbs-backup" \
|
||||
-s "192.168.1.100" \
|
||||
-d "datastore1" \
|
||||
-t "root@pam!backup" \
|
||||
-T "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
|
||||
```
|
||||
|
||||
#### 사용자명/비밀번호 사용
|
||||
|
||||
```bash
|
||||
./add-pbs-storage.sh \
|
||||
-i "pbs-backup" \
|
||||
-s "pbs.example.com" \
|
||||
-d "datastore1" \
|
||||
-u "root@pam" \
|
||||
-p "your-password"
|
||||
```
|
||||
|
||||
#### 전체 옵션 사용 예시
|
||||
|
||||
```bash
|
||||
./add-pbs-storage.sh \
|
||||
-i "pbs-backup" \
|
||||
-s "192.168.1.100" \
|
||||
-d "datastore1" \
|
||||
-t "root@pam!backup" \
|
||||
-T "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
|
||||
-P 8007 \
|
||||
-m 3 \
|
||||
-c "backup" \
|
||||
-f "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:25:26:27:28:29:30:31:32"
|
||||
```
|
||||
|
||||
## 명령어 옵션
|
||||
|
||||
### 필수 옵션
|
||||
|
||||
| 옵션 | 설명 | 예시 |
|
||||
|------|------|------|
|
||||
| `-i` | 스토리지 ID | `pbs-backup` |
|
||||
| `-s` | PBS 서버 주소 | `192.168.1.100` 또는 `pbs.example.com` |
|
||||
| `-d` | 데이터스토어 이름 | `datastore1` |
|
||||
|
||||
### 인증 옵션 (둘 중 하나 필수)
|
||||
|
||||
**API Token (권장):**
|
||||
|
||||
| 옵션 | 설명 | 예시 |
|
||||
|------|------|------|
|
||||
| `-t` | API Token Name | `root@pam!backup` |
|
||||
| `-T` | API Token Secret | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |
|
||||
|
||||
**사용자명/비밀번호:**
|
||||
|
||||
| 옵션 | 설명 | 예시 |
|
||||
|------|------|------|
|
||||
| `-u` | 사용자명 | `root@pam` |
|
||||
| `-p` | 비밀번호 | `your-password` |
|
||||
|
||||
### 추가 옵션
|
||||
|
||||
| 옵션 | 설명 | 기본값 |
|
||||
|------|------|--------|
|
||||
| `-P` | PBS 포트 | `8007` |
|
||||
| `-f` | SSL Fingerprint | 없음 |
|
||||
| `-m` | 최대 백업 파일 수 | `1` |
|
||||
| `-c` | 컨텐츠 타입 | `backup` |
|
||||
| `-h` | 도움말 표시 | - |
|
||||
|
||||
## PBS API Token 생성 방법
|
||||
|
||||
PBS 웹 인터페이스에서 API Token을 생성하는 방법:
|
||||
|
||||
1. PBS 웹 UI 접속: `https://PBS_IP:8007`
|
||||
2. **Configuration** → **Access Control** → **API Tokens**
|
||||
3. **Add** 버튼 클릭
|
||||
4. 다음 정보 입력:
|
||||
- User: `root@pam`
|
||||
- Token Name: `backup` (원하는 이름)
|
||||
5. **Add** 클릭
|
||||
6. 생성된 **Secret**을 복사 (한 번만 표시됨!)
|
||||
|
||||
생성된 토큰 형식:
|
||||
- Token Name: `root@pam!backup`
|
||||
- Token Secret: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
|
||||
|
||||
## SSL Fingerprint 확인 방법
|
||||
|
||||
PBS 서버의 SSL 핑거프린트를 확인하려면:
|
||||
|
||||
```bash
|
||||
# PBS 서버에서 실행
|
||||
openssl x509 -in /etc/proxmox-backup/proxy.pem -noout -fingerprint -sha256
|
||||
```
|
||||
|
||||
또는 PVE에서 확인:
|
||||
|
||||
```bash
|
||||
openssl s_client -connect PBS_IP:8007 < /dev/null 2>/dev/null | \
|
||||
openssl x509 -noout -fingerprint -sha256 | \
|
||||
cut -d= -f2
|
||||
```
|
||||
|
||||
## 예시 시나리오
|
||||
|
||||
### 시나리오 1: 로컬 네트워크 PBS 추가
|
||||
|
||||
```bash
|
||||
./add-pbs-storage.sh \
|
||||
-i "local-pbs" \
|
||||
-s "192.168.1.50" \
|
||||
-d "backups" \
|
||||
-t "root@pam!backup-token" \
|
||||
-T "12345678-1234-1234-1234-123456789abc"
|
||||
```
|
||||
|
||||
### 시나리오 2: 원격 PBS 추가 (핑거프린트 검증)
|
||||
|
||||
```bash
|
||||
./add-pbs-storage.sh \
|
||||
-i "remote-pbs" \
|
||||
-s "pbs.company.com" \
|
||||
-d "datastore1" \
|
||||
-t "backup@pbs!remote" \
|
||||
-T "87654321-4321-4321-4321-cba987654321" \
|
||||
-f "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:25:26:27:28:29:30:31:32"
|
||||
```
|
||||
|
||||
### 시나리오 3: 다중 백업 보관
|
||||
|
||||
```bash
|
||||
./add-pbs-storage.sh \
|
||||
-i "pbs-longterm" \
|
||||
-s "192.168.1.100" \
|
||||
-d "longterm-storage" \
|
||||
-t "root@pam!backup" \
|
||||
-T "your-token-secret" \
|
||||
-m 10
|
||||
```
|
||||
|
||||
## 스토리지 확인
|
||||
|
||||
스크립트 실행 후 다음 명령어로 스토리지를 확인할 수 있습니다:
|
||||
|
||||
```bash
|
||||
# 모든 스토리지 목록 보기
|
||||
pvesm status
|
||||
|
||||
# 특정 스토리지 상태 확인
|
||||
pvesm status -storage pbs-backup
|
||||
|
||||
# 스토리지 설정 보기
|
||||
cat /etc/pve/storage.cfg
|
||||
```
|
||||
|
||||
## 스토리지 제거
|
||||
|
||||
PBS 스토리지를 제거하려면:
|
||||
|
||||
```bash
|
||||
pvesm remove pbs-backup
|
||||
```
|
||||
|
||||
## 백업 생성 방법
|
||||
|
||||
PBS 스토리지를 추가한 후 백업을 생성하는 방법:
|
||||
|
||||
### 웹 UI에서:
|
||||
1. VM 또는 Container 선택
|
||||
2. **Backup** 탭 클릭
|
||||
3. **Backup now** 버튼 클릭
|
||||
4. Storage: PBS 스토리지 선택
|
||||
5. **Backup** 클릭
|
||||
|
||||
### 명령줄에서:
|
||||
```bash
|
||||
# VM 백업
|
||||
vzdump 100 --storage pbs-backup --mode snapshot
|
||||
|
||||
# 여러 VM 백업
|
||||
vzdump 100 101 102 --storage pbs-backup --mode snapshot
|
||||
|
||||
# Container 백업
|
||||
vzdump 200 --storage pbs-backup
|
||||
```
|
||||
|
||||
## 자동 백업 스케줄 설정
|
||||
|
||||
웹 UI에서 자동 백업 스케줄 설정:
|
||||
|
||||
1. **Datacenter** → **Backup**
|
||||
2. **Add** 버튼 클릭
|
||||
3. 다음 설정:
|
||||
- Storage: PBS 스토리지 선택
|
||||
- Schedule: 백업 주기 설정 (예: `0 2 * * *` = 매일 새벽 2시)
|
||||
- Selection Mode: VM 선택 방식
|
||||
- Retention: 보관 정책
|
||||
|
||||
## 문제 해결
|
||||
|
||||
### 연결 실패
|
||||
|
||||
```bash
|
||||
# PBS 서버 연결 확인
|
||||
ping PBS_IP
|
||||
|
||||
# PBS 포트 확인
|
||||
nc -zv PBS_IP 8007
|
||||
|
||||
# PBS 서비스 상태 확인 (PBS 서버에서)
|
||||
systemctl status proxmox-backup-proxy
|
||||
```
|
||||
|
||||
### 인증 실패
|
||||
|
||||
- API Token이 올바른지 확인
|
||||
- Token에 필요한 권한이 있는지 확인 (PBS에서 확인)
|
||||
- 사용자명 형식 확인: `username@realm` (예: `root@pam`)
|
||||
|
||||
### SSL 인증서 오류
|
||||
|
||||
- 자체 서명 인증서를 사용하는 경우 핑거프린트를 지정하세요
|
||||
- 또는 PBS에 유효한 인증서를 설치하세요
|
||||
|
||||
### 데이터스토어를 찾을 수 없음
|
||||
|
||||
PBS 웹 UI에서 데이터스토어가 생성되어 있는지 확인:
|
||||
- PBS UI → **Datastore** 확인
|
||||
|
||||
## 고급 설정
|
||||
|
||||
### 컨텐츠 타입
|
||||
|
||||
지원되는 컨텐츠 타입:
|
||||
- `backup`: VM 및 Container 백업 (기본값)
|
||||
- `snippets`: 스니펫 파일
|
||||
|
||||
여러 타입 지정:
|
||||
```bash
|
||||
-c "backup,snippets"
|
||||
```
|
||||
|
||||
### 보존 정책
|
||||
|
||||
최대 백업 파일 수 설정:
|
||||
```bash
|
||||
-m 5 # 최근 5개 백업만 보관
|
||||
```
|
||||
|
||||
## 보안 권장사항
|
||||
|
||||
1. ✅ API Token 사용 (비밀번호보다 안전)
|
||||
2. ✅ Token에 최소 권한만 부여
|
||||
3. ✅ SSL 핑거프린트 검증 사용
|
||||
4. ✅ 방화벽에서 PBS 포트(8007) 제한
|
||||
5. ✅ 정기적으로 Token 갱신
|
||||
|
||||
## 자주 묻는 질문 (FAQ)
|
||||
|
||||
### Q: PBS와 NFS/CIFS 백업의 차이는?
|
||||
|
||||
**PBS 장점:**
|
||||
- 중복 제거 (Deduplication)
|
||||
- 압축
|
||||
- 암호화
|
||||
- 백업 검증
|
||||
- 증분 백업
|
||||
|
||||
### Q: 여러 PVE 노드에서 같은 PBS 사용 가능?
|
||||
|
||||
네, 각 PVE 노드에서 이 스크립트를 실행하면 됩니다.
|
||||
|
||||
### Q: PBS 백업을 외부로 복제하려면?
|
||||
|
||||
PBS에서 **Remote** 및 **Sync Jobs**를 설정하세요.
|
||||
|
||||
## 참고 자료
|
||||
|
||||
- [Proxmox Backup Server 공식 문서](https://pbs.proxmox.com/docs/)
|
||||
- [Proxmox VE Storage 설정](https://pve.proxmox.com/wiki/Storage)
|
||||
- [PBS API 문서](https://pbs.proxmox.com/docs/api-viewer/)
|
||||
|
||||
## 라이선스
|
||||
|
||||
MIT License
|
||||
|
||||
## 기여
|
||||
|
||||
Issues 및 Pull Requests는 언제나 환영합니다!
|
||||
|
||||
## 관련 프로젝트
|
||||
|
||||
- [pve9-repo-fix](https://git.0bin.in/thug0bin/pve9-repo-fix) - Proxmox VE 9.0 저장소 수정 스크립트
|
||||
282
add-pbs-storage.sh
Normal file
282
add-pbs-storage.sh
Normal file
@ -0,0 +1,282 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Proxmox VE - PBS Storage 추가 스크립트
|
||||
# Proxmox Backup Server를 PVE 스토리지로 자동 추가
|
||||
|
||||
# 색상 정의
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 로그 함수
|
||||
log_info() { echo -e "${BLUE}ℹ${NC} $1"; }
|
||||
log_success() { echo -e "${GREEN}✓${NC} $1"; }
|
||||
log_warning() { echo -e "${YELLOW}⚠${NC} $1"; }
|
||||
log_error() { echo -e "${RED}✗${NC} $1"; }
|
||||
|
||||
# 배너 출력
|
||||
print_banner() {
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo " Proxmox VE - PBS Storage 추가 스크립트"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Root 권한 확인
|
||||
check_root() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
log_error "이 스크립트는 root 권한이 필요합니다."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Proxmox VE 환경 확인
|
||||
check_proxmox() {
|
||||
if ! command -v pvesm &> /dev/null; then
|
||||
log_error "Proxmox VE가 설치되어 있지 않습니다."
|
||||
exit 1
|
||||
fi
|
||||
log_success "Proxmox VE 환경 확인 완료"
|
||||
}
|
||||
|
||||
# 대화형 모드: 사용자 입력 받기
|
||||
interactive_mode() {
|
||||
echo ""
|
||||
log_info "PBS 스토리지 설정 정보를 입력하세요"
|
||||
echo ""
|
||||
|
||||
# Storage ID
|
||||
read -p "스토리지 ID (예: pbs-backup): " STORAGE_ID
|
||||
if [[ -z "$STORAGE_ID" ]]; then
|
||||
log_error "스토리지 ID는 필수입니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# PBS 서버 주소
|
||||
read -p "PBS 서버 주소 (IP 또는 도메인): " PBS_SERVER
|
||||
if [[ -z "$PBS_SERVER" ]]; then
|
||||
log_error "PBS 서버 주소는 필수입니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# PBS 데이터스토어
|
||||
read -p "PBS 데이터스토어 이름 (기본값: datastore1): " PBS_DATASTORE
|
||||
PBS_DATASTORE=${PBS_DATASTORE:-datastore1}
|
||||
|
||||
# 인증 방법 선택
|
||||
echo ""
|
||||
log_info "인증 방법을 선택하세요:"
|
||||
echo "1) API Token (권장)"
|
||||
echo "2) 사용자명/비밀번호"
|
||||
read -p "선택 (1 또는 2): " AUTH_METHOD
|
||||
|
||||
if [[ "$AUTH_METHOD" == "1" ]]; then
|
||||
read -p "API Token ID (예: root@pam!backup): " PBS_TOKEN_NAME
|
||||
read -sp "API Token Secret: " PBS_TOKEN_VALUE
|
||||
echo ""
|
||||
AUTH_TYPE="token"
|
||||
else
|
||||
read -p "사용자명 (예: root@pam): " PBS_USERNAME
|
||||
read -sp "비밀번호: " PBS_PASSWORD
|
||||
echo ""
|
||||
AUTH_TYPE="password"
|
||||
fi
|
||||
|
||||
# 포트
|
||||
read -p "PBS 포트 (기본값: 8007): " PBS_PORT
|
||||
PBS_PORT=${PBS_PORT:-8007}
|
||||
|
||||
# 핑거프린트 (선택사항)
|
||||
echo ""
|
||||
log_info "SSL 핑거프린트 (선택사항, Enter로 건너뛰기)"
|
||||
log_warning "핑거프린트를 입력하면 SSL 인증서를 검증합니다."
|
||||
read -p "Fingerprint: " PBS_FINGERPRINT
|
||||
|
||||
# 고급 옵션
|
||||
echo ""
|
||||
log_info "고급 옵션 (Enter로 기본값 사용)"
|
||||
read -p "최대 백업 수 (기본값: 1): " MAX_BACKUPS
|
||||
MAX_BACKUPS=${MAX_BACKUPS:-1}
|
||||
|
||||
# 컨텐츠 타입 선택
|
||||
echo ""
|
||||
log_info "저장할 컨텐츠 타입 선택 (쉼표로 구분)"
|
||||
echo "예: backup,snippets"
|
||||
read -p "컨텐츠 타입 (기본값: backup): " CONTENT_TYPES
|
||||
CONTENT_TYPES=${CONTENT_TYPES:-backup}
|
||||
}
|
||||
|
||||
# 스토리지 추가
|
||||
add_pbs_storage() {
|
||||
log_info "PBS 스토리지 추가 중..."
|
||||
|
||||
# 기본 명령어 구성
|
||||
local cmd="pvesm add pbs ${STORAGE_ID}"
|
||||
cmd+=" --server ${PBS_SERVER}"
|
||||
cmd+=" --datastore ${PBS_DATASTORE}"
|
||||
cmd+=" --port ${PBS_PORT}"
|
||||
cmd+=" --content ${CONTENT_TYPES}"
|
||||
cmd+=" --maxfiles ${MAX_BACKUPS}"
|
||||
|
||||
# 인증 정보 추가
|
||||
if [[ "$AUTH_TYPE" == "token" ]]; then
|
||||
cmd+=" --username ${PBS_TOKEN_NAME}"
|
||||
cmd+=" --password ${PBS_TOKEN_VALUE}"
|
||||
else
|
||||
cmd+=" --username ${PBS_USERNAME}"
|
||||
cmd+=" --password ${PBS_PASSWORD}"
|
||||
fi
|
||||
|
||||
# 핑거프린트 추가 (있는 경우)
|
||||
if [[ -n "${PBS_FINGERPRINT:-}" ]]; then
|
||||
cmd+=" --fingerprint ${PBS_FINGERPRINT}"
|
||||
fi
|
||||
|
||||
# 명령어 실행
|
||||
if eval "$cmd" 2>/dev/null; then
|
||||
log_success "PBS 스토리지가 성공적으로 추가되었습니다!"
|
||||
return 0
|
||||
else
|
||||
log_error "PBS 스토리지 추가 실패"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 스토리지 확인
|
||||
verify_storage() {
|
||||
echo ""
|
||||
log_info "스토리지 상태 확인 중..."
|
||||
|
||||
if pvesm status -storage "${STORAGE_ID}" &> /dev/null; then
|
||||
log_success "스토리지가 정상적으로 작동합니다!"
|
||||
echo ""
|
||||
pvesm status -storage "${STORAGE_ID}"
|
||||
else
|
||||
log_warning "스토리지 연결 확인에 실패했습니다."
|
||||
log_info "PBS 서버와 인증 정보를 확인하세요."
|
||||
fi
|
||||
}
|
||||
|
||||
# 설정 정보 출력
|
||||
print_summary() {
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo " 추가된 스토리지 정보"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "스토리지 ID: ${STORAGE_ID}"
|
||||
echo "PBS 서버: ${PBS_SERVER}:${PBS_PORT}"
|
||||
echo "데이터스토어: ${PBS_DATASTORE}"
|
||||
echo "컨텐츠 타입: ${CONTENT_TYPES}"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 사용법 출력
|
||||
usage() {
|
||||
cat << EOF
|
||||
사용법: $0 [옵션]
|
||||
|
||||
대화형 모드 (권장):
|
||||
$0
|
||||
|
||||
비대화형 모드:
|
||||
$0 -i STORAGE_ID -s PBS_SERVER -d DATASTORE [옵션]
|
||||
|
||||
필수 옵션:
|
||||
-i 스토리지 ID (예: pbs-backup)
|
||||
-s PBS 서버 주소
|
||||
-d 데이터스토어 이름
|
||||
|
||||
인증 옵션 (둘 중 하나 필수):
|
||||
-t API Token Name (예: root@pam!backup)
|
||||
-T API Token Secret
|
||||
-u 사용자명 (예: root@pam)
|
||||
-p 비밀번호
|
||||
|
||||
추가 옵션:
|
||||
-P 포트 (기본값: 8007)
|
||||
-f SSL Fingerprint
|
||||
-m 최대 백업 수 (기본값: 1)
|
||||
-c 컨텐츠 타입 (기본값: backup)
|
||||
-h 도움말 표시
|
||||
|
||||
예시:
|
||||
# API Token 사용
|
||||
$0 -i pbs-backup -s 192.168.1.100 -d datastore1 \\
|
||||
-t "root@pam!backup" -T "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
|
||||
|
||||
# 사용자명/비밀번호 사용
|
||||
$0 -i pbs-backup -s pbs.example.com -d datastore1 \\
|
||||
-u "root@pam" -p "password"
|
||||
|
||||
EOF
|
||||
exit 0
|
||||
}
|
||||
|
||||
# 메인 함수
|
||||
main() {
|
||||
print_banner
|
||||
check_root
|
||||
check_proxmox
|
||||
|
||||
# 옵션 파싱
|
||||
if [[ $# -eq 0 ]]; then
|
||||
# 대화형 모드
|
||||
interactive_mode
|
||||
else
|
||||
# 비대화형 모드
|
||||
while getopts "i:s:d:t:T:u:p:P:f:m:c:h" opt; do
|
||||
case $opt in
|
||||
i) STORAGE_ID="$OPTARG" ;;
|
||||
s) PBS_SERVER="$OPTARG" ;;
|
||||
d) PBS_DATASTORE="$OPTARG" ;;
|
||||
t) PBS_TOKEN_NAME="$OPTARG"; AUTH_TYPE="token" ;;
|
||||
T) PBS_TOKEN_VALUE="$OPTARG" ;;
|
||||
u) PBS_USERNAME="$OPTARG"; AUTH_TYPE="password" ;;
|
||||
p) PBS_PASSWORD="$OPTARG" ;;
|
||||
P) PBS_PORT="$OPTARG" ;;
|
||||
f) PBS_FINGERPRINT="$OPTARG" ;;
|
||||
m) MAX_BACKUPS="$OPTARG" ;;
|
||||
c) CONTENT_TYPES="$OPTARG" ;;
|
||||
h) usage ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 필수 값 확인
|
||||
if [[ -z "${STORAGE_ID:-}" ]] || [[ -z "${PBS_SERVER:-}" ]] || [[ -z "${PBS_DATASTORE:-}" ]]; then
|
||||
log_error "필수 옵션이 누락되었습니다."
|
||||
usage
|
||||
fi
|
||||
|
||||
# 기본값 설정
|
||||
PBS_PORT=${PBS_PORT:-8007}
|
||||
MAX_BACKUPS=${MAX_BACKUPS:-1}
|
||||
CONTENT_TYPES=${CONTENT_TYPES:-backup}
|
||||
fi
|
||||
|
||||
# 스토리지 추가
|
||||
if add_pbs_storage; then
|
||||
print_summary
|
||||
verify_storage
|
||||
|
||||
echo ""
|
||||
log_success "PBS 스토리지 설정이 완료되었습니다!"
|
||||
log_info "이제 PVE 웹 인터페이스에서 백업을 생성할 수 있습니다."
|
||||
else
|
||||
echo ""
|
||||
log_error "스토리지 추가 실패. 다음을 확인하세요:"
|
||||
echo " 1. PBS 서버 주소와 포트"
|
||||
echo " 2. 인증 정보 (API Token 또는 사용자명/비밀번호)"
|
||||
echo " 3. 데이터스토어 이름"
|
||||
echo " 4. PBS 서버가 실행 중인지 확인"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 스크립트 실행
|
||||
main "$@"
|
||||
Loading…
Reference in New Issue
Block a user