Scripts/incus/backup_incus_instances.sh

62 lines
1.6 KiB
Bash

#!/usr/bin/env bash
# vim: set tabstop=2 softtabstop=2 shiftwidth=2 expandtab:
#
# Script Name: backup_incus_instances.sh
# Description: This script backs up all Incus instances
# to a specified backup directory. It is designed
# to be invoked by Borgmatic hooks.
#
# Author: Benoit <forgejo@benoit.jp.net>
# Website: benoit.jp.net
# License: MIT
#
# Dependencies: incus
# Written with the help of ChatGPT
#
# Strict mode
set -euo pipefail
# Set the backup directory
BACKUP_DIR="/var/backups/incus"
# Create the backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"
# Get the list of instances and check for errors
instances=$(incus ls -f csv -c n 2>/dev/null)
if [ $? -ne 0 ]; then
echo "Error: Failed to list storage instances." >&2
exit 1
fi
# Check if there are any instances to back up
if [ -z "$instances" ]; then
echo "No instances found to back up."
exit 0
fi
# Initialize a success flag
all_backups_successful=true
# Loop through each instance and back it up
while IFS=, read -r name; do
echo "Backing up instance: $name"
if incus export "$name" \
--compression=none --instance-only \
"$BACKUP_DIR/${name}.tar" &> /dev/null; then
echo "Successfully backed up: $name"
else
echo "Error backing up instance: $name" >&2
all_backups_successful=false
fi
done <<< "$instances"
# Final message based on backup success
if $all_backups_successful; then
echo "Backup completed successfully. All instances have been backed up to $BACKUP_DIR."
else
echo "Backup completed with errors. Some instances may not have been backed up."
fi