Update backup script
This commit is contained in:
parent
5beb3fb9e2
commit
a447a20b8c
1 changed files with 24 additions and 8 deletions
|
@ -1,4 +1,5 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
# Check for required argument
|
# Check for required argument
|
||||||
if [ $# -ne 1 ]; then
|
if [ $# -ne 1 ]; then
|
||||||
|
@ -9,11 +10,25 @@ fi
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
SNAPPER_CONFIG="$1"
|
SNAPPER_CONFIG="$1"
|
||||||
SOURCE_PATH="/.snapshots"
|
|
||||||
|
# Get the actual snapshot location from snapper config
|
||||||
|
SOURCE_PATH=$(snapper -c "$SNAPPER_CONFIG" get-config | grep '^SUBVOLUME' | cut -d'=' -f2 | tr -d '"'| awk {'print $3'})
|
||||||
|
if [ -z "$SOURCE_PATH" ]; then
|
||||||
|
echo "ERROR: Could not determine snapshot path for config '$SNAPPER_CONFIG'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert subvolume path to snapshot path
|
||||||
|
SNAPSHOT_PATH="$SOURCE_PATH/.snapshots"
|
||||||
|
if [ ! -d "$SNAPSHOT_PATH" ]; then
|
||||||
|
echo "ERROR: Snapshot directory '$SNAPSHOT_PATH' does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
REMOTE_HOST="root@synology"
|
REMOTE_HOST="root@synology"
|
||||||
DEST_PATH="/volume1/backups/${SNAPPER_CONFIG}" # Added config name to path
|
DEST_PATH="/volume1/backups/btrfs_`hostname`_${SNAPPER_CONFIG}"
|
||||||
STATE_FILE="/var/lib/snapper-backup-${SNAPPER_CONFIG}.state" # Made state file unique per config
|
STATE_FILE="/var/lib/snapper-backup-${SNAPPER_CONFIG}.state"
|
||||||
LOG_FILE="/var/log/snapper-backup-${SNAPPER_CONFIG}.log" # Made log file unique per config
|
LOG_FILE="/var/log/snapper-backup-${SNAPPER_CONFIG}.log"
|
||||||
KEEP_SNAPSHOTS=5
|
KEEP_SNAPSHOTS=5
|
||||||
|
|
||||||
# Ensure we exit on any error
|
# Ensure we exit on any error
|
||||||
|
@ -33,7 +48,7 @@ log() {
|
||||||
# Function to verify snapshot exists
|
# Function to verify snapshot exists
|
||||||
verify_snapshot() {
|
verify_snapshot() {
|
||||||
local snapshot_num="$1"
|
local snapshot_num="$1"
|
||||||
if [ ! -d "$SOURCE_PATH/$snapshot_num/snapshot" ]; then
|
if [ ! -d "$SNAPSHOT_PATH/$snapshot_num/snapshot" ]; then
|
||||||
log "ERROR: Snapshot $snapshot_num does not exist"
|
log "ERROR: Snapshot $snapshot_num does not exist"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -73,6 +88,7 @@ cleanup_remote_snapshots() {
|
||||||
|
|
||||||
# Start backup process
|
# Start backup process
|
||||||
log "Starting backup for snapper config: $SNAPPER_CONFIG"
|
log "Starting backup for snapper config: $SNAPPER_CONFIG"
|
||||||
|
log "Using snapshot path: $SNAPSHOT_PATH"
|
||||||
|
|
||||||
# Verify remote connectivity first
|
# Verify remote connectivity first
|
||||||
verify_remote
|
verify_remote
|
||||||
|
@ -102,7 +118,7 @@ ssh "$REMOTE_HOST" "mkdir -p '$DEST_PATH'"
|
||||||
if [ -z "$LAST_TRANSFERRED" ]; then
|
if [ -z "$LAST_TRANSFERRED" ]; then
|
||||||
# First time backup - full send
|
# First time backup - full send
|
||||||
log "Performing full send of snapshot $LATEST_SNAPSHOT"
|
log "Performing full send of snapshot $LATEST_SNAPSHOT"
|
||||||
sudo btrfs send "$SOURCE_PATH/$LATEST_SNAPSHOT/snapshot" | \
|
sudo btrfs send "$SNAPSHOT_PATH/$LATEST_SNAPSHOT/snapshot" | \
|
||||||
pv -bytes | \
|
pv -bytes | \
|
||||||
ssh "$REMOTE_HOST" "btrfs receive '$DEST_PATH'" && {
|
ssh "$REMOTE_HOST" "btrfs receive '$DEST_PATH'" && {
|
||||||
echo "$LATEST_SNAPSHOT" > "$STATE_FILE"
|
echo "$LATEST_SNAPSHOT" > "$STATE_FILE"
|
||||||
|
@ -114,8 +130,8 @@ if [ -z "$LAST_TRANSFERRED" ]; then
|
||||||
else
|
else
|
||||||
# Incremental send
|
# Incremental send
|
||||||
log "Performing incremental send from $LAST_TRANSFERRED to $LATEST_SNAPSHOT"
|
log "Performing incremental send from $LAST_TRANSFERRED to $LATEST_SNAPSHOT"
|
||||||
sudo btrfs send -p "$SOURCE_PATH/$LAST_TRANSFERRED/snapshot" \
|
sudo btrfs send -p "$SNAPSHOT_PATH/$LAST_TRANSFERRED/snapshot" \
|
||||||
"$SOURCE_PATH/$LATEST_SNAPSHOT/snapshot" | \
|
"$SNAPSHOT_PATH/$LATEST_SNAPSHOT/snapshot" | \
|
||||||
pv -bytes | \
|
pv -bytes | \
|
||||||
ssh "$REMOTE_HOST" "btrfs receive '$DEST_PATH'" && {
|
ssh "$REMOTE_HOST" "btrfs receive '$DEST_PATH'" && {
|
||||||
echo "$LATEST_SNAPSHOT" > "$STATE_FILE"
|
echo "$LATEST_SNAPSHOT" > "$STATE_FILE"
|
||||||
|
|
Loading…
Reference in a new issue