110 lines
2.9 KiB
Bash
110 lines
2.9 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Create Ceph OSDs on all 6x 250GB drives
|
||
|
|
# Run on R630-01 as root
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# Colors
|
||
|
|
RED='\033[0;31m'
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
BLUE='\033[0;34m'
|
||
|
|
NC='\033[0m'
|
||
|
|
|
||
|
|
DRIVES=("sdc" "sdd" "sde" "sdf" "sdg" "sdh")
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Create Ceph OSDs on All 6x 250GB Drives"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check if running as root
|
||
|
|
if [ "$EUID" -ne 0 ]; then
|
||
|
|
echo -e "${RED}ERROR: Please run as root${NC}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Step 1: Remove Partitions from Drives ===${NC}"
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
for drive in "${DRIVES[@]}"; do
|
||
|
|
if [ ! -b "/dev/$drive" ]; then
|
||
|
|
echo -e "${YELLOW} /dev/$drive not found, skipping...${NC}"
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -e "${BLUE} Preparing /dev/$drive...${NC}"
|
||
|
|
|
||
|
|
# Unmount any partitions
|
||
|
|
umount /dev/${drive}* 2>/dev/null || true
|
||
|
|
|
||
|
|
# Remove partitions/filesystem signatures
|
||
|
|
echo " Removing partitions and filesystem signatures..."
|
||
|
|
wipefs -a "/dev/$drive" 2>/dev/null || true
|
||
|
|
|
||
|
|
echo -e "${GREEN} ✓ /dev/$drive prepared${NC}"
|
||
|
|
done
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Step 2: Create Ceph OSDs ===${NC}"
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
osd_count=0
|
||
|
|
failed_drives=()
|
||
|
|
|
||
|
|
for drive in "${DRIVES[@]}"; do
|
||
|
|
if [ ! -b "/dev/$drive" ]; then
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -e "${BLUE} Creating OSD on /dev/$drive...${NC}"
|
||
|
|
|
||
|
|
# Try to create OSD
|
||
|
|
if ceph-volume lvm create --data "/dev/$drive" 2>&1 | tee /tmp/ceph-osd-${drive}.log; then
|
||
|
|
echo -e "${GREEN} ✓ OSD created on /dev/$drive${NC}"
|
||
|
|
osd_count=$((osd_count + 1))
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW} ⚠ OSD creation had issues${NC}"
|
||
|
|
failed_drives+=("$drive")
|
||
|
|
echo " Check /tmp/ceph-osd-${drive}.log for details"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
done
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo -e "${GREEN}OSD Creation Summary${NC}"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
echo "Successfully created: $osd_count OSD(s) out of ${#DRIVES[@]} drives"
|
||
|
|
|
||
|
|
if [ ${#failed_drives[@]} -gt 0 ]; then
|
||
|
|
echo -e "${YELLOW}Failed drives: ${failed_drives[@]}${NC}"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Step 3: Verify Ceph Status ===${NC}"
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
echo "OSD Tree:"
|
||
|
|
ceph osd tree 2>/dev/null || echo -e "${YELLOW}Cannot get OSD tree${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "Ceph Health:"
|
||
|
|
ceph health 2>/dev/null || echo -e "${YELLOW}Cannot get health${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "OSD Details:"
|
||
|
|
ceph osd df 2>/dev/null || echo -e "${YELLOW}Cannot get OSD details${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
OSD_COUNT=$(ceph osd tree 2>/dev/null | grep -c "osd\." || echo "0")
|
||
|
|
echo "Current OSD count: $OSD_COUNT"
|
||
|
|
|
||
|
|
if [ "$OSD_COUNT" -ge 3 ]; then
|
||
|
|
echo -e "${GREEN} ✓ SUCCESS: Have 3+ OSDs (fixes TOO_FEW_OSDS error)${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW} ⚠ Still need more OSDs (currently have $OSD_COUNT, need 3+)${NC}"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|