summaryrefslogtreecommitdiff
path: root/mirror-backup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'mirror-backup.sh')
-rwxr-xr-xmirror-backup.sh46
1 files changed, 46 insertions, 0 deletions
diff --git a/mirror-backup.sh b/mirror-backup.sh
new file mode 100755
index 0000000..c46ed2b
--- /dev/null
+++ b/mirror-backup.sh
@@ -0,0 +1,46 @@
+#!/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."
+