2023-11-26 02:45:49 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
LOGFILE="/var/log/btrfs-backup.log"
|
|
|
|
SNAP_DATE=$(date '+%Y-%m-%d_%H%M%S')
|
2023-12-06 21:15:47 +01:00
|
|
|
|
|
|
|
send_matrix_webhook() {
|
|
|
|
/usr/local/bin/send-matrix-webhook "btrfs-backup failed on $(hostname)"
|
|
|
|
}
|
|
|
|
|
2023-12-31 04:04:27 +01:00
|
|
|
trap send_matrix_webhook SIGINT SIGTERM
|
2023-11-26 02:45:49 +01:00
|
|
|
|
|
|
|
# Check if device is mounted
|
|
|
|
if ! grep "/srv/backup" /etc/mtab >/dev/null; then
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup device is not mounted." | tee -a "$LOGFILE"
|
|
|
|
notify-send -i computer-fail "Backup device is not mounted"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
create_snapshot() {
|
|
|
|
if ! btrfs subvolume snapshot -r "$1" "${1}/.snapshots/$2-$SNAP_DATE" >/dev/null; then
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Error creating snapshot of $1" | tee -a "$LOGFILE"
|
|
|
|
notify-send -i computer-fail "Error creating snapshot of $1"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Create snapshot of $1: OK" | tee -a "$LOGFILE"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
send_snapshot() {
|
|
|
|
mkdir -p "/srv/backup/$SNAP_DATE"
|
|
|
|
if ! btrfs send -q "${1}/.snapshots/$2-$SNAP_DATE" | btrfs receive -q "/srv/backup/$SNAP_DATE"; then
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Error sending snapshot of $1 to /srv/backup" | tee -a "$LOGFILE"
|
|
|
|
notify-send -i computer-fail "Error sending snapshot of $1 to /srv/backup"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Send snapshot of $1 to /srv/backup: OK" | tee -a "$LOGFILE"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Create root and home snapshots
|
|
|
|
create_snapshot "/" "root"
|
|
|
|
create_snapshot "/home" "home"
|
|
|
|
|
|
|
|
# Send root and home snapshots
|
|
|
|
send_snapshot "/" "root"
|
|
|
|
send_snapshot "/home" "home"
|