case $1 in
-c) conf_only=true; shift ;;
-n) dry_run=true; dry_run_arg=-n; shift ;;
+ # btrbk arg: Resume only. Skips snapshot creation.
-r) resume_arg=-r; shift ;;
-t) IFS=, targets=($2); shift 2 ;;
-h|--help) usage ;;
rsync-dirs() {
local host=$1
local path=$2
- rsync $dry_run_arg -ahi --relative --delete "$path" "root@$host:/"
+ m rsync $dry_run_arg -ahi --relative --delete "$path" "root@$host:/"
}
vol-conf() {
target send-receive ssh://$tg$vol/btrbk
EOF
}
-
+m() { printf "%s\n" "$*"; "$@"; }
if ! which btrbk &>/dev/null; then
echo "$0: error: no btrbk binary found"
fi
+if [[ $- == *i* ]]; then
+ progress_arg=--progress
+fi
+
cat >/etc/btrbk.conf <<'EOF'
ssh_identity /root/.ssh/id_rsa
+# Just a guess that local7 is a good facility to pick.
+# It's a bit odd that the transaction log has to be logged to
+# a file or syslog, while other output is sent to std out.
+# The man does not mention a way for them to be together, but
+# I dunno if setting a log level like warn might also output
+# transaction info.
+transaction_syslog local7
# so we only run one at a time
lockfile /var/lock/btrbk.lock
# note q is owned by root:1000
# note p is owned 1000:1000 and chmod 700
-mountpoints=(/q)
-if awk '{print $2}' /etc/fstab | grep -xF /p &>/dev/null; then
- mountpoints+=(/p)
+mountpoints=(/a)
+qmnt=/q
+if awk '{print $2}' /etc/fstab | grep -xF $qmnt &>/dev/null; then
+ mountpoints+=($qmnt)
fi
# if our mountpoints are from stale snapshots,
fi
if $dry_run; then
- btrbk -n $resume_arg run
+ m btrbk -n $resume_arg run
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.
- btrbk $resume_arg run
+ m btrbk $progress_arg $resume_arg run
fi
# if we have /p, rsync to targets without /p
fi
if ! $dry_run; then
- $script_dir/mount-latest-remote ${targets[@]}
+ m $script_dir/mount-latest-remote ${targets[@]}
fi