summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2023-05-21 17:20:21 -0400
committerAndrew Cady <d@jerkface.net>2023-05-21 17:20:21 -0400
commit8fb6bea29155b86138da4fc097e456f56124f053 (patch)
treed76059fd95800cec0b4dcf7ad8d8cfa3d374ef86
parentbc8450ee096c358c61f1911b677c9ff77df51913 (diff)
use JSON config file instead of arguments
-rwxr-xr-xgo.sh60
1 files changed, 48 insertions, 12 deletions
diff --git a/go.sh b/go.sh
index 4a9ff6f..ec15e82 100755
--- a/go.sh
+++ b/go.sh
@@ -1,20 +1,56 @@
1#!/bin/bash 1#!/bin/bash
2
3read_config()
4{
5 eval config="($(jq -r '. | to_entries | .[] | "[\"" + .key + "\"]=" + (.value | @sh)'))"
6}
7
8check_dependencies()
9{
10 for c in flock jq mountpoint btrfs pv
11 do
12 command -v $c >/dev/null
13 done
14}
15
16check_user_is_root()
17{
18 [ "$UID" = 0 ]
19}
20
2set -e 21set -e
3wd=/root/src/local-btrfs-backup 22check_dependencies
4src=/ 23check_user_is_root
5dst=/srv/sdm1/borges 24
6parent_file=$wd/last-parent.txt 25if [ $# != 1 ]
26then
27 echo "Usage: $0 <config.json>" >&2
28 exit 1
29fi
30
31[ -r "$1" ]
32exec 3<>"$1"
33flock -n 3
34declare -A config
35read_config <&3
7 36
8snapshot="${src%/}"/backup~$(date -Ins) 37src=${config[source]}
38dst=${config[destination]}
39head=${config[head]}
40new_snapshot=${src%/}/.snapshot~$(date -Ins)
9 41
10set -x 42mountpoint -q "$src"
11if [ -e "$parent_file" ] 43if [ "$head" ]
12then 44then
13 read parent < "$parent_file" 45 read parent_snapshot < "$head"
46 mountpoint -q "$parent_snapshot"
47else
48 parent_snapshot=
14fi 49fi
50mkdir -p "$dst"
15 51
16btrfs subvolume snapshot -r "$src" "$snapshot" 52btrfs subvolume snapshot -r "$src" "$new_snapshot"
17btrfs send "$snapshot" ${parent:+ -p "$parent"} | pv | btrfs receive "$dst" 53btrfs send "$new_snapshot" ${parent_snapshot:+ -p "$parent_snapshot"} | pv | btrfs receive "$dst"
18printf "%s\n" "$snapshot" > "$parent_file"~tmp 54printf "%s\n" "$new_snapshot" > "$head"~tmp
19mv -T -- "$parent_file"~tmp "$parent_file" 55mv -T -- "$head"~tmp "$head"
20 56