summaryrefslogtreecommitdiff
path: root/lxdbackup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lxdbackup.sh')
-rwxr-xr-xlxdbackup.sh43
1 files changed, 43 insertions, 0 deletions
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."