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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user