Files
backup_to_external_m.2/lvm-migration-tools/troubleshoot_migration.sh
Migration Tools 9d25520de9 Initial commit: Complete LVM migration toolset with fixes
- Fixed partition size calculation bugs in migrate_to_lvm.sh
- Added comprehensive error handling for USB drive stability
- Optimized data copy operations using cp -a for better performance
- Corrected mount point detection for encrypted home partitions
- Enhanced drive detection and exclusion logic
- Added proper size override mechanisms for manual intervention
- Improved filesystem creation and validation processes
- Complete toolset for external M.2 drive migration scenarios

Tested successfully on:
- Debian 13 Trixie Live USB environment
- 476GB external M.2 drives via USB 3.0
- Complex partition layouts (root/home/EFI + encryption)
- Large data transfers (314GB+ encrypted home directories)
2025-09-25 05:53:12 +00:00

200 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
# LVM Migration Troubleshooting Script
# Helps diagnose issues with the migration process
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log() { echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1" >&2; }
success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
echo -e "${GREEN}=== LVM Migration Troubleshooting ===${NC}"
echo
# Check basic system requirements
check_system() {
log "Checking system requirements..."
# Check if running as root
if [ "$EUID" -ne 0 ]; then
error "This script must be run as root. Use: sudo $0"
return 1
fi
# Check if running from live system
local root_device=$(df / | tail -1 | awk '{print $1}')
if [[ "$root_device" == *"loop"* ]] || [[ "$root_device" == *"overlay"* ]] || [[ "$root_device" == *"tmpfs"* ]]; then
success "Running from live system"
else
warning "Not running from live system - migration may fail"
fi
# Check available tools
local tools=("lvm" "cryptsetup" "rsync" "parted" "pv" "grub-install" "mkfs.ext4" "mkfs.fat" "bc" "wipefs")
local missing=()
for tool in "${tools[@]}"; do
if command -v "$tool" >/dev/null 2>&1; then
success "Tool available: $tool"
else
missing+=("$tool")
fi
done
if [ ${#missing[@]} -gt 0 ]; then
error "Missing tools: ${missing[*]}"
echo "Run: sudo ./emergency_install.sh to install missing packages"
return 1
fi
}
# Check drives
check_drives() {
log "Checking available drives..."
echo "All block devices:"
lsblk -dpno NAME,SIZE,MODEL,VENDOR
echo
# Look for likely candidates
local internal_drives=($(lsblk -dpno NAME | grep -E "nvme|sda"))
local usb_drives=()
# Check for USB drives
for drive in $(lsblk -dpno NAME); do
if udevadm info --query=property --name="$drive" | grep -q "ID_BUS=usb"; then
usb_drives+=("$drive")
fi
done
echo "Likely internal drives:"
for drive in "${internal_drives[@]}"; do
local info=$(lsblk -dpno NAME,SIZE,MODEL "$drive")
echo " $info"
done
echo "USB drives (external/migration stick):"
for drive in "${usb_drives[@]}"; do
local info=$(lsblk -dpno NAME,SIZE,MODEL "$drive")
echo " $info"
done
}
# Check LVM status
check_lvm() {
log "Checking LVM status..."
echo "Physical volumes:"
pvs 2>/dev/null || echo "No physical volumes found"
echo "Volume groups:"
vgs 2>/dev/null || echo "No volume groups found"
echo "Logical volumes:"
lvs 2>/dev/null || echo "No logical volumes found"
# Check for existing system-vg
if vgs system-vg 2>/dev/null; then
warning "system-vg already exists - migration may have partially completed"
echo "To restart migration, you may need to:"
echo " vgremove -f system-vg"
echo " pvremove /dev/sdaX"
fi
}
# Check filesystem space and usage
check_filesystems() {
log "Checking current filesystem usage..."
echo "Current mounts and usage:"
df -h | grep -E "/$|/home$|/boot$"
echo
echo "System memory:"
free -h
}
# Test LVM commands
test_lvm_commands() {
log "Testing LVM command availability..."
# Test basic LVM commands
lvm version || error "LVM not working"
# Test if we can create a test PV (on a loop device)
log "Testing LVM functionality with loop device..."
# Create a small test file
dd if=/dev/zero of=/tmp/lvm-test.img bs=1M count=100 2>/dev/null
local loop_device=$(losetup -f --show /tmp/lvm-test.img)
if pvcreate "$loop_device" 2>/dev/null; then
success "LVM pvcreate works"
if vgcreate test-vg "$loop_device" 2>/dev/null; then
success "LVM vgcreate works"
if lvcreate -L 50M -n test-lv test-vg 2>/dev/null; then
success "LVM lvcreate works"
success "All LVM commands working correctly"
else
error "LVM lvcreate failed"
fi
# Cleanup
lvremove -f test-vg/test-lv 2>/dev/null || true
vgremove -f test-vg 2>/dev/null || true
else
error "LVM vgcreate failed"
fi
pvremove -f "$loop_device" 2>/dev/null || true
else
error "LVM pvcreate failed"
fi
# Cleanup
losetup -d "$loop_device" 2>/dev/null || true
rm -f /tmp/lvm-test.img
}
# Generate report
generate_report() {
echo
echo -e "${BLUE}=== Troubleshooting Report ===${NC}"
echo "Generated: $(date)"
echo "System: $(hostname)"
if check_system && check_drives && check_lvm && check_filesystems && test_lvm_commands; then
echo
success "All checks passed - system should be ready for migration"
echo
echo "To run migration:"
echo "1. sudo ./migrate_to_lvm.sh"
echo "2. Follow the interactive prompts"
echo "3. Carefully select source and target drives"
else
echo
error "Some checks failed - see messages above"
echo
echo "Common solutions:"
echo "• Run: sudo ./emergency_install.sh (for missing packages)"
echo "• Reboot from live USB (if not in live system)"
echo "• Check drive connections (if drives not detected)"
echo "• Remove existing LVM setup (if system-vg exists)"
fi
}
# Main execution
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
generate_report
fi