dsnap-sync: make snapshot-name a variable

* $snapper_snapshot_name: snapper has hardcoded the name 'snapshot'

Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
2018-09-24 20:54:45 +02:00
parent 3552e96eef
commit 6dcd0f7b45

View File

@@ -27,7 +27,7 @@
# difference for the next incremental snapshot. # difference for the next incremental snapshot.
progname="${0##*/}" progname="${0##*/}"
version="0.6.0" version="0.6.1"
# The following lines are modified by the Makefile or # The following lines are modified by the Makefile or
# find_snapper_config script # find_snapper_config script
@@ -44,6 +44,8 @@ mkfifo $PIPE
systemd-cat --identifier="$progname" < $PIPE & systemd-cat --identifier="$progname" < $PIPE &
BTRFS_PIPE=$TMPDIR_PIPE/btrfs.out BTRFS_PIPE=$TMPDIR_PIPE/btrfs.out
BTRFS_SEND_PIPE=$TMPDIR_PIPE/btrfs_send.out
BTRFS_RECIEVE_PIPE=$TMPDIR_PIPE/btrfs_recieve.out
#mkfifo $BTRFS_PIPE #mkfifo $BTRFS_PIPE
#systemd-cat --identifier="btrfs-pipe" < $BTRFS_PIPE & #systemd-cat --identifier="btrfs-pipe" < $BTRFS_PIPE &
@@ -76,7 +78,8 @@ selected_subvol='none'
selected_target='none' selected_target='none'
selected_uuid='none' selected_uuid='none'
snapper_sync_id=0 snapper_sync_id=0
snapper_snapshots=".snapshots" # hardcoded in snapper snapper_snapshots=".snapshots" # hardcoded in snapper
snapper_snapshot_name="snapshot" # hardcoded in snapper
snapper_subvolume_template="dsnap-sync" snapper_subvolume_template="dsnap-sync"
snapper_backup_type='none' snapper_backup_type='none'
#snapper_config_postfix="."`hostname` #snapper_config_postfix="."`hostname`
@@ -195,7 +198,7 @@ create_snapshot () {
if [ $SUBVOLUME = "/" ]; then if [ $SUBVOLUME = "/" ]; then
SUBVOLUME="" SUBVOLUME=""
fi fi
snapper_source_snapshot=$SUBVOLUME/.snapshots/$snapper_source_id/snapshot snapper_source_snapshot=$SUBVOLUME/.snapshots/$snapper_source_id/$snapper_snapshot_name
snapper_source_info=$SUBVOLUME/.snapshots/$snapper_source_id/info.xml snapper_source_info=$SUBVOLUME/.snapshots/$snapper_source_id/info.xml
#btrfs quota enable $snapper_source_snapshot #btrfs quota enable $snapper_source_snapshot
@@ -770,7 +773,7 @@ get_snapper_last_sync_id () {
if [ ${#snapper_sync_id} -ge 1 ]; then if [ ${#snapper_sync_id} -ge 1 ]; then
# ok, matching snapshot found # ok, matching snapshot found
snapper_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_sync_id/snapshot snapper_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_sync_id/$snapper_snapshot_name
else else
# no snapshot found, try grap latest successfull sync # no snapshot found, try grap latest successfull sync
if [ ${#snapper_subvolid} -ge 1 -a ${#snapper_uuid} -ge 1 ]; then if [ ${#snapper_subvolid} -ge 1 -a ${#snapper_uuid} -ge 1 ]; then
@@ -792,7 +795,7 @@ get_snapper_last_sync_id () {
if [ ${#snapper_sync_id} -ge 1 ]; then if [ ${#snapper_sync_id} -ge 1 ]; then
# ok, matching snapshot found # ok, matching snapshot found
snapper_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_sync_id/snapshot snapper_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_sync_id/$snapper_snapshot_name
else else
# no snapshot available # no snapshot available
snapper_sync_id=0 snapper_sync_id=0
@@ -1289,7 +1292,7 @@ run_config_preparation () {
"snapper_config=$SNAPPER_CONFIG_DIR/$selected_config" \ "snapper_config=$SNAPPER_CONFIG_DIR/$selected_config" \
"config_key=SUBVOLUME" "config_key=SUBVOLUME"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
snapper_source_sync_snapshot=$value/.snapshots/$snapper_source_sync_id/snapshot snapper_source_sync_snapshot=$value/.snapshots/$snapper_source_sync_id/$snapper_snapshot_name
fi fi
if [ $verbose -ge 2 ]; then if [ $verbose -ge 2 ]; then
printf "${MAGENTA}Last synced ${GREEN}source snapshot${MAGENTA} for snapper config ${GREEN}'%s'${MAGENTA} is ${GREEN}'%s'${MAGENTA} ...${NO_COLOR}\n" \ printf "${MAGENTA}Last synced ${GREEN}source snapshot${MAGENTA} for snapper config ${GREEN}'%s'${MAGENTA} is ${GREEN}'%s'${MAGENTA} ...${NO_COLOR}\n" \
@@ -1322,7 +1325,7 @@ run_config_preparation () {
# select commen sync id # select commen sync id
get_snapper_sync_id "snapper_config=${selected_config}" "remote=" get_snapper_sync_id "snapper_config=${selected_config}" "remote="
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
snapper_common_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_sync_id/snapshot snapper_common_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_sync_id/$snapper_snapshot_name
snapper_common_sync_id=$snapper_sync_id snapper_common_sync_id=$snapper_sync_id
if [ $verbose -ge 2 ]; then if [ $verbose -ge 2 ]; then
if [ $remote ]; then if [ $remote ]; then
@@ -1363,7 +1366,7 @@ run_config_preparation () {
"snapper_config=$SNAPPER_CONFIG_DIR/$snapper_target_config" \ "snapper_config=$SNAPPER_CONFIG_DIR/$snapper_target_config" \
"config_key=SUBVOLUME" "config_key=SUBVOLUME"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
snapper_target_sync_snapshot=$value/.snapshots/$snapper_target_sync_id/snapshot snapper_target_sync_snapshot=$value/.snapshots/$snapper_target_sync_id/$snapper_snapshot_name
backup_root=$value backup_root=$value
fi fi
;; ;;
@@ -1482,7 +1485,7 @@ run_backup () {
btrfs-clone) btrfs-clone)
# check for last common snapshot # check for last common snapshot
snapper_source_id=$snapper_source_sync_id snapper_source_id=$snapper_source_sync_id
snapper_source_snapshot=$SUBVOLUME/.snapshots/$snapper_source_sync_id/snapshot snapper_source_snapshot=$SUBVOLUME/.snapshots/$snapper_source_sync_id/$snapper_snapshot_name
snapper_source_info=$SUBVOLUME/.snapshots/$snapper_source_sync_id/info.xml snapper_source_info=$SUBVOLUME/.snapshots/$snapper_source_sync_id/info.xml
# to use snapper on the target to supervise the synced snapshots # to use snapper on the target to supervise the synced snapshots
@@ -1496,7 +1499,7 @@ run_backup () {
btrfs-archive) btrfs-archive)
# check for last common snapshot # check for last common snapshot
snapper_source_id=$snapper_source_sync_id snapper_source_id=$snapper_source_sync_id
snapper_source_snapshot=$SUBVOLUME/.snapshots/$snapper_source_sync_id/snapshot snapper_source_snapshot=$SUBVOLUME/.snapshots/$snapper_source_sync_id/$snapper_snapshot_name
snapper_source_info=$SUBVOLUME/.snapshots/$snapper_source_sync_id/info.xml snapper_source_info=$SUBVOLUME/.snapshots/$snapper_source_sync_id/info.xml
# targets backup location will save the snapshots in the subdirectory (snapshot-id) # targets backup location will save the snapshots in the subdirectory (snapshot-id)
@@ -1589,22 +1592,22 @@ run_backup () {
case $selected_fstype in case $selected_fstype in
btrfs) btrfs)
cmd="btrfs send $btrfs_verbose_flag $snapper_source_snapshot 2>$BTRFS_PIPE \ cmd="btrfs send $btrfs_verbose_flag $snapper_source_snapshot 2>$BTRFS_SEND_PIPE \
| $cmd_pv \ | $cmd_pv \
$cmd_ionice $ssh btrfs receive $btrfs_verbose_flag $snapper_target_snapshot 2>$BTRFS_PIPE" $cmd_ionice $ssh btrfs receive $btrfs_verbose_flag $snapper_target_snapshot/ 2>$BTRFS_RECIEVE_PIPE"
;; ;;
*) *)
# Can't use btrfs receive, since target filesystem can't support btrfs snapshot feature # Can't use btrfs receive, since target filesystem can't support btrfs snapshot feature
snapper_target_stream=${snapper_target_id}_${archive_type}.btrfs snapper_target_stream=${snapper_target_id}_${archive_type}.btrfs
if [ ! -f $snapper_target_snapshot/$snapper_target_stream ]; then if [ ! -f $snapper_target_snapshot/$snapper_target_stream ]; then
if [ -z $remote ]; then if [ -z $remote ]; then
cmd="btrfs send $btrfs_verbose_flag $snapper_source_snapshot 2>$BTRFS_PIPE \ cmd="btrfs send $btrfs_verbose_flag $snapper_source_snapshot 2>$BTRFS_SEND_PIPE \
| $cmd_pv \ | $cmd_pv \
$cmd_ionice cat > $snapper_target_snapshot/$snapper_target_stream 2>$BTRFS_PIPE" $cmd_ionice cat > $snapper_target_snapshot/$snapper_target_stream 2>$BTRFS_RECIEVE_PIPE"
else else
cmd="btrfs send $btrfs_verbose_flag $snapper_source_snapshot 2>$BTRFS_PIPE \ cmd="btrfs send $btrfs_verbose_flag $snapper_source_snapshot 2>$BTRFS_SEND_PIPE \
| $cmd_pv \ | $cmd_pv \
$cmd_ionice $ssh 'cat > $snapper_target_snapshot/$snapper_target_stream' 2>$BTRFS_PIPE" $cmd_ionice $ssh 'cat > $snapper_target_snapshot/$snapper_target_stream' 2>$BTRFS_RECIEVE_PIPE"
fi fi
else else
if [ $verbose -ge 2 ]; then if [ $verbose -ge 2 ]; then
@@ -1630,7 +1633,8 @@ run_backup () {
fi fi
$(eval $cmd) 1>/dev/null $(eval $cmd) 1>/dev/null
if [ "$?" -gt 0 ]; then if [ "$?" -gt 0 ]; then
printf "${RED}BTRFS_PIPE: %s${NO_COLOR}\n" "$(cat $BTRFS_PIPE)" printf "${RED}BTRFS_SEND_PIPE: %s${NO_COLOR}\n" "$(cat $BTRFS_SEND_PIPE)"
printf "${RED}BTRFS_RECIEVE_PIPE: %s${NO_COLOR}\n" "$(cat $BTRFS_RECIEVE_PIPE)"
die "btrfs pipe error." die "btrfs pipe error."
fi fi
else else
@@ -1639,7 +1643,7 @@ run_backup () {
printf "New ${GREEN}source${NO_COLOR} snapshot id: ${GREEN}'%s'${NO_COLOR} (path: ${GREEN}'%s'${NO_COLOR})\n" \ printf "New ${GREEN}source${NO_COLOR} snapshot id: ${GREEN}'%s'${NO_COLOR} (path: ${GREEN}'%s'${NO_COLOR})\n" \
"$snapper_source_id" "$snapper_source_snapshot" "$snapper_source_id" "$snapper_source_snapshot"
printf "New ${GREEN}target${NO_COLOR} snapshot id: ${GREEN}'%s'${NO_COLOR} (path: ${GREEN}'%s'${NO_COLOR})\n" \ printf "New ${GREEN}target${NO_COLOR} snapshot id: ${GREEN}'%s'${NO_COLOR} (path: ${GREEN}'%s'${NO_COLOR})\n" \
"$snapper_target_id" "$snapper_target_snapshot/snapshot" "$snapper_target_id" "$snapper_target_snapshot/$snapper_snapshot_name"
printf "Common synced snapshot id: ${GREEN}'%s'${NO_COLOR}\n" \ printf "Common synced snapshot id: ${GREEN}'%s'${NO_COLOR}\n" \
"$snapper_common_sync_id" "$snapper_common_sync_id"
printf "Last synced ${GREEN}source${NO_COLOR} snapshot id: ${GREEN}'%s'${NO_COLOR} (path: ${GREEN}'%s'${NO_COLOR})\n" \ printf "Last synced ${GREEN}source${NO_COLOR} snapshot id: ${GREEN}'%s'${NO_COLOR} (path: ${GREEN}'%s'${NO_COLOR})\n" \
@@ -1668,7 +1672,7 @@ run_backup () {
get_snapper_sync_id "snapper_config=${snapper_source_config}" "remote=" get_snapper_sync_id "snapper_config=${snapper_source_config}" "remote="
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
snapper_source_sync_id=$snapper_sync_id snapper_source_sync_id=$snapper_sync_id
snapper_source_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_sync_id/snapshot snapper_source_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_sync_id/$snapper_snapshot_name
else else
printf "${RED}Error: ${MAGENTA}No common sync id found. Aborting backup for config ${GREEN}'%s'${NOCOLOR}\n" printf "${RED}Error: ${MAGENTA}No common sync id found. Aborting backup for config ${GREEN}'%s'${NOCOLOR}\n"
# go for next configuration # go for next configuration
@@ -1689,7 +1693,7 @@ run_backup () {
if [ ${snapper_source_sync_id} != ${snapper_target_sync_id} ]; then if [ ${snapper_source_sync_id} != ${snapper_target_sync_id} ]; then
# btrfs send: use common sync_id as a valid parent # btrfs send: use common sync_id as a valid parent
snapper_source_sync_id=$snapper_common_sync_id snapper_source_sync_id=$snapper_common_sync_id
snapper_source_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_source_sync_id/snapshot snapper_source_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_source_sync_id/$snapper_snapshot_name
fi fi
fi fi
@@ -1711,11 +1715,11 @@ run_backup () {
# Can't use btrfs receive, since target filesystem can't support btrfs snapshot feature # Can't use btrfs receive, since target filesystem can't support btrfs snapshot feature
snapper_target_stream=${snapper_target_id}_incremental.btrfs snapper_target_stream=${snapper_target_id}_incremental.btrfs
if [ -z $remote ]; then if [ -z $remote ]; then
cmd="btrfs send $btrfs_verbose_flag -p $snapper_common_sync_snapshot $snapper_source_snapshot 2>$BTRFS_PIPE \ cmd="btrfs send $btrfs_verbose_flag -p $snapper_common_sync_snapshot $snapper_source_snapshot 2>$BTRFS_SEND_PIPE \
| $cmd_pv \ | $cmd_pv \
$cmd_ionice cat > $snapper_target_snapshot/$snapper_target_stream 2>$BTRFS_PIPE" $cmd_ionice cat > $snapper_target_snapshot/$snapper_target_stream 2>$BTRFS_PIPE"
else else
cmd="btrfs send $btrfs_verbose_flag -p $snapper_common_sync_snapshot $snapper_source_snapshot 2>$BTRFS_PIPE \ cmd="btrfs send $btrfs_verbose_flag -p $snapper_common_sync_snapshot $snapper_source_snapshot 2>$BTRFS_SEND_PIPE \
| $cmd_pv \ | $cmd_pv \
$cmd_ionice $ssh 'cat > $snapper_target_snapshot/$snapper_target_stream' 2>$BTRFS_PIPE" $cmd_ionice $ssh 'cat > $snapper_target_snapshot/$snapper_target_stream' 2>$BTRFS_PIPE"
fi fi
@@ -1810,11 +1814,11 @@ run_cleanup () {
check_snapper_failed_ids "$selected_config" "$batch" check_snapper_failed_ids "$selected_config" "$batch"
# cleanup target # cleanup target
#$ssh btrfs subvolume delete $backup_root/$snapper_snapshots/$snapper_target_sync_id/snapshot #$ssh btrfs subvolume delete $backup_root/$snapper_snapshots/$snapper_target_sync_id/$snapper_snapshot_name
#$ssh rm -rf $backup_root/$snapper_snapshots/$snapper_target_sync_id #$ssh rm -rf $backup_root/$snapper_snapshots/$snapper_target_sync_id
else else
printf "${MAGENTA}dryrun${NO_COLOR}: Would cleanup TEMPDIR and failed snapshot IDs ...\n" printf "${MAGENTA}dryrun${NO_COLOR}: Would cleanup failed snapshot IDs ...\n"
fi fi
} }
@@ -2026,9 +2030,9 @@ run_finalize () {
printf "calling: '%s'\n" "$cmd" printf "calling: '%s'\n" "$cmd"
fi fi
ret=$(eval "$cmd") ret=$(eval "$cmd")
snapper_source_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_source_sync_id/snapshot snapper_source_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_source_sync_id/$snapper_snapshot_name
else else
snapper_source_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_source_id/snapshot snapper_source_sync_snapshot=$SUBVOLUME/.snapshots/$snapper_source_id/$snapper_snapshot_name
fi fi
else else
# dry-run output # dry-run output
@@ -2896,7 +2900,7 @@ verify_snapper_structure () {
die "Can't create snapshot dir on target." die "Can't create snapshot dir on target."
fi fi
else else
cmd="$ssh stat --format %i $backup_root/$snapper_snapshots/$snapper_id/snapshot 2>/dev/null" cmd="$ssh stat --format %i $backup_root/$snapper_snapshots/$snapper_id/$snapper_snapshot_name 2>/dev/null"
ret=$(eval $cmd) ret=$(eval $cmd)
if [ $? -eq 0 ] && [ $ret -eq 256 ]; then if [ $? -eq 0 ] && [ $ret -eq 256 ]; then
# a former btrfs snapshot already exists # a former btrfs snapshot already exists
@@ -2948,6 +2952,9 @@ run_config_preparation
run_backup run_backup
# cleanup # cleanup
#if [ -f $PIPE ]; then
# rm -f $PIPE || die "Failed to cleanup temporary pipe '%s'\n" "$PIPE"
#fi
if [ -d $TMPDIR_PIPE ]; then if [ -d $TMPDIR_PIPE ]; then
rm -rf $TMPDIR_PIPE || die "Failed to cleanup temporary directory '%s'\n" "$TMPDIR_PIPE" rm -rf $TMPDIR_PIPE || die "Failed to cleanup temporary directory '%s'\n" "$TMPDIR_PIPE"
fi fi