160 lines
4.5 KiB
Bash
160 lines
4.5 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Check VM 100 configuration before starting
|
||
|
|
# Run on Proxmox node: root@ml110-01
|
||
|
|
|
||
|
|
VMID=100
|
||
|
|
|
||
|
|
echo "=== Pre-Start Check for VM $VMID ==="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 1. VM Status
|
||
|
|
echo "1. VM Status:"
|
||
|
|
qm status $VMID 2>&1
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 2. Boot Configuration
|
||
|
|
echo "2. Boot Configuration:"
|
||
|
|
BOOT_CONFIG=$(qm config $VMID 2>&1 | grep -E "^boot:|^scsi0:|^ide2:")
|
||
|
|
if [ -z "$BOOT_CONFIG" ]; then
|
||
|
|
echo " ⚠️ No boot configuration found"
|
||
|
|
else
|
||
|
|
echo "$BOOT_CONFIG" | while read line; do
|
||
|
|
echo " $line"
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 3. Disk Configuration
|
||
|
|
echo "3. Disk Configuration:"
|
||
|
|
DISK_CONFIG=$(qm config $VMID 2>&1 | grep -E "^scsi0:|^scsi1:")
|
||
|
|
if [ -z "$DISK_CONFIG" ]; then
|
||
|
|
echo " ⚠️ No disk configuration found"
|
||
|
|
else
|
||
|
|
echo "$DISK_CONFIG" | while read line; do
|
||
|
|
echo " $line"
|
||
|
|
# Check if disk exists
|
||
|
|
if echo "$line" | grep -q "local-lvm:vm-$VMID-disk"; then
|
||
|
|
DISK_NAME=$(echo "$line" | sed -n 's/.*local-lvm:\(vm-[0-9]*-disk-[0-9]*\).*/\1/p')
|
||
|
|
if [ -n "$DISK_NAME" ]; then
|
||
|
|
if lvs | grep -q "$DISK_NAME"; then
|
||
|
|
DISK_SIZE=$(lvs | grep "$DISK_NAME" | awk '{print $4}')
|
||
|
|
echo " ✅ Disk exists: $DISK_NAME ($DISK_SIZE)"
|
||
|
|
else
|
||
|
|
echo " ⚠️ Disk not found: $DISK_NAME"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 4. Check for Image Import
|
||
|
|
echo "4. Checking for imported image:"
|
||
|
|
IMPORTED_DISKS=$(lvs | grep "vm-$VMID-disk" | awk '{print $1}')
|
||
|
|
if [ -z "$IMPORTED_DISKS" ]; then
|
||
|
|
echo " ⚠️ No imported disks found for VM $VMID"
|
||
|
|
echo " ⚠️ VM may have blank disk - will not boot!"
|
||
|
|
else
|
||
|
|
echo " ✅ Found disks:"
|
||
|
|
echo "$IMPORTED_DISKS" | while read disk; do
|
||
|
|
SIZE=$(lvs | grep "$disk" | awk '{print $4}')
|
||
|
|
echo " - $disk ($SIZE)"
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 5. Cloud-init Configuration
|
||
|
|
echo "5. Cloud-init Configuration:"
|
||
|
|
CLOUDINIT_CONFIG=$(qm config $VMID 2>&1 | grep -E "^ide2:|^ciuser:|^ipconfig0:")
|
||
|
|
if [ -z "$CLOUDINIT_CONFIG" ]; then
|
||
|
|
echo " ⚠️ No cloud-init configuration found"
|
||
|
|
else
|
||
|
|
echo "$CLOUDINIT_CONFIG" | while read line; do
|
||
|
|
echo " $line"
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 6. Network Configuration
|
||
|
|
echo "6. Network Configuration:"
|
||
|
|
NETWORK_CONFIG=$(qm config $VMID 2>&1 | grep -E "^net0:")
|
||
|
|
if [ -z "$NETWORK_CONFIG" ]; then
|
||
|
|
echo " ⚠️ No network configuration found"
|
||
|
|
else
|
||
|
|
echo " $NETWORK_CONFIG"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 7. Guest Agent
|
||
|
|
echo "7. Guest Agent Configuration:"
|
||
|
|
AGENT_CONFIG=$(qm config $VMID 2>&1 | grep -E "^agent:")
|
||
|
|
if [ -z "$AGENT_CONFIG" ]; then
|
||
|
|
echo " ⚠️ Guest agent not configured"
|
||
|
|
else
|
||
|
|
echo " $AGENT_CONFIG"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 8. Summary and Recommendations
|
||
|
|
echo "=== Summary ==="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check critical issues
|
||
|
|
ISSUES=0
|
||
|
|
|
||
|
|
# Check if boot order is set
|
||
|
|
if ! qm config $VMID 2>&1 | grep -q "^boot:"; then
|
||
|
|
echo "⚠️ ISSUE: Boot order not set"
|
||
|
|
ISSUES=$((ISSUES + 1))
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check if scsi0 disk exists and has data
|
||
|
|
SCSI0_DISK=$(qm config $VMID 2>&1 | grep "^scsi0:" | sed -n 's/.*local-lvm:\(vm-[0-9]*-disk-[0-9]*\).*/\1/p')
|
||
|
|
if [ -n "$SCSI0_DISK" ]; then
|
||
|
|
if ! lvs | grep -q "$SCSI0_DISK"; then
|
||
|
|
echo "⚠️ ISSUE: scsi0 disk not found: $SCSI0_DISK"
|
||
|
|
ISSUES=$((ISSUES + 1))
|
||
|
|
else
|
||
|
|
# Check disk size (should be > 0)
|
||
|
|
DISK_SIZE_RAW=$(lvs --units g | grep "$SCSI0_DISK" | awk '{print $4}' | sed 's/g//')
|
||
|
|
if [ -n "$DISK_SIZE_RAW" ] && [ "$(echo "$DISK_SIZE_RAW < 1" | bc 2>/dev/null || echo 0)" = "1" ]; then
|
||
|
|
echo "⚠️ ISSUE: scsi0 disk appears empty (< 1GB)"
|
||
|
|
ISSUES=$((ISSUES + 1))
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo "⚠️ ISSUE: scsi0 disk not configured"
|
||
|
|
ISSUES=$((ISSUES + 1))
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check if image was imported
|
||
|
|
if [ -z "$IMPORTED_DISKS" ]; then
|
||
|
|
echo "⚠️ ISSUE: No image imported - VM will not boot"
|
||
|
|
ISSUES=$((ISSUES + 1))
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ $ISSUES -eq 0 ]; then
|
||
|
|
echo "✅ No critical issues found"
|
||
|
|
echo ""
|
||
|
|
echo "VM appears ready to start. Run:"
|
||
|
|
echo " qm start $VMID"
|
||
|
|
else
|
||
|
|
echo ""
|
||
|
|
echo "⚠️ Found $ISSUES critical issue(s)"
|
||
|
|
echo ""
|
||
|
|
echo "Do NOT start the VM until these are resolved!"
|
||
|
|
echo ""
|
||
|
|
echo "Possible fixes:"
|
||
|
|
echo "1. If image not imported, check if image exists:"
|
||
|
|
echo " find /var/lib/vz/template/iso -name 'ubuntu-22.04-cloud.img'"
|
||
|
|
echo ""
|
||
|
|
echo "2. If boot order not set:"
|
||
|
|
echo " qm set $VMID --boot order=scsi0"
|
||
|
|
echo ""
|
||
|
|
echo "3. If disk not attached:"
|
||
|
|
echo " qm set $VMID --scsi0 local-lvm:vm-$VMID-disk-X,format=qcow2"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
|