]> code.delx.au - monosys/blob - lib-ext-backup
lib-ext-backup: cleanups
[monosys] / lib-ext-backup
1 #!/bin/bash
2
3 function cryptsetup_open {
4 for DEVICE in /dev/disk/by-partlabel/ext*backup*; do
5 if ! [ -L "$DEVICE" ]; then
6 continue
7 fi
8 DISKNAME="$(basename "$DEVICE")"
9 CRYPTNAME="crypt-$DISKNAME"
10 echo "> cryptsetup luksOpen $DEVICE $CRYPTNAME"
11 cryptsetup luksOpen "$DEVICE" "$CRYPTNAME" --key-file "/etc/lukskeys/${DISKNAME}"
12 mkdir -p /run/ext-backup-crypt/
13 ln -sf "/dev/mapper/$CRYPTNAME" /run/ext-backup-crypt/
14 done
15 }
16
17 function cryptsetup_close {
18 for CRYPTDEVICE in /dev/mapper/crypt-ext*backup*; do
19 if ! [ -L "$CRYPTDEVICE" ]; then
20 continue
21 fi
22 CRYPTNAME="$(basename "$CRYPTDEVICE")"
23 echo "> cryptsetup luksClose $CRYPTNAME"
24 cryptsetup luksClose "$CRYPTNAME"
25 rm -f "/run/ext-backup-crypt/$CRYPTNAME"
26 done
27 }
28
29 function pool_import {
30 echo "> zpool import -d /run/ext-backup-crypt -a"
31 zpool import -d /run/ext-backup-crypt -a
32
33 ZPOOLNAME="$(zpool list -H -o name|grep 'ext.*backup'|head -n1)"
34 if [ -z "$ZPOOLNAME" ]; then
35 echo "Error! Could not find pool!"
36 return 1
37 fi
38
39 echo "> Found: $ZPOOLNAME"
40 }
41
42 function pool_export {
43 echo "> zpool export $ZPOOLNAME"
44 for _ in $(seq 60); do
45 zpool export "$ZPOOLNAME" && break
46 sleep 1
47 done
48 }
49
50 function pool_setup {
51 zfs set mountpoint="/mnt/$ZPOOLNAME" "$ZPOOLNAME"
52 chmod 0700 "/mnt/$ZPOOLNAME"
53 zfs set compression=lz4 "$ZPOOLNAME"
54 zfs set devices=off "$ZPOOLNAME"
55 zfs set exec=off "$ZPOOLNAME"
56 zfs set setuid=off "$ZPOOLNAME"
57 zfs set xattr=sa "$ZPOOLNAME"
58 zfs set acltype=posixacl "$ZPOOLNAME"
59 }
60
61 function syncoidw {
62 echo "> syncoid $1"
63 syncoid "$@" --identifier "$ZPOOLNAME"
64
65 zfs list -t snapshot -H -o name -r "$ZPOOLNAME" \
66 | grep -F @syncoid_ \
67 | grep -Fv "@syncoid_$ZPOOLNAME" \
68 | xargs -rn1 zfs destroy -v
69 }
70
71 function snapshot_cleanup {
72 echo "> Cleaning snapshots"
73 sanoid --configdir=/etc/sanoid/ext-backup --verbose --prune-snapshots
74 }
75
76 function main {
77 zfs get all -s local -H > /root/zfs-props.txt
78 cryptsetup_open
79 pool_import
80 pool_setup
81 snapshot_sync
82 snapshot_cleanup
83 pool_export
84 cryptsetup_close
85 }