Ich weiß, dass es einen Proxmox Backup Server gibt.
Ich weiß, dass dieses Skript nicht perfekt ist, weil es das ein oder andere noch hardkodiert nutzt.
Aber mit diesem Skript und Cron kann ich an Wunschtagen ein VZdump Export machen und dabei in Abhängigkeit des freien Speicherplatzes die Anzahl der maxfiles reduzieren lassen, ohne eingreifen zu müssen.
Dazu gibts eine Übersicht des Pool-Status und die freie Speicherkapazität.
Die E-Mails kann man sich mit einem Mailfilter filtern lassen nach den üblichen verdächtigen: "brokenpipe", falls doch mal was vollläuft, oder "ACHTUNG" (hier genutzt, um z.B. einen degraded Status anzuzeigen).
Datenträger UUIDs ('blkid') werden hardkodiert hinterlegt, damit nicht an irgend einem zufällig gesteckten USB Stick gesichert wird.
Edit: Nicht vergessen, die PATH Variable in Cron korrekt zu setzen oder folgende Zeile einzufügen:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/usr/local/bin/SmartStore.sh
config.cfg
Ich weiß, dass dieses Skript nicht perfekt ist, weil es das ein oder andere noch hardkodiert nutzt.
Aber mit diesem Skript und Cron kann ich an Wunschtagen ein VZdump Export machen und dabei in Abhängigkeit des freien Speicherplatzes die Anzahl der maxfiles reduzieren lassen, ohne eingreifen zu müssen.
Dazu gibts eine Übersicht des Pool-Status und die freie Speicherkapazität.
Die E-Mails kann man sich mit einem Mailfilter filtern lassen nach den üblichen verdächtigen: "brokenpipe", falls doch mal was vollläuft, oder "ACHTUNG" (hier genutzt, um z.B. einen degraded Status anzuzeigen).
Datenträger UUIDs ('blkid') werden hardkodiert hinterlegt, damit nicht an irgend einem zufällig gesteckten USB Stick gesichert wird.
Edit: Nicht vergessen, die PATH Variable in Cron korrekt zu setzen oder folgende Zeile einzufügen:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/usr/local/bin/SmartStore.sh
Bash:
#!/bin/bash
# Import Config File
config=/usr/local/bin/config.cfg
source $config
# Check if Already Running
for pid in $(pidof -x SmartStore.sh); do
if [ $pid != $$ ]; then
echo "[$(date)] : SmartStore.sh : Process is already running with PID $pid"
exit 1
fi
done
mkdir -p ${backupPath}
umount ${backupPath}
# Get Zpool Status
zpool status
ZP=$(zpool status | grep degraded)
if [ -n "$ZP" ]; then
echo ACHTUNG: ${ZP}
fi
# Get Filesystem Usage-Percentage
FS=$(df -h | grep -E '([7-9][0-9]|100)%')
echo ${FS}
if [ -n "$FS" ]; then
echo ACHTUNG: ${FS}
fi
# Get Machine Count
pctList=$(pct list | wc -l)
if [ "$pctList" -ne "0" ]; then
pctList=$(($pctList - 1))
fi
qmList=$(qm list | wc -l)
if [ "$qmList" -ne "0" ]; then
qmList=$(($qmList - 1))
fi
NUMBER=$(($pctList + $qmList))
# Loop over UUIDs
for uuid in "${UUIDS[@]}"
do
mount UUID=$uuid ${backupPath}
mountpoint -q ${backupPath} || continue
echo Sichere UUID $uuid
echo "Backup ausgeführt am: $(date +"%Y-%m-%d-%H:%M")" on UUID $uuid >> "${logPath}"
#Get Size of last Backups
if [ "$(ls ${backupPath}/*.zst | wc -l)" -eq "0" ] || [ "${NUMBER}" -eq "0" ]; then
backupCount='0'
backupNeed='NA'
backupPuffer='0'
else
backupSize=$(du -s ${backupPath}| cut -f 1)
backupCount=$(($(ls ${backupPath}/*.zst | wc -l) / ${NUMBER}))
backupNeed=$(($backupSize / $backupCount))
backupPuffer=$(($backupNeed * 11/10))
fi
backupAvail=$(df $backupPath | awk 'NR==2{print$4}')
echo $backupCount Backups found
echo $MAXFILE Backups in Backup-Retention-Policy
echo $backupNeed Bytes estimated Backup Size
echo $backupPuffer Bytes estimated Backup Size with Puffer
echo $backupAvail Bytes estimated Backup availlable Backup Space
if [ ${backupPuffer} -ge ${backupAvail} ]; then
if [ "${MAXFILE}" -eq "1" ]; then
echo ACHTUNG: ZU WENIG SPEICHERPLATZ: Größere Backup Festplatte benötigt. Maxfile kann nicht weiter reduziert werden!
else
MAXFILE=$(($MAXFILE-1))
sed -i -e "s/^MAXFILE.*/MAXFILE=$MAXFILE/" ${config}
echo ACHTUNG: ZU WENIG SPEICHERPLATZ: Maxfile = ${MAXFILE}
fi
fi
vzdump --compress zstd --prune-backups keep-last=$MAXFILE --all --mode snapshot --dumpdir $backupPath
umount ${backupPath}
done
config.cfg
Bash:
UUIDS=(
604099bb-9017-4cbd-a98f-9a11362c38d5
)
MAXFILE=3
backupPath=/media/SmartStore
logPath=/var/log/smartstore.log
Last edited: