#!/bin/bash # Backup critical mirror server configs + ZFS snapshots # Doc’s "configs over cargo" edition 🐒 set -euo pipefail umask 022 BACKUP_DIR="/mnt/brimstone/mirror-config-backups" TIMESTAMP=$(date +%Y%m%d-%H%M%S) ARCHIVE="$BACKUP_DIR/mirror-configs-$TIMESTAMP.tar.gz" mkdir -p "$BACKUP_DIR" echo "[$(date)] Creating config archive: $ARCHIVE" tar -czf "$ARCHIVE" \ /etc/rsyncd.conf \ /etc/rsyncd.motd \ /etc/mirror-gpg \ /usr/local/bin/mirror-verify.sh \ /usr/local/bin/mirror-backup.sh \ /etc/systemd/system/rsyncd.service \ /etc/systemd/system/mirror-verify.* \ /etc/cron.d/*mirror* 2>/dev/null || true echo "[$(date)] Archive complete." # Rotate old archives, keep last 7 echo "[$(date)] Rotating archives (keeping last 7)..." ls -1t "$BACKUP_DIR"/mirror-configs-*.tar.gz 2>/dev/null | tail -n +8 | while read -r oldfile; do echo "Removing old archive: $oldfile" rm -f "$oldfile" done #rsync to backup server echo "[$(date)] Sending to Stygian2 Backup Server..." rsync -avhr /mnt/brimstone/mirror-config-backups/*.tar.gz doc@stygian2.failzero.net:/home/doc/stygianconfig # Trigger ZFS snapshots echo "[$(date)] Taking ZFS snapshots..." zfs snapshot brimstone@mirror-backup-$TIMESTAMP || true zfs snapshot brimstone2@mirror-backup-$TIMESTAMP || true echo "[$(date)] Snapshots created: brimstone@mirror-backup-$TIMESTAMP, brimstone2@mirror-backup-$TIMESTAMP" echo "[$(date)] Backup completed successfully."