summaryrefslogtreecommitdiff
path: root/lxdbackup.sh
blob: 886521983b7d4501992f80cf4e8c827c5d22f1aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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."