]> code.delx.au - monosys/blob - lib-ext-backup
gnome-shell-raise-window
[monosys] / lib-ext-backup
1 #!/bin/bash
2
3 function find_device {
4 for DEVICE in /dev/disk/by-partlabel/ext*backup*; do
5 if [ -L "$DEVICE" ]; then
6 ZPOOLNAME="$(basename "$DEVICE")"
7 CRYPTNAME="crypt-$(basename "$DEVICE")"
8 echo "> Found: $ZPOOLNAME -> $(readlink -e "$DEVICE")"
9 return
10 fi
11 done
12
13 echo "ERROR! Couldn't find a backup device"
14 exit 1
15 }
16
17 function pool_import {
18 if ! zpool status "$ZPOOLNAME" &> /dev/null; then
19 echo "> cryptsetup luksOpen $DEVICE $CRYPTNAME"
20 cryptsetup luksOpen "$DEVICE" "$CRYPTNAME" --key-file "/etc/lukskeys/${ZPOOLNAME}"
21 echo "> zpool import $ZPOOLNAME"
22 zpool import "$ZPOOLNAME"
23 fi
24 }
25
26 function pool_export {
27 echo "> zpool export $ZPOOLNAME"
28 for i in $(seq 10); do
29 zpool export "$ZPOOLNAME" && break
30 done
31 echo "> cryptsetup luksClose $CRYPTNAME"
32 cryptsetup luksClose "$CRYPTNAME"
33 }
34
35 function cleanup_snapshots {
36 echo "> Cleaning snapshots"
37
38 sanoid --configdir=/etc/sanoid/ext-backup --verbose --prune-snapshots
39
40 zfs list -t snapshot -r "$ZPOOLNAME" -H -o name \
41 | grep -F @syncoid_ \
42 | grep -Fv "@syncoid_$ZPOOLNAME" \
43 | xargs -rn1 zfs destroy -v
44 }
45
46 function syncoidw {
47 syncoid --identifier "$ZPOOLNAME" "$@"
48 }
49
50 function main {
51 find_device
52 pool_import
53 sync_snapshots
54 cleanup_snapshots
55 pool_export
56 }