From 5cfeb2cf156705349730bdc6ce883fd8eb22e728 Mon Sep 17 00:00:00 2001 From: doc Date: Tue, 16 Sep 2025 11:30:38 +0000 Subject: first commit --- lxdbackup.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 lxdbackup.sh (limited to 'lxdbackup.sh') diff --git a/lxdbackup.sh b/lxdbackup.sh new file mode 100755 index 0000000..8865219 --- /dev/null +++ b/lxdbackup.sh @@ -0,0 +1,43 @@ +#!/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." -- cgit v1.2.3