scripts-fabq/scripts/update-efi-mirror.sh

51 lines
1.6 KiB
Bash

#!/bin/bash
# Identify the currently mounted EFI partition and its device
SOURCE_MOUNT="/boot/efi"
SOURCE_PART=$(findmnt -no SOURCE "$SOURCE_MOUNT")
SOURCE_UUID=$(findmnt -no UUID "$SOURCE_MOUNT")
SOURCE_DISK=$(lsblk -no PKNAME "$SOURCE_PART")
SOURCE_DISK_PATH="/dev/$SOURCE_DISK"
# Extract the backup UUID from fstab
BACKUP_UUID=$(grep "^#UUID=" /etc/fstab | grep "/boot/efi" | awk -F'[= ]' '{print $2}')
if [ -z "$BACKUP_UUID" ]; then
echo "Error: Backup EFI UUID not found in /etc/fstab"
exit 1
fi
if [ "$SOURCE_UUID" == "$BACKUP_UUID" ]; then
echo "Error: Source and Backup UUIDs are identical. Check /etc/fstab."
exit 1
fi
# Identify the physical disk for the backup UUID
BACKUP_PART=$(blkid -U "$BACKUP_UUID")
BACKUP_DISK=$(lsblk -no PKNAME "$BACKUP_PART")
BACKUP_DISK_PATH="/dev/$BACKUP_DISK"
# Define temporary mount point
TARGET_MOUNT=$(mktemp -d -t efi-sync.XXXXXXXXXX)
# Trap to ensure the directory is removed even if the script fails
trap 'rm -rf "$TARGET_MOUNT"' EXIT
# Mount, Sync, and Cleanup
if mount -U "$BACKUP_UUID" "$TARGET_MOUNT"; then
echo "Syncing EFI files: $SOURCE_UUID -> $BACKUP_UUID"
rsync -aqAX --delete "$SOURCE_MOUNT/" "$TARGET_MOUNT/"
umount "$TARGET_MOUNT"
echo "EFI Files Sync Complete."
else
echo "Error: Could not mount backup EFI ($BACKUP_UUID)"
exit 1
fi
# Ensure GRUB binary is installed on BOTH physical disks
echo "Updating GRUB bootloader on both physical disks..."
grub-install "$SOURCE_DISK_PATH" --recheck > /dev/null 2>&1
grub-install "$BACKUP_DISK_PATH" --recheck > /dev/null 2>&1
echo "Redundancy Complete: Files synced and GRUB updated on $SOURCE_DISK_PATH and $BACKUP_DISK_PATH."