pve-add-pbs-storage/add-pbs-storage.sh
시골약사 6395f8a03b 초기 커밋: 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>
2025-10-28 08:55:16 +00:00

283 lines
8.2 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"