#!/bin/bash TARGET_HOST="pallas" SNAPSHOT_NAME="meran" ZFS_SNAPSHOT_NAME="zpool1/ROOT/arch@$SNAPSHOT_NAME" ZFS_SNAPSHOT_DIR="/.zfs/snapshot/$SNAPSHOT_NAME" on_exit() { sudo zfs destroy "$ZFS_SNAPSHOT_NAME" || true sudo umount /boot/efi || true kill $SUDO_REFRESH_PID 2>/dev/null } ping_host() { TEST=$(dig @127.0.0.1 $TARGET_HOST +short) if [ -z "$TEST" ]; then echo "Error: Host $TARGET_HOST not found, bailing out." >&2 exit 1 fi } run_backup() { if [ -z "$DT" ]; then echo "Error: No sequence number set." >&2 exit 1 fi time sudo ionice -c3 nice -n19 chrt -i 0 \ tar \ --use-compress-program="/usr/bin/zstd -T0 -6" \ --warning=no-file-ignored \ --preserve-permissions \ --one-file-system \ --numeric-owner \ --sort=name \ --xattrs \ --xattrs-include='*' \ --totals \ --create \ --sparse \ --acls \ --file - \ --directory=/boot efi \ --directory="$ZFS_SNAPSHOT_DIR/.." "$SNAPSHOT_NAME" | \ ssh \ -c aes128-ctr \ -o Compression=no \ root@"$TARGET_HOST" \ "dd bs=16M status=progress of=/mnt/nvme/meran-$DT.tar.zst" } lucky_digit() { DOJ=$(date +%j) DOJ2=$((10#$DOJ)) DT=$(( DOJ2 % 5 )) echo "Lucky Digit: $DT" } prepare() { sudo true || exit 1 while :; do sudo -v ; sleep 60 ; done & SUDO_REFRESH_PID=$! trap on_exit TERM EXIT if ! mountpoint -q /boot/efi; then echo "Mounting /boot/efi" sudo mount /boot/efi fi sudo zfs destroy "$ZFS_SNAPSHOT_NAME" 2>/dev/null || true sudo zfs snapshot "$ZFS_SNAPSHOT_NAME" || exit 1 for i in $(seq 1 300); do if [ -d "$ZFS_SNAPSHOT_DIR" ]; then break fi if [ $i = 300 ]; then echo "Error: Timeout creating snapshot $ZFS_SNAPSHOT_NAME." >&2 exit 1 fi sleep 0.1 done } # # Main # lucky_digit ping_host prepare run_backup beep -f 2637 -l 50