Files
backup_to_external_m.2/emergency_install.sh
root 26f6994e17 feat: complete LVM backup system with external M.2 boot support
MAJOR MILESTONE: Transform backup system into comprehensive LVM migration solution

🎯 LVM Migration & Boot System Complete:
- Complete external M.2 LVM migration capability
- One-button migration from non-LVM to LVM system
- Automatic GRUB repair and boot configuration
- External boot validation and recovery tools

🔧 New Migration Tools Added:
- fix_grub_lvm_boot.sh: Complete GRUB repair for external LVM boot
- automated_clonezilla_backup.sh: Automated backup with Clonezilla integration
- validate_lvm_migration.sh: Comprehensive migration validation
- troubleshoot_migration.sh: Advanced diagnostic and repair tools
- emergency_install.sh: Package installation for live systems
- bootstrap_usb_tools.sh: USB preparation with all dependencies

💾 Backup System Enhancements:
- create_alpine_backup_usb.sh: Alpine Linux live system preparation
- create_clonezilla_backup.sh: Professional backup solution integration
- plug_and_play_backup.sh: Simple automated backup workflow
- lvm_snapshot_backup.sh: LVM snapshot-based incremental backups
- simple_auto_backup.sh: Streamlined backup automation

📋 Documentation & Guides:
- LIVE_USB_MIGRATION_GUIDE.md: Complete migration walkthrough
- DRIVE_SELECTION_REFERENCE.md: Safe drive selection procedures
- Comprehensive troubleshooting and validation procedures
- Step-by-step migration instructions with safety checks

🛡️ Safety & Validation Features:
- Interactive drive selection with confirmation
- Comprehensive pre-migration checks
- Automatic backup validation
- GRUB boot repair with fallback options
- Hardware compatibility verification

🧪 Testing & Debugging:
- Complete GRUB configuration analysis
- LVM volume validation and repair
- Boot sequence troubleshooting
- Hardware connection diagnostics

 Production Ready Status:
- All migration tools tested and validated
- External M.2 boot functionality confirmed
- GRUB configuration properly generates LVM entries
- Kernel files correctly deployed to external boot partition
- EFI bootloader properly configured as 'ubuntu-external'

This completes the transformation from simple backup scripts to a comprehensive
LVM migration and backup system capable of full system migration to external M.2
with proper boot configuration and recovery capabilities.
2025-09-25 20:17:57 +02:00

204 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
# Emergency Package Installer for LVM Migration
# Handles different Debian/Ubuntu distributions and package availability
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}=== Emergency Package Installer ===${NC}"
echo "Installing all packages required for LVM migration..."
# Check if running as root
if [ "$EUID" -ne 0 ]; then
error "This script must be run as root. Use: sudo $0"
exit 1
fi
# Detect distribution
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO="$ID"
VERSION="$VERSION_ID"
log "Detected distribution: $PRETTY_NAME"
else
DISTRO="unknown"
warning "Could not detect distribution"
fi
# Update package lists
log "Updating package lists..."
apt update || warning "Failed to update package lists"
# Function to try installing a package with alternatives
try_install_package() {
local primary="$1"
shift
local alternatives=("$@")
log "Installing $primary..."
if apt install -y "$primary" >/dev/null 2>&1; then
success "Installed $primary"
return 0
fi
# Try alternatives
for alt in "${alternatives[@]}"; do
log "Trying alternative: $alt"
if apt install -y "$alt" >/dev/null 2>&1; then
success "Installed $alt (alternative for $primary)"
return 0
fi
done
warning "Failed to install $primary or any alternatives"
return 1
}
# Install packages with error handling and alternatives
log "Installing core utilities..."
try_install_package "util-linux"
try_install_package "coreutils"
try_install_package "bc"
try_install_package "bsdmainutils" "bsdutils"
log "Installing LVM and device mapper tools..."
try_install_package "lvm2"
try_install_package "dmsetup" "device-mapper"
log "Installing encryption tools..."
try_install_package "cryptsetup" "cryptsetup-bin"
log "Installing filesystem tools..."
try_install_package "e2fsprogs"
try_install_package "dosfstools" "mtools"
try_install_package "parted"
log "Installing backup and monitoring tools..."
try_install_package "rsync"
try_install_package "pv" "pipe-viewer"
log "Installing GRUB bootloader components..."
# Different distributions may have different GRUB package names
case "$DISTRO" in
debian)
try_install_package "grub-efi-amd64" "grub-efi" "grub-efi-amd64-bin"
try_install_package "grub-pc-bin" "grub-pc"
try_install_package "grub-common"
;;
ubuntu)
try_install_package "grub-efi-amd64" "grub-efi"
try_install_package "grub-pc-bin" "grub-pc"
try_install_package "grub-common"
try_install_package "grub2-common"
;;
*)
# Generic attempt for unknown distributions
warning "Unknown distribution, trying generic GRUB packages..."
try_install_package "grub-efi-amd64" "grub-efi" "grub"
try_install_package "grub-pc-bin" "grub-pc" "grub"
try_install_package "grub-common" "grub2-common"
;;
esac
log "Installing kernel and initramfs tools..."
try_install_package "initramfs-tools" "dracut"
# Don't install kernel on live system as it's not needed and may cause issues
# try_install_package "linux-image-generic" "linux-image-amd64"
log "Installing additional required tools..."
try_install_package "udev" "systemd-udev"
try_install_package "kmod" "module-init-tools"
# Load kernel modules
log "Loading required kernel modules..."
modprobe dm_mod 2>/dev/null || warning "Failed to load dm_mod"
modprobe dm_crypt 2>/dev/null || warning "Failed to load dm_crypt"
modprobe dm_snapshot 2>/dev/null || warning "Failed to load dm_snapshot"
# Check if LVM service is available and start it
if systemctl list-unit-files | grep -q lvm2; then
log "Starting LVM services..."
systemctl start lvm2-monitor 2>/dev/null || warning "Could not start lvm2-monitor"
systemctl start lvm2-lvmpolld 2>/dev/null || warning "Could not start lvm2-lvmpolld"
fi
# Verify critical tools are available
log "Verifying tool installation..."
missing_critical=()
# Check for tool availability with alternatives
check_tool() {
local primary="$1"
shift
local alternatives=("$@")
if command -v "$primary" >/dev/null 2>&1; then
return 0
fi
for alt in "${alternatives[@]}"; do
if command -v "$alt" >/dev/null 2>&1; then
return 0
fi
done
missing_critical+=("$primary")
return 1
}
check_tool "lvm" "lvm2"
check_tool "vgdisplay" "lvm"
check_tool "pvcreate" "lvm"
check_tool "lvcreate" "lvm"
check_tool "cryptsetup"
check_tool "rsync"
check_tool "parted"
check_tool "pv"
check_tool "mkfs.ext4" "mke2fs"
check_tool "mkfs.fat" "mkfs.vfat"
check_tool "grub-install" "grub2-install"
check_tool "update-grub" "grub-mkconfig"
check_tool "update-initramfs" "dracut"
if [ ${#missing_critical[@]} -eq 0 ]; then
success "All critical tools are now available!"
echo
echo "Available tools:"
for cmd in lvm vgdisplay cryptsetup rsync parted pv mkfs.ext4 grub-install; do
if command -v "$cmd" >/dev/null 2>&1; then
echo "$cmd: $(which $cmd)"
fi
done
echo
echo "You can now run: ./migrate_to_lvm.sh"
else
error "Still missing critical tools: ${missing_critical[*]}"
echo
echo "You may need to:"
echo "1. Check internet connection for package downloads"
echo "2. Try different package repositories"
echo "3. Install packages manually with different names"
echo "4. Use a different live system distribution"
exit 1
fi
echo
echo -e "${GREEN}Installation completed successfully!${NC}"
echo "The system is now ready for LVM migration."
echo
echo "Next steps:"
echo "1. Run: ./migrate_to_lvm.sh"
echo "2. Follow the interactive prompts"
echo "3. Validate with: ./validate_lvm_migration.sh"