proxmox-to-hetzner-weekly.sh
first init
This commit is contained in:
commit
fe825be8b5
1 changed files with 59 additions and 0 deletions
59
proxmox-to-hetzner-weekly.sh
Normal file
59
proxmox-to-hetzner-weekly.sh
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SRC_DIR="/backup/dump"
|
||||||
|
|
||||||
|
DEST_USER="u423539-sub5"
|
||||||
|
DEST_HOST="u423539-sub5.your-storagebox.de"
|
||||||
|
DEST_DIR="proxmox-weekly"
|
||||||
|
|
||||||
|
SSH_KEY="/root/.ssh/hetzner_storagebox_ed25519"
|
||||||
|
SSH_PORT=23
|
||||||
|
|
||||||
|
# IDs, die offsite sollen
|
||||||
|
IDS=(100 101 102 103 104 105 106 107 109 111 113 115 116 117 118 119 120 122 123)
|
||||||
|
|
||||||
|
# Zielverzeichnis auf der Storage Box anlegen
|
||||||
|
ssh -p "${SSH_PORT}" -i "${SSH_KEY}" -o IdentitiesOnly=yes \
|
||||||
|
"${DEST_USER}@${DEST_HOST}" \
|
||||||
|
"mkdir -p '${DEST_DIR}'"
|
||||||
|
|
||||||
|
# 1) Upload: pro ID das aktuellste Backup hochschieben
|
||||||
|
for ID in "${IDS[@]}"; do
|
||||||
|
echo "Prüfe ID ${ID}..."
|
||||||
|
|
||||||
|
LATEST_FILE="$(
|
||||||
|
ls -1t "${SRC_DIR}"/vzdump-*-"${ID}"-* 2>/dev/null \
|
||||||
|
| grep -E '\.(vma|vma\.zst|vma\.gz|tar|tar\.zst|tar\.gz)$' \
|
||||||
|
| head -n1 || true
|
||||||
|
)"
|
||||||
|
|
||||||
|
if [[ -z "${LATEST_FILE}" ]]; then
|
||||||
|
echo "WARN: Kein gültiges Backup-File für ID ${ID} in ${SRC_DIR} gefunden, überspringe."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Sync ID ${ID}: ${LATEST_FILE}"
|
||||||
|
|
||||||
|
ionice -c3 nice -n 19 \
|
||||||
|
rsync -av --partial --inplace --bwlimit=5000 \
|
||||||
|
-e "ssh -i ${SSH_KEY} -p ${SSH_PORT} -o IdentitiesOnly=yes" \
|
||||||
|
"${LATEST_FILE}" \
|
||||||
|
"${DEST_USER}@${DEST_HOST}:${DEST_DIR}/"
|
||||||
|
done
|
||||||
|
|
||||||
|
# 2) Cleanup: pro ID nur das neueste File auf der Box behalten
|
||||||
|
for ID in "${IDS[@]}"; do
|
||||||
|
ssh -p "${SSH_PORT}" -i "${SSH_KEY}" -o IdentitiesOnly=yes \
|
||||||
|
"${DEST_USER}@${DEST_HOST}" \
|
||||||
|
"cd '${DEST_DIR}' 2>/dev/null || exit 0;
|
||||||
|
# alle Dateien für diese ID nach Datum sortiert
|
||||||
|
FILES=\$(ls -1t vzdump-*-'${ID}'-* 2>/dev/null || true);
|
||||||
|
# wenn 0 oder 1 Datei: nix zu tun
|
||||||
|
[ -z \"\$FILES\" ] && exit 0;
|
||||||
|
# alles außer der ersten (neuesten) löschen
|
||||||
|
echo \"Bereinige alte Backups für ID ${ID}...\";
|
||||||
|
printf '%s\n' \"\$FILES\" | tail -n +2 | xargs -r rm --"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Fertig: Upload + Cleanup abgeschlossen."
|
||||||
Loading…
Add table
Add a link
Reference in a new issue