# limitations under the License.
-# todo: remove old leaf subvols, like keep up to 1 month or something.
# todo: if we cancel in the middle of a btrfs send, then run again immediately, the received subvolume doesn't get a Received UUID: field, and we won't mount it. Need to figure out a solution that will fix this.
set -eE -o pipefail
conf_only=false
dry_run=false # mostly for testing
-resume_arg=
rate_limit=no
verbose=false
set -- $(< $default_args_file) "$@"
fi
-temp=$(getopt -l help cl:m:nprt:vh "$@") || usage 1
+temp=$(getopt -l help cl:m:npt:vh "$@") || usage 1
eval set -- "$temp"
while true; do
case $1 in
# only creates the config file, does not run btrbk
-c) conf_only=true; shift ;;
+ # bytes per second, suffix k m g
-l) rate_limit=$2; shift 2 ;;
+ # Comma separated mountpoints to backup. This has defaults set below.
-m) IFS=, mountpoints=($2); unset IFS; shift 2 ;;
-n) dry_run=true; dry_run_arg=-n; shift ;;
-p) progress_arg="--progress"; shift ;;
- # btrbk arg: Resume only. Skips snapshot creation.
- -r) resume_arg=-r; shift ;;
- # empty is valid for just doing local snapshot. we have default hosts
- # we will populate
+ # target hosts to send to. empty is valid for just doing local
+ # snapshot. we have default hosts we will populate.
-t) IFS=, targets=($2); unset IFS; shift 2 ;;
-v) verbose=true; verbose_arg=-v; shift ;;
-h|--help) usage ;;
esac
done
+# usefull commands are resume and archive
+cmd_arg=${1:-run}
+
if [[ -s $default_args_file ]]; then
echo "$0: warning: default btrbk-run options set in $default_args_file (sleeping 5 seconds):"
cat $default_args_file
sleep 5
fi
-echo -e "$0: options: conf_only=$conf_only\ndry_run=$dry_run\nresume_arg=$resume_arg\nrate_limit=$rate_limit\nverbose=$verbose"
+echo -e "$0: options: conf_only=$conf_only\ndry_run=$dry_run\nrate_limit=$rate_limit\nverbose=$verbose\ncmd_arg=$cmd_arg"
# set default targets
if [[ ! -v targets ]]; then
for tg in ${targets[@]}; do
# for an initial run, btrbk requires the dir to exist.
- # also use this opportunity to kill emacs, because it doesn't
- # notice that the file has changed out from underneath it
ssh root@$tg mkdir -p /mnt/root/btrbk
done
+
for m in ${mountpoints[@]}; do
# for /i, some special cases. there is just one static target and direction.
if [[ $m == /i ]]; then
exit
fi
+
+
if $dry_run; then
- m btrbk -v -n $resume_arg run
+ m btrbk -v -n $cmd_arg
+elif [[ $cmd_arg == archive ]]; then
+ for tg in ${targets[@]}; do
+ m btrbk $verbose_arg $progress_arg $cmd_arg $vol ssh://$tg$vol
+ done
else
# -q and just using the syslog option seemed nice,
# but it doesn't show when a send has a parent and when it doesn't.
- m btrbk $verbose_arg $progress_arg $resume_arg run
+ m btrbk $verbose_arg $progress_arg $cmd_arg
fi
# if we have it, sync to systems which don't