-# umount first to ensure we don't have any errors
-# todo: do some kill fuser stuff to make umount more reliable
-# todo: setup sync systemd timer on $primary, once per hour.
-# todo: setup lock so that if this is already running, we exit out, so
-# that manual runs don't interfere with cronjobs.
-if [[ $primary ]] && ! $dry_run; then
- for m in ${mountpoints[@]}; do
- # note, this won't work for /i, due to path being /mnt/iroot
- # todo: include /i for treetowl/frodo
- btrfs property set -ts /mnt/root$m ro true
- ssh root@$primary bash <<EOF
-set -ex
-umount $m
-[[ -e /mnt/root$m ]] || exit 0
-btrfs sub del /mnt/root$m
-EOF
- done
+
+if [[ $mountpoints ]]; then
+ for mp in ${mountpoints[@]}; do # default mountpoints to sync
+ if [[ -e /nocow/btrfs-stale/$mp ]]; then
+ echo "$0: error: $mp is stale, mount-latest-subvol first"
+ exit 1
+ fi
+ done
+else
+ # set default mountpoints
+ case $HOSTNAME in
+ # no remote backups atm. note, if we do enable this, configuration below will need some changes.
+ # frodo)
+ # prospective_mps=(/i)
+ # ;;
+ *)
+ prospective_mps=(/a /q)
+ if [[ $HOSTNAME == "$MAIL_HOST" ]]; then
+ prospective_mps+=(/o)
+ fi
+ ;;
+ esac
+ for mp in ${prospective_mps[@]}; do # default mountpoints to sync
+ if [[ -e /nocow/btrfs-stale/$mp ]]; then
+ echo "$0: warning: $mp stale, not adding to default mountpoints"
+ continue
+ fi
+ if awk '{print $2}' /etc/fstab | grep -xF $mp &>/dev/null; then
+ mountpoints+=($mp)
+ fi
+ done
+fi
+
+echo "mountpoints: ${mountpoints[*]}"
+
+##### end command line parsing ########
+
+rsync-dirs() {
+ local host=$1
+ local path=$2
+ m rsync $dry_run_arg -ahi --relative --delete "$path" "root@$host:/"
+}
+
+
+m() { printf "%s: %s\n" "${0##*/}" "$*"; "$@"; }
+
+
+if ! which btrbk &>/dev/null; then
+ echo "$0: error: no btrbk binary found"
+ exit 1