diff --git a/pbs_allinone.sh b/pbs_allinone.sh index 2ce98b0..be141e7 100644 --- a/pbs_allinone.sh +++ b/pbs_allinone.sh @@ -325,6 +325,32 @@ PYEOF return 0 } +# 사용 가능한 스토리지 목록 표시 +list_available_storage() { + echo "" + log_step "사용 가능한 스토리지 목록" + echo "" + + # VM/CT 이미지를 저장할 수 있는 스토리지만 필터링 + pvesm status -content images,rootdir 2>/dev/null | tail -n +2 | while read -r line; do + storage_name=$(echo "$line" | awk '{print $1}') + storage_type=$(echo "$line" | awk '{print $2}') + total_mb=$(echo "$line" | awk '{print $4}') + used_mb=$(echo "$line" | awk '{print $5}') + avail_mb=$(echo "$line" | awk '{print $6}') + usage_pct=$(echo "$line" | awk '{print $7}') + + # MB를 GB로 변환 + total_gb=$(echo "scale=2; $total_mb / 1024 / 1024" | bc) + avail_gb=$(echo "scale=2; $avail_mb / 1024 / 1024" | bc) + + echo -e " ${GREEN}●${NC} ${CYAN}${storage_name}${NC}" + echo -e " 타입: ${storage_type} | 용량: ${total_gb}GB | 여유: ${avail_gb}GB | 사용률: ${usage_pct}" + done + + echo "" +} + # 복구 설정 입력 get_restore_config() { echo "" @@ -335,9 +361,29 @@ get_restore_config() { read -p "$(echo -e ${CYAN}복구할 VM/CT ID${NC}) [기본값: ${TEMPLATE_VMID}]: " TARGET_VMID TARGET_VMID=${TARGET_VMID:-$TEMPLATE_VMID} - # 스토리지 - read -p "$(echo -e ${CYAN}저장 스토리지${NC}) [기본값: local-lvm]: " input_storage - TARGET_STORAGE=${input_storage:-local-lvm} + # 사용 가능한 스토리지 목록 표시 + list_available_storage + + # 스토리지 선택 + while true; do + read -p "$(echo -e ${CYAN}저장 스토리지 이름${NC}) [기본값: local-lvm]: " input_storage + TARGET_STORAGE=${input_storage:-local-lvm} + + # 입력한 스토리지가 존재하는지 확인 + if pvesm status -storage "${TARGET_STORAGE}" &>/dev/null; then + # VM/CT 이미지를 저장할 수 있는지 확인 + if pvesm status -storage "${TARGET_STORAGE}" -content images &>/dev/null || \ + pvesm status -storage "${TARGET_STORAGE}" -content rootdir &>/dev/null; then + log_success "스토리지 '${TARGET_STORAGE}' 선택됨" + break + else + log_error "스토리지 '${TARGET_STORAGE}'는 VM/CT 이미지를 저장할 수 없습니다" + fi + else + log_error "스토리지 '${TARGET_STORAGE}'를 찾을 수 없습니다" + fi + echo "" + done echo "" log_info "복구 요약:"