aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsystemd-zfs-partition-backup.sh50
-rw-r--r--systemd-zfs-partition-backup/AUR/PKGBUILD2
2 files changed, 26 insertions, 26 deletions
diff --git a/systemd-zfs-partition-backup.sh b/systemd-zfs-partition-backup.sh
index aa3951f..2310414 100755
--- a/systemd-zfs-partition-backup.sh
+++ b/systemd-zfs-partition-backup.sh
@@ -1,14 +1,21 @@
1#!/usr/bin/bash 1#!/usr/bin/bash
2# Written in 2020 by Max Christian Pohle <webmaster@coderonline.de> 2# Written in 2020 by Max Christian Pohle <webmaster@coderonline.de>
3 3
4# check for a configuration file and source it in if its there
5test -f /etc/default/systemd-zfs-partition-backup &&\
6 source /etc/default/systemd-zfs-partition-backup
7
8DISK_NAME=$1
9DISK_NAME_ESCAPED=$(systemd-escape "$DISK_NAME")
10
4function beep() { 11function beep() {
5 test -f /usr/bin/beep &&\ 12 test -f /usr/bin/beep &&\
6 env -u SUDO_GID -u SUDO_COMMAND -u SUDO_USER -u SUDO_UID /usr/bin/beep $@ 13 env -u SUDO_GID -u SUDO_COMMAND -u SUDO_USER -u SUDO_UID /usr/bin/beep $@
7} 14}
8 15
9function fail() { 16function fail() {
10 # logger -s -t "$0" "Backup '$1' -> '$2' failed." 17 # logger -p debug -t "$0" "Backup '$1' -> '$2' failed."
11 logger -s "$@" 18 logger -p debug "$@"
12 beep -f 40 -l 500 19 beep -f 40 -l 500
13 # sudo -u max beep -f 523 -l 150 -n -f 54 -l 600 20 # sudo -u max beep -f 523 -l 150 -n -f 54 -l 600
14} 21}
@@ -24,36 +31,30 @@ function stop() {
24} 31}
25 32
26 33
34logger -p debug "disk: $DISK_NAME [esc]=> $DISK_NAME_ESCAPED"
27 35
28# check for a configuration file and source it in if its there 36DATASETS_WITH_DISKNAME=($(zfs list -H -o name | grep $DISK_NAME))
29test -f /etc/default/systemd-zfs-partition-backup &&\
30 source /etc/default/systemd-zfs-partition-backup
31
32DISK_NAME=$1
33DISK_NAME_ESCAPED=$(systemd-escape "$DISK_NAME")
34
35logger "Disk: $DISK_NAME"
36logger " : $DISK_NAME_ESCAPED (escaped)"
37 37
38DATASETS_WITH_DISKNAME=$(zfs list -H -o name | grep $DISK_NAME) 38if [ ${#DATASETS_WITH_DISKNAME[@]} -eq 0 ]; then
39 fail "No dataset found with '$DISK_NAME' as last part of its name."\
40 "Please create such if you want to backup that partition."
41 exit 0
42fi
39 43
40 44logger -p debug "${#DATASETS_WITH_DISKNAME[@]} Datasets: $DATASETS_WITH_DISKNAME"
41[ -z "$DATASETS_WITH_DISKNAME" ] &&\
42 (fail "no datasets found with name $DISK_NAME. Please create some." ; exit 1)
43
44logger "Datasets: $DATASETS_WITH_DISKNAME"
45 45
46# iterate over all datasets 46# iterate over all datasets
47for i in ${DATASETS_WITH_DISKNAME[@]}; 47for i in ${DATASETS_WITH_DISKNAME[@]};
48do 48do
49 logger "assertion: $(basename $i) == $DISK_NAME" 49 logger -p debug "assertion: $(basename $i) ?= $DISK_NAME"
50
50 # compare the 'tail' of the PATH against the disk name... 51 # compare the 'tail' of the PATH against the disk name...
51 if [ "$(basename $i)" == "$DISK_NAME" ]; then 52 if [ "$(basename $i)" == "$DISK_NAME" ]; then
52 start $DISK_NAME 53 start
53 54
54 DISK_MOUNTPOINT="/media/$DISK_NAME" 55 DISK_MOUNTPOINT="/media/$DISK_NAME"
55 if ! findmnt $DISK_MOUNTPOINT; then 56 if ! findmnt $DISK_MOUNTPOINT; then
56 logger -s "Expected to find disk '$DISK_NAME' mounted under '$DISK_MOUNTPOINT'. But it is not there. Aborting backup." 57 logger -p debug "Expected to find disk '$DISK_NAME' mounted under '$DISK_MOUNTPOINT'. But it is not there. Aborting backup."
57 beep -f 40 -l 500 58 beep -f 40 -l 500
58 exit 1 59 exit 1
59 fi 60 fi
@@ -69,13 +70,12 @@ do
69 findmnt -no source "$ZFS_MOUNTPOINT" ||\ 70 findmnt -no source "$ZFS_MOUNTPOINT" ||\
70 (fail "Dataset $DATASET is not mounted at $ZFS_MOUNTPOINT" ; exit 1) 71 (fail "Dataset $DATASET is not mounted at $ZFS_MOUNTPOINT" ; exit 1)
71 72
72 logger -s "Backup from '$DISK_MOUNTPOINT' -> '$ZFS_MOUNTPOINT' possible. Starting in 10 seconds..." 73 logger -p debug "Backup from '$DISK_MOUNTPOINT' -> '$ZFS_MOUNTPOINT' possible. Starting..."
73
74 beep -f 147 -l 120 -n -f 294 -l 200 -n -f 831 74 beep -f 147 -l 120 -n -f 294 -l 200 -n -f 831
75 75
76 set -x 76 set -x
77 rsync -ahoi -x --delete --info=all \ 77 rsync -ahoi -x --delete --info=all \
78 "$DISK_MOUNTPOINT" "$ZFS_MOUNTPOINT" \ 78 "$DISK_MOUNTPOINT/" "$ZFS_MOUNTPOINT/" \
79 2>&1 | tee $ZFS_MOUNTPOINT/backup-report.txt 79 2>&1 | tee $ZFS_MOUNTPOINT/backup-report.txt
80 set +x 80 set +x
81 81
@@ -87,12 +87,12 @@ do
87 zfs diff $DATASET_LAST_SNAPSHOT > $ZFS_MOUNTPOINT_VERIFIED/"$SYSTEMD_ZFS_PARTITION_BACKUP_DIFF_FILENAME" 87 zfs diff $DATASET_LAST_SNAPSHOT > $ZFS_MOUNTPOINT_VERIFIED/"$SYSTEMD_ZFS_PARTITION_BACKUP_DIFF_FILENAME"
88 88
89 if [ -n "$SYSTEMD_ZFS_PARTITION_BACKUP_EMAIL" ]; then 89 if [ -n "$SYSTEMD_ZFS_PARTITION_BACKUP_EMAIL" ]; then
90 logger -s "Here comes a list of changes since your last backup: $LAST_SNAPSHOT" |\ 90 logger -p debug "Here comes a list of changes since your last backup: $LAST_SNAPSHOT" |\
91 mailx -A typesafe -a $ZFS_MOUNTPOINT_VERIFIED/"$SYSTEMD_ZFS_PARTITION_BACKUP_DIFF_FILENAME" -s 'Backup overview' "$SYSTEMD_ZFS_PARTITION_BACKUP_EMAIL" 91 mailx -A typesafe -a $ZFS_MOUNTPOINT_VERIFIED/"$SYSTEMD_ZFS_PARTITION_BACKUP_DIFF_FILENAME" -s 'Backup overview' "$SYSTEMD_ZFS_PARTITION_BACKUP_EMAIL"
92 fi 92 fi
93 fi 93 fi
94 94
95 stop $DISK_NAME 95 stop
96 96
97 beep -f 831 -l 120 -n -f 294 -l 200 -n -f 147 97 beep -f 831 -l 120 -n -f 294 -l 200 -n -f 147
98 fi 98 fi
diff --git a/systemd-zfs-partition-backup/AUR/PKGBUILD b/systemd-zfs-partition-backup/AUR/PKGBUILD
index 8150e9b..b0fd026 100644
--- a/systemd-zfs-partition-backup/AUR/PKGBUILD
+++ b/systemd-zfs-partition-backup/AUR/PKGBUILD
@@ -13,7 +13,7 @@ depends=(
13 'mkinitcpio' 13 'mkinitcpio'
14) 14)
15source=("http://git.entwicklerseite.de/zfs-bash-tools/snapshot/zfs-bash-tools-master.tar.gz") 15source=("http://git.entwicklerseite.de/zfs-bash-tools/snapshot/zfs-bash-tools-master.tar.gz")
16sha256sums=('a6089d8abb9c5a433f0f1513194b726f7c6072849891e1922cd664be79cc4df0') 16sha256sums=('ef17307fcf662f867b98e6b5d883f2eb9fcd1f38205d516d9f85f53787ed58f1')
17 17
18package() { 18package() {
19 install -D zfs-bash-tools-master/${pkgname}.sh \ 19 install -D zfs-bash-tools-master/${pkgname}.sh \
..