diff --git a/modules/btrbk.lib b/modules/btrbk.lib index 837430d..1f6d534 100644 --- a/modules/btrbk.lib +++ b/modules/btrbk.lib @@ -25,17 +25,62 @@ btrbk_conf () { return 1 } -btrbk_run () { +btrbk_src () { + local file=$(btrbk_conf $1) + [[ ! $file ]] && return 1 + sudo btrbk -c $file list config --format col:h:source_subvolume +} -local dry_run="-n" -local dry_run_echo="echo" -[[ $1 == "-e" ]] && dry_run="" && dry_run_echo="" && shift +btrbk_dests () { +local file=$(btrbk_conf $1) +[[ ! $file ]] && return 1 +local dests=$(sudo btrbk -c $file list config --format col:h:snapshot_path | tail -1) +dests+=" $(sudo btrbk -c $file list target --format col:h:target_path)" +echo $dests +} + +btrbk_latest_links () { + +local dry_run="echo" +[[ $1 == "-e" ]] && dry_run="" && shift local file=$(btrbk_conf $1) [[ ! $file ]] && echo unable to find conf file for ${1:-btrbk.conf} && return 1 shift -local src=$(sudo btrbk -c $file list config --format col:h:source_subvolume) +local latest=$(sudo btrbk -c $file list latest --format col:h:snapshot_subvolume | xargs -I % sh -c 'basename %' | sed '$!N; /^\(.*\)\n\1$/!P; D') +[[ ( ! $latest ) || $latest == "-" ]] && echo "no latest snapshots so can't make .latest links" && return 3 +local dests=$(btrbk_dests $file) + +if [[ $dry_run ]]; then + echo dry run for making latest links for following destinations, NOTE: use -e to actually make them + echo $dests + echo "-------------------" +fi + +echo making .latest symlinks in each destination +for dest in $dests; do +for snap in $latest; do +# [[ -e $dest/${snap%%.*}.latest ]] && $dry_run_echo sudo rm $dest/${snap%%.*}.latest +local cmd="sudo ln -srfn $dest/$snap $dest/${snap%%.*}.latest" +echo $cmd +[[ ! $dry_run ]] && $cmd +done +done + +} + +btrbk_run () { + +local dry_run="-n" +local dry_run_echo="echo" +[[ $1 == "-e" ]] && dry_run="" && shift + +local file=$(btrbk_conf $1) +[[ ! $file ]] && echo unable to find conf file for ${1:-btrbk.conf} && return 1 +shift + +local src=$(btrbk_src $file) local snaps=$(sudo btrbk -c $file list source --format col:h:snapshot_name) @@ -60,35 +105,18 @@ echo from $src echo at these destinations $dests echo additional passed arguments: $@ -# so snaps +# do snaps and backups [[ $dry_run ]] && echo backup dry run || echo Taking snapshost and making backups now... sudo btrbk -c $file run $dry_run --progress $@ +# post snap/backup -local latest=$(sudo btrbk -c $file list latest --format col:h:snapshot_subvolume | xargs -I % sh -c 'basename %' | sed '$!N; /^\(.*\)\n\1$/!P; D') +btrbk_latest_links $([[ $dry_run ]] || printf "%s" -e) $file -if [[ $dry_run ]]; then - -echo Latest Snaphosts: $latest -fi - -[[ ( ! $latest ) || $latest == "-" ]] && echo "no latest snapshots so can't make .latest links" && return 3 - -# post snap tasks -echo making .latest symlinks in each destination -for dest in $dests; do -for snap in $latest; do -[[ -e $dest/${snap%%.*}.latest ]] && $dry_run_echo sudo rm $dest/${snap%%.*}.latest -$dry_run_echo sudo ln -sr $dest/$snap $dest/${snap%%.*}.latest -done -done } (return 0 2>/dev/null) || btrbk_run $@ -latest_links () { - btrbk_run -e $@ -n -} latest_clone () {