Skripte zu schreiben ist mit LLMs heutzutage gar kein Problem mehr.
Hier mal ein Auszug aus dem neuen Script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #!/bin/bash set -e # Beendet das Skript bei jedem Fehler # Variablen LOG_FILE="/var/log/backup_script.log" # Pfad zur Log-Datei POOL="Toshiba_1x_18TB_Pool/Nextcloud" # Ersetze dies mit dem Namen deines ZFS-Pools und Datasets POOL_BAK="Backup_Pool" # Name des ZFS-Pools BACKUP_POOL="Backup_Pool/Nextcloud" # Ersetze dies mit dem Namen deines Ziel-ZFS-Pools SNAPSHOT_PREFIX="Nextcloud" # Prefix für den Snapshot-Namen # Finde die höchste laufende Nummer aus den bestehenden Snapshots LAST_NUMBER=$(zfs list -t snapshot -o name | grep "$POOL@$SNAPSHOT_PREFIX" | \ sed -E "s/^.*@${SNAPSHOT_PREFIX}_([0-9]{1,3})_.*/\1/" | sort -n | tail -n 1) #([0-9]{1,3}): Dieser reguläre Ausdruck sucht nach einer Zahl, die zwischen 1 und 3 Ziffern lang ist. Das bedeutet, dass er sowohl einstellige (1), zweist> echo "$(date +"%Y-%m-%d %H:%M:%S"): Die Nummer des letzten Snapshots des Datasets $POOL ist: $LAST_NUMBER" >> $LOG_FILE if [ -z "$LAST_NUMBER" ]; then NEW_NUMBER=1 else NEW_NUMBER=$((10#$LAST_NUMBER + 1)) # Entferne führende Nullen mit 10# fi SNAPSHOT_NAME="${SNAPSHOT_PREFIX}_$(printf "%03d" "$NEW_NUMBER")_$(date +%Y%m%d%H%M%S)" # Erstelle einen Namen für den Snapshot mit laufender Nummer und Datum echo "$(date +"%Y-%m-%d %H:%M:%S"): Der nächste Snapshot heißt: $SNAPSHOT_NAME" >> $LOG_FILE # Erstelle den Snapshot zfs snapshot $POOL@$SNAPSHOT_NAME >> $LOG_FILE 2>&1 if [ $? -eq 0 ]; then echo "$(date +"%Y-%m-%d %H:%M:%S"): Snapshot erstellt: $SNAPSHOT_NAME" >> $LOG_FILE else echo "$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Dieser Snapshot konnte NICHT erstellt werden: $SNAPSHOT_NAME" >> $LOG_FILE exit 1 fi # Überprüfe, ob bereits ein letztes Backup existiert if zfs list -t snapshot | grep -q "$BACKUP_POOL" >> $LOG_FILE 2>&1; then # Wenn ja, lese den Namen des letzten Snapshots LAST_SNAPSHOT=$(zfs list -t snapshot -o name -s creation | grep "$BACKUP_POOL@$SNAPSHOT_PREFIX" | tail -n 1) # Protokolliere echo "$(date +"%Y-%m-%d %H:%M:%S"): Es gibt ein Backup. Der vollständige Pfad zum letzten Backup ist: $LAST_SNAPSHOT" >> $LOG_FILE #NAME_SNAPSHOT="$POOL${LAST_SNAPSHOT/$BACKUP_POOL/}" #echo "Name letztes backup=$NAME_SNAPSHOT" # Sende den inkrementellen Snapshot (nur die Änderungen seit dem letzten Snapshot) #zfs send -i $NAME_SNAPSHOT $POOL@$SNAPSHOT_NAME | zfs receive $BACKUP_POOL zfs send -i "$POOL${LAST_SNAPSHOT/$BACKUP_POOL/}" $POOL@$SNAPSHOT_NAME | zfs receive $BACKUP_POOL >> $LOG_FILE 2>&1 # Überprüfen des Exit-Status if [ $? -eq 0 ]; then echo "$(date +"%Y-%m-%d %H:%M:%S"): Das inkrementelle Backup war erfolgreich." >> $LOG_FILE else echo "$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Das inkrementelle Backup ist fehlgeschlagen." >> $LOG_FILE exit 1 fi else # Wenn kein letztes Backup existiert, sende den vollständigen Snapshot zfs send $POOL@$SNAPSHOT_NAME | zfs receive -F $BACKUP_POOL >> $LOG_FILE 2>&1 # Überprüfen des Exit-Status if [ $? -eq 0 ]; then echo "$(date +"%Y-%m-%d %H:%M:%S"): Es wurde ein neues vollständige Backup erfolgreich erstellt." >> $LOG_FILE else echo "$(date +"%Y-%m-%d %H:%M:%S"): ERROR: Es konnte KEIN neues vollständiges Backup erstellt werden." >> $LOG_FILE exit 1 fi fi # Protokolliere den Abschluss des Backups echo "$(date +"%Y-%m-%d %H:%M:%S"): Backup-Routine abgeschlossen. Letzter Snapshot: $LAST_SNAPSHOT, Neuer Snapshot: $SNAPSHOT_NAME" >> $LOG_FILE |
Ich habe es jetzt wiederholt aber nicht immer gehabt, dass der send/receive mit folgendem Fehler fehlschlägt:
1 2 | cannot receive incremental stream: destination Backup_Pool/Nextcloud has been modified since most recent snapshot |
Mir ist nicht bewusst, dass ich an dem Backup irgendwas geändert habe.
Kann es noch andere Ursachen für den Fehler geben?
Können Hintergrundprozesse soetwas machen, und welche kommen da am ehesten in Frage?
Wie kann ich identifizieren was für Änderungen wann erstellt wurden?
Gibt es eine einfache Möglichkeit das Problem zu beheben, und wenn ja wie.