#!/bin/bash # backup-lxd.sh - Full LXD backup with offsite rsync NOW=$(date +'%F') BACKUP_DIR="/backups/lxd" REMOTE_USER="doc" REMOTE_HOST="thevault.bounceme.net" REMOTE_PATH="/gigapool/lxdbackups/${NOW}" # Subdir per date echo "📦 Starting LXD backup @ $NOW" mkdir -p "$BACKUP_DIR" # Backup LXD server config echo "🛠️ Dumping LXD init config..." lxd init --dump > "${BACKUP_DIR}/lxd.config.${NOW}" # Save instance list and version info echo "📋 Capturing metadata..." lxc list > "${BACKUP_DIR}/lxd.instances.list.${NOW}" snap list lxd > "${BACKUP_DIR}/lxd-version.${NOW}" # Export all LXD containers echo "📦 Backing up LXD instances..." for INSTANCE in $(lxc list -c n --format csv); do echo "➡️ Exporting $INSTANCE..." lxc export "$INSTANCE" "${BACKUP_DIR}/${INSTANCE}-backup-${NOW}.tar.xz" --optimized-storage \ && echo "✅ Done: $INSTANCE" \ || echo "❌ Failed: $INSTANCE" done # Offsite rsync to thevault echo "🚀 Syncing to ${REMOTE_HOST}:${REMOTE_PATH} ..." rsync -avh --progress --delete \ "$BACKUP_DIR/" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/" if [[ $? -eq 0 ]]; then echo "✅ Offsite sync completed successfully." else echo "❌ Rsync failed! Check connection or credentials." exit 1 fi echo "🎉 LXD backup + offsite sync complete."