Files
Sankofa/scripts/setup-ceph-osds-r630.sh
defiQUG 33d50fb91e
Some checks failed
API CI / API Lint (push) Successful in 47s
API CI / API Type Check (push) Failing after 47s
API CI / API Test (push) Successful in 1m0s
API CI / API Build (push) Failing after 50s
API CI / Build Docker Image (push) Has been skipped
Build Crossplane Provider / build (push) Failing after 5m51s
CD Pipeline / Deploy to Staging (push) Failing after 29s
CI Pipeline / Lint and Type Check (push) Failing after 36s
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Test Backend (push) Failing after 1m33s
CI Pipeline / Test Frontend (push) Failing after 30s
CI Pipeline / Security Scan (push) Failing after 1m16s
Crossplane Provider CI / Go Test (push) Failing after 3m23s
Crossplane Provider CI / Go Lint (push) Failing after 7m27s
Crossplane Provider CI / Go Build (push) Failing after 3m27s
Deploy to Staging / Deploy to Staging (push) Failing after 30s
Portal CI / Portal Lint (push) Failing after 21s
Portal CI / Portal Type Check (push) Failing after 21s
Portal CI / Portal Test (push) Failing after 21s
Portal CI / Portal Build (push) Failing after 22s
Test Suite / frontend-tests (push) Failing after 30s
Test Suite / api-tests (push) Failing after 49s
Test Suite / blockchain-tests (push) Failing after 30s
Type Check / type-check (map[directory:. name:root]) (push) Failing after 23s
Type Check / type-check (map[directory:api name:api]) (push) Failing after 21s
Type Check / type-check (map[directory:portal name:portal]) (push) Failing after 19s
Validate Configuration Files / validate (push) Failing after 1m52s
CD Pipeline / Deploy to Production (push) Has been skipped
chore: consolidate local WIP (repo cleanup 20260707)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-07 09:41:34 -07:00

273 lines
8.8 KiB
Bash
Executable File

#!/bin/bash
# Setup Ceph OSDs on R630-01 available disks
# Creates OSDs on sdc-sdh (6x 232.9G SSDs) and optionally sdb (279.4G)
# Run on R630-01 as root
set +e # Don't exit on error - we want to continue even if some OSDs fail
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Configuration
PRIMARY_DRIVES=("sdc" "sdd" "sde" "sdf" "sdg" "sdh") # 6x SSDs
SECONDARY_DRIVE="sdb" # Optional 279.4G disk
INCLUDE_SDB="${INCLUDE_SDB:-false}" # Set to "true" to include sdb
echo "=========================================="
echo -e "${CYAN}Ceph OSD Setup for R630-01${NC}"
echo "=========================================="
echo ""
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}ERROR: Please run as root${NC}"
exit 1
fi
# Check if Ceph is installed
echo -e "${BLUE}=== Step 1: Prerequisites Check ===${NC}"
echo "-----------------------------------"
if ! command -v ceph &>/dev/null; then
echo -e "${RED}ERROR: Ceph is not installed${NC}"
echo "Please install Ceph first"
exit 1
fi
echo -e "${GREEN}✓ Ceph is installed${NC}"
if ! command -v ceph-volume &>/dev/null; then
echo -e "${RED}ERROR: ceph-volume is not installed${NC}"
exit 1
fi
echo -e "${GREEN}✓ ceph-volume is installed${NC}"
# Check cluster connectivity
echo ""
echo "Checking Ceph cluster connectivity..."
if ceph quorum_status &>/dev/null 2>&1; then
echo -e "${GREEN}✓ Ceph cluster is accessible${NC}"
CLUSTER_ACCESSIBLE=true
else
echo -e "${YELLOW}⚠ Warning: Cannot access Ceph cluster${NC}"
echo " This might be normal if this is the first OSD"
CLUSTER_ACCESSIBLE=false
fi
# Show current OSD status
if [ "$CLUSTER_ACCESSIBLE" = true ]; then
echo ""
echo "Current OSD status:"
ceph osd tree 2>/dev/null || echo -e "${YELLOW} Cannot get OSD tree${NC}"
echo ""
CURRENT_OSD_COUNT=$(ceph osd tree 2>/dev/null | grep -c "osd\." || echo "0")
echo "Current OSD count: $CURRENT_OSD_COUNT"
fi
echo ""
# Verify disks are available
echo -e "${BLUE}=== Step 2: Disk Verification ===${NC}"
echo "-----------------------------------"
available_disks=()
unavailable_disks=()
# Check primary drives (sdc-sdh)
echo "Checking primary drives (sdc-sdh)..."
for disk in "${PRIMARY_DRIVES[@]}"; do
if [ ! -b "/dev/$disk" ]; then
echo -e " ${RED}✗ /dev/$disk not found${NC}"
unavailable_disks+=("$disk")
continue
fi
# Check if already has OSD
if ceph-volume lvm list /dev/$disk 2>/dev/null | grep -q "osd\."; then
echo -e " ${YELLOW}⚠ /dev/$disk already has an OSD, skipping${NC}"
unavailable_disks+=("$disk")
continue
fi
# Check if has partitions or is mounted
partitions=$(lsblk -n /dev/$disk 2>/dev/null | grep -c "part" || echo "0")
partitions=$(echo "$partitions" | tr -d '\n\r ' | head -1)
mountpoint=$(lsblk -d -n -o MOUNTPOINT /dev/$disk 2>/dev/null | tr -d '\n' || echo "")
if [ "${partitions:-0}" -eq 0 ] && [ -z "$mountpoint" ]; then
size=$(lsblk -d -n -o SIZE /dev/$disk 2>/dev/null || echo "unknown")
echo -e " ${GREEN}✓ /dev/$disk ($size) - Available${NC}"
available_disks+=("$disk")
else
echo -e " ${YELLOW}⚠ /dev/$disk has partitions or is mounted, skipping${NC}"
unavailable_disks+=("$disk")
fi
done
# Check secondary drive (sdb) if requested
if [ "$INCLUDE_SDB" = "true" ]; then
echo ""
echo "Checking secondary drive (sdb)..."
if [ ! -b "/dev/$SECONDARY_DRIVE" ]; then
echo -e " ${RED}✗ /dev/$SECONDARY_DRIVE not found${NC}"
elif ceph-volume lvm list /dev/$SECONDARY_DRIVE 2>/dev/null | grep -q "osd\."; then
echo -e " ${YELLOW}⚠ /dev/$SECONDARY_DRIVE already has an OSD, skipping${NC}"
else
# Check if it has LVM signature (needs wiping)
if pvs 2>/dev/null | grep -q "/dev/$SECONDARY_DRIVE"; then
echo -e " ${YELLOW}⚠ /dev/$SECONDARY_DRIVE has LVM signature (will be wiped)${NC}"
fi
size=$(lsblk -d -n -o SIZE /dev/$SECONDARY_DRIVE 2>/dev/null || echo "unknown")
echo -e " ${GREEN}✓ /dev/$SECONDARY_DRIVE ($size) - Will be prepared${NC}"
available_disks+=("$SECONDARY_DRIVE")
fi
fi
echo ""
echo "Summary:"
echo " Available disks: ${#available_disks[@]}"
echo " Unavailable/skipped: ${#unavailable_disks[@]}"
if [ ${#available_disks[@]} -eq 0 ]; then
echo -e "${RED}ERROR: No available disks to create OSDs on${NC}"
exit 1
fi
echo ""
read -p "Continue with OSD creation on ${#available_disks[@]} disk(s)? (yes/no): " confirm
if [ "$confirm" != "yes" ]; then
echo "Aborted by user"
exit 0
fi
echo ""
# Prepare disks
echo -e "${BLUE}=== Step 3: Prepare Disks ===${NC}"
echo "-----------------------------------"
for disk in "${available_disks[@]}"; do
echo "Preparing /dev/$disk..."
# Unmount any partitions
umount /dev/${disk}* 2>/dev/null || true
# For sdb, remove LVM signature if present
if [ "$disk" = "$SECONDARY_DRIVE" ]; then
if pvs 2>/dev/null | grep -q "/dev/$disk"; then
echo " Removing LVM signature..."
pvremove -f /dev/$disk 2>/dev/null || true
fi
fi
# Wipe filesystem signatures (but keep partition table if needed)
echo " Wiping filesystem signatures..."
wipefs -a /dev/$disk 2>/dev/null || true
echo -e " ${GREEN}✓ /dev/$disk prepared${NC}"
done
echo ""
# Create OSDs
echo -e "${BLUE}=== Step 4: Create Ceph OSDs ===${NC}"
echo "-----------------------------------"
osd_count=0
failed_disks=()
successful_osds=()
for disk in "${available_disks[@]}"; do
echo -e "${CYAN}Creating OSD on /dev/$disk...${NC}"
# Create OSD with logging
log_file="/tmp/ceph-osd-${disk}.log"
if ceph-volume lvm create --data /dev/$disk 2>&1 | tee "$log_file"; then
# Try to extract OSD ID
osd_id=$(grep -oP "osd\.\K\d+" "$log_file" 2>/dev/null | head -1)
if [ -n "$osd_id" ]; then
echo -e "${GREEN} ✓ OSD $osd_id created on /dev/$disk${NC}"
successful_osds+=("osd.$osd_id")
# Enable and start service
if systemctl enable ceph-osd@$osd_id 2>/dev/null; then
if systemctl start ceph-osd@$osd_id 2>/dev/null; then
echo -e "${GREEN} ✓ OSD $osd_id service started${NC}"
else
echo -e "${YELLOW} ⚠ OSD $osd_id service start had issues${NC}"
fi
fi
else
echo -e "${GREEN} ✓ OSD created on /dev/$disk (ID not extracted)${NC}"
fi
osd_count=$((osd_count + 1))
else
echo -e "${RED} ✗ Failed to create OSD on /dev/$disk${NC}"
failed_disks+=("$disk")
echo " Check $log_file for details"
fi
echo ""
done
# Summary
echo "=========================================="
echo -e "${CYAN}OSD Creation Summary${NC}"
echo "=========================================="
echo ""
echo "Successfully created: $osd_count OSD(s)"
echo "Successful OSDs: ${successful_osds[@]}"
if [ ${#failed_disks[@]} -gt 0 ]; then
echo -e "${YELLOW}Failed disks: ${failed_disks[@]}${NC}"
fi
echo ""
# Verify Ceph status
echo -e "${BLUE}=== Step 5: Verify Ceph Status ===${NC}"
echo "-----------------------------------"
if [ "$CLUSTER_ACCESSIBLE" = true ] || ceph quorum_status &>/dev/null 2>&1; then
echo "Ceph Health:"
ceph health 2>/dev/null || echo -e "${YELLOW}Cannot get health status${NC}"
echo ""
echo "OSD Tree:"
ceph osd tree 2>/dev/null || echo -e "${YELLOW}Cannot get OSD tree${NC}"
echo ""
echo "OSD Details:"
ceph osd df 2>/dev/null || echo -e "${YELLOW}Cannot get OSD details${NC}"
echo ""
NEW_OSD_COUNT=$(ceph osd tree 2>/dev/null | grep -c "osd\." || echo "0")
echo "Total OSD count: $NEW_OSD_COUNT"
if [ "$NEW_OSD_COUNT" -ge 3 ]; then
echo -e "${GREEN} ✓ SUCCESS: Have 3+ OSDs (should resolve TOO_FEW_OSDS if present)${NC}"
elif [ "$NEW_OSD_COUNT" -ge 1 ]; then
echo -e "${YELLOW} ⚠ Have $NEW_OSD_COUNT OSD(s). Need 3+ for production use.${NC}"
fi
else
echo -e "${YELLOW}Ceph cluster not accessible. OSDs may need time to join cluster.${NC}"
fi
echo ""
# Check OSD services
echo -e "${BLUE}=== Step 6: OSD Service Status ===${NC}"
echo "-----------------------------------"
systemctl list-units --type=service | grep ceph-osd | head -10 || echo "No OSD services found"
echo ""
echo "=========================================="
echo -e "${GREEN}Setup Complete!${NC}"
echo "=========================================="
echo ""
echo "Next steps:"
echo "1. Monitor Ceph health: ceph health"
echo "2. Check OSD status: ceph osd tree"
echo "3. Verify OSD services: systemctl status ceph-osd@<id>"
echo "4. If needed, create more OSDs on other nodes"
echo ""