Files
backup_to_external_m.2/create_bootable_backup.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

244 lines
6.7 KiB
Bash
Executable File

#!/bin/bash
# Create Bootable Backup USB Script
# This creates a bootable USB that can perform system backups
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if running as root
if [[ $EUID -eq 0 ]]; then
print_error "Do not run as root. Script will use sudo when needed."
exit 1
fi
print_status "Bootable Backup USB Creator"
echo "==========================================="
echo
print_warning "This will create a bootable USB drive that can:"
print_warning "1. Boot into a minimal Linux environment"
print_warning "2. Automatically detect and backup your internal drive"
print_warning "3. Work completely offline (no running OS interference)"
echo
# List available USB drives
print_status "Available USB drives:"
lsblk -d -o NAME,SIZE,TYPE,TRAN | grep "usb" || {
print_error "No USB drives detected!"
exit 1
}
echo
read -p "Enter the USB drive to make bootable (e.g., /dev/sdb): " USB_DRIVE
if [[ ! -b "$USB_DRIVE" ]]; then
print_error "Device $USB_DRIVE does not exist!"
exit 1
fi
# Confirm USB drive selection
print_warning "⚠️ ALL DATA ON $USB_DRIVE WILL BE DESTROYED! ⚠️"
print_warning "This USB will become a bootable backup tool"
echo
lsblk "$USB_DRIVE"
echo
read -p "Are you sure you want to continue? (yes/no): " confirm
if [[ "$confirm" != "yes" ]]; then
print_error "Operation cancelled"
exit 1
fi
print_status "Creating bootable backup USB..."
# Unmount any existing partitions
sudo umount "${USB_DRIVE}"* 2>/dev/null || true
# Create partition table and bootable partition
print_status "Creating partition table..."
sudo parted "$USB_DRIVE" --script mklabel gpt
sudo parted "$USB_DRIVE" --script mkpart ESP fat32 1MiB 512MiB
sudo parted "$USB_DRIVE" --script mkpart backup ext4 512MiB 100%
sudo parted "$USB_DRIVE" --script set 1 boot on
# Format partitions
print_status "Formatting partitions..."
if [[ "$USB_DRIVE" == *"nvme"* ]]; then
BOOT_PART="${USB_DRIVE}p1"
DATA_PART="${USB_DRIVE}p2"
else
BOOT_PART="${USB_DRIVE}1"
DATA_PART="${USB_DRIVE}2"
fi
sudo mkfs.fat -F32 -n "BOOT" "$BOOT_PART"
sudo mkfs.ext4 -L "BACKUP_TOOLS" "$DATA_PART"
# Mount partitions
BOOT_MOUNT="/tmp/usb_boot_$$"
DATA_MOUNT="/tmp/usb_data_$$"
sudo mkdir -p "$BOOT_MOUNT" "$DATA_MOUNT"
sudo mount "$BOOT_PART" "$BOOT_MOUNT"
sudo mount "$DATA_PART" "$DATA_MOUNT"
print_status "Installing backup tools..."
# Copy backup scripts to data partition
SCRIPT_DIR=$(dirname "$(realpath "$0")")
sudo cp -r "$SCRIPT_DIR"/* "$DATA_MOUNT/"
sudo chmod +x "$DATA_MOUNT"/*.sh
# Create autorun script for backup
sudo tee "$DATA_MOUNT/autorun_backup.sh" > /dev/null << 'EOF'
#!/bin/bash
# Auto-run backup script when booted from USB
set -e
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${GREEN}"
echo "========================================"
echo " BOOTABLE BACKUP SYSTEM STARTED"
echo "========================================"
echo -e "${NC}"
# Wait for drives to be detected
sleep 5
echo "Detecting drives..."
echo
# Auto-detect internal drive (largest non-USB drive)
INTERNAL_DRIVE=$(lsblk -d -n -o NAME,SIZE,TYPE,TRAN | grep "disk" | grep -v "usb" | sort -k2 -hr | head -1 | awk '{print "/dev/" $1}')
# Auto-detect backup target (largest USB drive that's not the boot drive)
BOOT_USB=$(df /backup-tools | tail -1 | awk '{print $1}' | sed 's/[0-9]*$//')
TARGET_DRIVE=$(lsblk -d -n -o NAME,SIZE,TYPE,TRAN | grep "disk" | grep "usb" | awk '{print "/dev/" $1}' | grep -v "$BOOT_USB" | head -1)
echo "Auto-detected configuration:"
echo "Internal drive: $INTERNAL_DRIVE"
echo "Target drive: $TARGET_DRIVE"
echo
if [[ -z "$INTERNAL_DRIVE" || -z "$TARGET_DRIVE" ]]; then
echo -e "${RED}Could not auto-detect drives. Manual selection required.${NC}"
echo "Available drives:"
lsblk -d -o NAME,SIZE,TYPE,TRAN
echo
read -p "Enter source drive: " INTERNAL_DRIVE
read -p "Enter target drive: " TARGET_DRIVE
fi
echo -e "${YELLOW}FINAL CONFIRMATION${NC}"
echo "Source (internal): $INTERNAL_DRIVE"
echo "Target (backup): $TARGET_DRIVE"
echo
echo -e "${RED}⚠️ TARGET DRIVE WILL BE COMPLETELY OVERWRITTEN! ⚠️${NC}"
echo
read -p "Continue with backup? (yes/no): " confirm
if [[ "$confirm" != "yes" ]]; then
echo "Backup cancelled"
exit 0
fi
echo -e "${GREEN}Starting backup...${NC}"
cd /backup-tools
./backup_script.sh --source "$INTERNAL_DRIVE" --target "$TARGET_DRIVE"
echo -e "${GREEN}"
echo "========================================"
echo " BACKUP COMPLETED SUCCESSFULLY!"
echo "========================================"
echo -e "${NC}"
echo "You can now:"
echo "1. Remove the USB drives"
echo "2. Reboot to your normal system"
echo "3. Use smart sync for future backups"
echo
read -p "Press Enter to shutdown system..."
shutdown -h now
EOF
sudo chmod +x "$DATA_MOUNT/autorun_backup.sh"
print_status "Downloading minimal Linux for USB boot..."
# Check if we have a Linux ISO or create a simple boot setup
print_warning "Note: You'll need to manually add a bootable Linux distro"
print_warning "Recommendation: Use Ubuntu Live USB creator or similar"
print_warning "Then copy the backup tools to the USB"
# Create instructions file
sudo tee "$DATA_MOUNT/INSTRUCTIONS.txt" > /dev/null << EOF
BOOTABLE BACKUP USB INSTRUCTIONS
==================================
This USB contains backup tools but needs a bootable Linux environment.
SETUP STEPS:
1. Use Ubuntu's "Startup Disk Creator" or similar tool
2. Create a bootable Ubuntu Live USB on this drive
3. Boot from this USB
4. Open terminal and run:
cd /media/ubuntu/BACKUP_TOOLS
sudo ./autorun_backup.sh
AUTOMATIC BACKUP:
- The script will auto-detect your internal drive
- Auto-detect external backup target
- Perform complete system backup
- Shutdown when complete
AFTER FIRST BACKUP:
- Boot back to your normal system
- Use the GUI for smart sync backups:
python3 backup_manager.py
- Click "Smart Sync Backup" for fast updates
MANUAL BACKUP:
If auto-detection fails, you can run manually:
sudo ./backup_script.sh --source /dev/nvme0n1 --target /dev/sda
EOF
# Cleanup
sudo umount "$BOOT_MOUNT" "$DATA_MOUNT"
sudo rmdir "$BOOT_MOUNT" "$DATA_MOUNT"
print_success "Bootable backup USB preparation complete!"
print_success "USB: $USB_DRIVE"
echo
print_warning "NEXT STEPS:"
print_warning "1. Use Ubuntu's 'Startup Disk Creator' to make this USB bootable"
print_warning "2. Boot from USB in BIOS/UEFI boot menu"
print_warning "3. Run: sudo /media/ubuntu/BACKUP_TOOLS/autorun_backup.sh"
echo
print_success "After first backup, use GUI smart sync for incremental updates!"