snap-sync: support selection of SUBVOLID
- either use --subvolid 'id' or --SUBVOLID 'id' - or --subvolid='id' or --SUBVOLID='id' Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
@@ -42,6 +42,7 @@ exec 3>$PIPE
|
|||||||
disk_count=-1
|
disk_count=-1
|
||||||
disk_uuid_match_count=0
|
disk_uuid_match_count=0
|
||||||
disk_target_match_count=0
|
disk_target_match_count=0
|
||||||
|
disk_subvolid_match_count=0
|
||||||
disk_uuid_match=''
|
disk_uuid_match=''
|
||||||
selected_uuid='none'
|
selected_uuid='none'
|
||||||
selected_target='none'
|
selected_target='none'
|
||||||
@@ -100,7 +101,7 @@ get_disk_infos () {
|
|||||||
# we need at least one target disk
|
# we need at least one target disk
|
||||||
if [ ${#disk_targets} -eq 0 ]; then die "no suitable target disk found \n"die
|
if [ ${#disk_targets} -eq 0 ]; then die "no suitable target disk found \n"die
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Posix Shells do not support Array. Therefore using ...
|
# Posix Shells do not support Array. Therefore using ...
|
||||||
# Pseudo-Arrays (assumption: equal number of members)
|
# Pseudo-Arrays (assumption: equal number of members)
|
||||||
# Pseudo-Array: disk_uuid_$i
|
# Pseudo-Array: disk_uuid_$i
|
||||||
@@ -137,6 +138,12 @@ get_disk_infos () {
|
|||||||
i=0
|
i=0
|
||||||
for fs_option in $fs_options; do
|
for fs_option in $fs_options; do
|
||||||
eval "fs_options_$i='$fs_option'"
|
eval "fs_options_$i='$fs_option'"
|
||||||
|
subvolid=$(eval echo \$fs_options | sed -e 's/.*subvolid=\([0-9]*\).*/\1/')
|
||||||
|
if [ "$subvolid" = "$subvolid_cmdline" ]; then
|
||||||
|
disk_subvolid_match="$i"
|
||||||
|
disk_subvolid_match_count=$(($disk_subvolid_match_count+1))
|
||||||
|
fi
|
||||||
|
eval "disk_target_$i='$disk_target'"
|
||||||
i=$((i+1))
|
i=$((i+1))
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -194,6 +201,10 @@ parse_params () {
|
|||||||
nonotify=1
|
nonotify=1
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
-s|--subvolid|--SUBVOLID)
|
||||||
|
subvolid_cmdline="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
-u|--UUID)
|
-u|--UUID)
|
||||||
uuid_cmdline="$2"
|
uuid_cmdline="$2"
|
||||||
shift 2
|
shift 2
|
||||||
@@ -211,6 +222,10 @@ parse_params () {
|
|||||||
ssh="ssh $remote"
|
ssh="ssh $remote"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
--subvolid=*|--SUBVOLID=*)
|
||||||
|
subvolid_cmdline=${1#*=}
|
||||||
|
shift
|
||||||
|
;;
|
||||||
--TARGET=*)
|
--TARGET=*)
|
||||||
target_cmdline=${1#*=}
|
target_cmdline=${1#*=}
|
||||||
shift
|
shift
|
||||||
@@ -558,7 +573,7 @@ run_backup () {
|
|||||||
# which is stored in snappers info.xml file of the source snapshot.
|
# which is stored in snappers info.xml file of the source snapshot.
|
||||||
# This is how we find the parent.
|
# This is how we find the parent.
|
||||||
|
|
||||||
userdata="backupdir=$backup_dir, uuid=$selected_uuid, subvolid=$selected_subvol"
|
userdata="backupdir=$backup_dir, subvolid=$selected_subvol, uuid=$selected_uuid"
|
||||||
|
|
||||||
# Tag new snapshot as the latest
|
# Tag new snapshot as the latest
|
||||||
printf "Tagging new snapshot as latest backup for '%s' ...\n" "$selected_config" | tee $PIPE
|
printf "Tagging new snapshot as latest backup for '%s' ...\n" "$selected_config" | tee $PIPE
|
||||||
@@ -590,6 +605,16 @@ select_target_disk () {
|
|||||||
printf "Selecting a mounted BTRFS device for backups on %s.\n" "$remote"
|
printf "Selecting a mounted BTRFS device for backups on %s.\n" "$remote"
|
||||||
fi
|
fi
|
||||||
while [ "$disk_id" -eq -1 ] || [ "$disk_id" -le $disk_count ]; do
|
while [ "$disk_id" -eq -1 ] || [ "$disk_id" -le $disk_count ]; do
|
||||||
|
if [ "$disk_subvolid_match_count" -eq 1 ]; then
|
||||||
|
# matching SUBVOLID selection from commandline
|
||||||
|
# Pseudo-Array: disk_selected_$i (reference to $disk_uuid element)
|
||||||
|
eval "disk_selected_$i='$disk_subvolid_match'"
|
||||||
|
disk=$(eval echo \$disk_uuid_$disk_subvolid_match)
|
||||||
|
subvolid=$(eval echo \$disk_subvolid_$disk_subvolid_match)
|
||||||
|
fs_options=$(eval echo \$fs_options_$disk_target_match | sed -e 's/.*,\(subvolid=[0-9]*\).*,\(subvol=[0-9]*\)/\1,\2/')
|
||||||
|
disk_selected=$disk_subvolid_match
|
||||||
|
break
|
||||||
|
fi
|
||||||
if [ "$disk_target_match_count" -eq 1 ]; then
|
if [ "$disk_target_match_count" -eq 1 ]; then
|
||||||
# matching TARGET selection from commandline
|
# matching TARGET selection from commandline
|
||||||
# Pseudo-Array: disk_selected_$i (reference to $disk_uuid element)
|
# Pseudo-Array: disk_selected_$i (reference to $disk_uuid element)
|
||||||
@@ -689,8 +714,8 @@ Options:
|
|||||||
-u, --UUID <UUID> Specify the UUID of the mounted BTRFS subvolume to back up to. Otherwise will prompt."
|
-u, --UUID <UUID> Specify the UUID of the mounted BTRFS subvolume to back up to. Otherwise will prompt."
|
||||||
If multiple mount points are found with the same UUID, will prompt user."
|
If multiple mount points are found with the same UUID, will prompt user."
|
||||||
-l, --TARGET <target> Specify the mountpoint of the BTRFS subvolume to back up to.
|
-l, --TARGET <target> Specify the mountpoint of the BTRFS subvolume to back up to.
|
||||||
--remote <address> Send the snapshot backup to a remote machine. The snapshot will be sent via ssh. You
|
--remote <address> Send the snapshot backup to a remote machine. The snapshot will be sent via ssh. You
|
||||||
should specify the remote machine's hostname or ip address. The 'root' user must be
|
should specify the remote machine's hostname or ip address. The 'root' user must be
|
||||||
permitted to login on the remote machine.
|
permitted to login on the remote machine.
|
||||||
--dry-run perform a trial run where no changes are made.
|
--dry-run perform a trial run where no changes are made.
|
||||||
-v, --verbose Be more verbose on what's going on.
|
-v, --verbose Be more verbose on what's going on.
|
||||||
|
|||||||
Reference in New Issue
Block a user