From f42c57f1f180928991bee7e7914d3b325d318f56 Mon Sep 17 00:00:00 2001 From: Max Christian Pohle Date: Sun, 12 Jul 2020 17:39:52 +0200 Subject: Fixed many issues --- systemd-zfs-partition-backup.sh | 22 +++++++++++++--------- systemd-zfs-partition-backup/AUR/PKGBUILD | 2 +- .../systemd/systemd-zfs-partition-backup@.service | 2 +- .../rules.d/90-systemd-zfs-partition-backup.rules | 3 +-- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/systemd-zfs-partition-backup.sh b/systemd-zfs-partition-backup.sh index 2310414..8a89718 100755 --- a/systemd-zfs-partition-backup.sh +++ b/systemd-zfs-partition-backup.sh @@ -6,7 +6,6 @@ test -f /etc/default/systemd-zfs-partition-backup &&\ source /etc/default/systemd-zfs-partition-backup DISK_NAME=$1 -DISK_NAME_ESCAPED=$(systemd-escape "$DISK_NAME") function beep() { test -f /usr/bin/beep &&\ @@ -21,13 +20,13 @@ function fail() { } function start() { - systemctl start media-$DISK_NAME_ESCAPED.automount ||\ - (fail "could not start disk with service media-$DISK_NAME_ESCAPED.automount"; exit 1) + UNIT_NAME=$(systemd-escape --suffix=automount $1) + systemctl start "$UNIT_NAME" || (fail "$UNIT_NAME not found." ; exit 1) } function stop() { - systemctl stop media-$DISK_NAME_ESCAPED.automount ||\ - (fail "could not stop disk with service media-$DISK_NAME_ESCAPED.automount"; exit 1) + UNIT_NAME=$(systemd-escape --suffix=automount $1) + systemctl stop "$UNIT_NAME" || (fail "$UNIT_NAME not found." ; exit 1) } @@ -46,19 +45,22 @@ logger -p debug "${#DATASETS_WITH_DISKNAME[@]} Datasets: $DATASETS_WITH_DISKNAME # iterate over all datasets for i in ${DATASETS_WITH_DISKNAME[@]}; do - logger -p debug "assertion: $(basename $i) ?= $DISK_NAME" + logger -p debug "assertion: "$i" =~ .*/$DISK_NAME" # compare the 'tail' of the PATH against the disk name... - if [ "$(basename $i)" == "$DISK_NAME" ]; then - start + if [[ $i =~ .*/$DISK_NAME ]]; then DISK_MOUNTPOINT="/media/$DISK_NAME" + + start "media/$DISK_NAME" # without leading slash for the unit file + if ! findmnt $DISK_MOUNTPOINT; then logger -p debug "Expected to find disk '$DISK_NAME' mounted under '$DISK_MOUNTPOINT'. But it is not there. Aborting backup." beep -f 40 -l 500 exit 1 fi + DATASET=$i DATASET_LAST_SNAPSHOT=$(zfs list -t snap -o name -s creation "$DATASET" | tail -n1) ||\ (fail "we could not find a previous backup. Backup may still be possible (first time backup?)") @@ -92,9 +94,11 @@ do fi fi - stop + stop "media/$DISK_NAME" # without leading slash for the unit file beep -f 831 -l 120 -n -f 294 -l 200 -n -f 147 + else + logger -p error "assertion failed: [[ $i =~ .*/$DISK_NAME ]] => false" fi done diff --git a/systemd-zfs-partition-backup/AUR/PKGBUILD b/systemd-zfs-partition-backup/AUR/PKGBUILD index 39b4e4c..d2543f6 100644 --- a/systemd-zfs-partition-backup/AUR/PKGBUILD +++ b/systemd-zfs-partition-backup/AUR/PKGBUILD @@ -14,7 +14,7 @@ depends=( 'rsync' ) source=("http://git.entwicklerseite.de/zfs-bash-tools/snapshot/zfs-bash-tools-master.tar.gz") -sha256sums=('2930678316eb0a6e67ab29f2ad378ea4d6e90ec49870742d68f78278c1a949e3') +sha256sums=('b89036a82f8ab86214016514931e7921027efdcaedeadaec0776a5eb94e33d18') package() { install -D zfs-bash-tools-master/${pkgname}.sh \ diff --git a/systemd-zfs-partition-backup/systemd/systemd-zfs-partition-backup@.service b/systemd-zfs-partition-backup/systemd/systemd-zfs-partition-backup@.service index d7948a8..a4577c4 100644 --- a/systemd-zfs-partition-backup/systemd/systemd-zfs-partition-backup@.service +++ b/systemd-zfs-partition-backup/systemd/systemd-zfs-partition-backup@.service @@ -3,5 +3,5 @@ Description=Generic backup [Service] Type=simple -ExecStart=/usr/bin/systemd-zfs-partition-backup.sh %I +ExecStart=/usr/bin/systemd-zfs-partition-backup.sh "%I" diff --git a/systemd-zfs-partition-backup/udev/rules.d/90-systemd-zfs-partition-backup.rules b/systemd-zfs-partition-backup/udev/rules.d/90-systemd-zfs-partition-backup.rules index 2a92960..3d05925 100644 --- a/systemd-zfs-partition-backup/udev/rules.d/90-systemd-zfs-partition-backup.rules +++ b/systemd-zfs-partition-backup/udev/rules.d/90-systemd-zfs-partition-backup.rules @@ -1,2 +1 @@ -ACTION=="add", ENV{ID_PART_ENTRY_NUMBER}=="[0-9]", ENV{SYSTEMD_WANTS}="systemd-zfs-partition-backup@$env{ID_SERIAL}\\x2dpart$env{ID_PART_ENTRY_NUMBER}.service" -LABEL="External disk drive backup" +ACTION=="add", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", PROGRAM="/bin/systemd-escape --template systemd-zfs-partition-backup@.service $env{ID_MODEL}.$env{ID_SERIAL_SHORT}/$env{ID_FS_UUID}", ENV{SYSTEMD_WANTS}+="$result" -- cgit v1.2.3