X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=btrbk-run;h=014d85bbf92415d34b46da0eeb387c40e5e8fccc;hb=4da3435e0d1918d90f59043deff2dffbdbe172c2;hp=cec50f1cff60278ce628d7db4dc6189ed8132397;hpb=65d1dda5c1e79aa9c85a2d16bdd1a12413f163af;p=distro-setup diff --git a/btrbk-run b/btrbk-run index cec50f1..014d85b 100644 --- a/btrbk-run +++ b/btrbk-run @@ -148,15 +148,18 @@ while true; do shift done +cmd_arg="$1" + if $kd_spread_maybe; then - if [[ $1 && $1 != resume ]]; then + if [[ $cmd_arg && $cmd_arg != resume ]]; then die "dont pass -k without resume or empty run arg" fi cmd_arg=resume fi - -cmd_arg=${1:-run} +if [[ ! $cmd_arg ]]; then + cmd_arg=run +fi std_preserve="36h 14d 8w 24m" @@ -227,6 +230,8 @@ if [[ ! -v targets && ! $source ]]; then if [[ $MAIL_HOST == x3 ]]; then kd_spread=true else + # x3 was the mail host, but it moved to some other machine + # without updating us yet. echo "MAIL_HOST=$MAIL_HOST, nothing to do" mexit 0 fi @@ -299,11 +304,7 @@ if [[ ! -v targets && ! $source ]]; then fi done elif $at_work; then - if ping -q -c1 -w1 iank.vpn.office.fsf.org &>/dev/null; then - targets+=(iank.vpn.office.fsf.org) - else - targets+=(i.b8.nz) - fi + targets+=(i.b8.nz) for h in x2 x3 kw; do if [[ $HOSTNAME == "$h" ]]; then continue @@ -319,19 +320,6 @@ if [[ ! -v targets && ! $source ]]; then esac fi -if $verbose; then - printf "$pre options: conf_only=%s\ndry_run=%s\nrate_limit=%s\nverbose=%s\ncmd_arg=%s" "$conf_only" "$dry_run" "$rate_limit" "$verbose" "$cmd_arg" -fi - - -if [[ -v targets ]]; then - echo "targets: ${targets[*]}" -fi - -if [[ $source ]]; then - echo "source: $source" -fi - if [[ ${mountpoints[0]} ]]; then for mp in ${mountpoints[@]}; do if [[ -e /nocow/btrfs-stale/$mp ]]; then @@ -387,10 +375,10 @@ if (( ! ${#mountpoints[@]} )); then die didnt get mountpoint arg and had no defaults fi -echo "mountpoints: ${mountpoints[*]}" - ##### end command line parsing ######## +#### begin pre-checks ##### + # todo: this has a timing problem, since btrbk.timer could activate the service after this check. if ! $fast && [[ $source ]]; then if [[ $(ssh $source ps --no-headers -o comm 1) == systemd ]]; then @@ -404,6 +392,38 @@ if ! $fast && [[ $source ]]; then fi fi +if ! command -v btrbk &>/dev/null; then + die "error: no btrbk binary found" +fi + + +#### end pre-checks ##### + +mkdir -p /var/log/btrbk +# The journal doesnt go back to my oldest backups, and I've found myself +# wanting older logs. Not going to bother expiring old logs, since it is +# fine if they go back years. +log_path=/var/log/btrbk/$(date +%F_%T%:::z).log +echo copying output to $log_path +exec &> >(tee -a $log_path) + + +if $verbose; then + printf "$pre options: conf_only=%s\ndry_run=%s\nrate_limit=%s\nverbose=%s\ncmd_arg=%s" "$conf_only" "$dry_run" "$rate_limit" "$verbose" "$cmd_arg" +fi + +if [[ -v targets ]]; then + echo "targets: ${targets[*]}" +fi + +if [[ $source ]]; then + echo "source: $source" +fi + +echo "mountpoints: ${mountpoints[*]}" + + + # pull_reexec stops us from getting into an infinite loop if there is some # kind of weird problem pulla=false @@ -427,10 +447,6 @@ if ! $pull_reexec && [[ $source ]] && $pulla ; then fi -if ! command -v btrbk &>/dev/null; then - die "error: no btrbk binary found" -fi - if ! $fast; then # if our mountpoints are from stale snapshots, # it doesn't make sense to do a backup. @@ -503,14 +519,14 @@ else # This is a separate ssh because the command can fail and thatis ok. if $cron; then locked=false - if lock_info=$(timeout -s 9 6 ssh $h DISPLAY=:0 xscreensaver-command -timer); then + if lock_info=$(timeout -s 9 6 ssh $h DISPLAY=:0 xscreensaver-command -time); then if [[ $lock_info != *non-blanked* ]]; then locked=true fi else locked=true fi - if $locked; then + if ! $locked; then # Ignore this host. i sometimes use a non-main machine for # testing or web browsing, knowing that everything will be wiped # by the next backup, but I dont want it to happen as Im using @@ -563,11 +579,11 @@ snapshot_create onchange # if one disk had less space. # for now, keeping them equal. snapshot_preserve $std_preserve -snapshot_preserve_min 2h +snapshot_preserve_min 6h snapshot_dir btrbk # so, total backups = ~58 target_preserve $std_preserve -target_preserve_min 2h +target_preserve_min 6h # i tried this when investigating: clone no source subvolume found error #incremental_prefs sro:1 srn:1 sao san:1 aro:1 arn:1 @@ -702,8 +718,7 @@ fi if [[ $ret == 0 ]]; then for tg in ${targets[@]}; do - : - #ssh root@$tg /a/exe/mail-backup-clean + ssh root@$tg /usr/local/bin/mail-backup-clean done fi