Backup-Lösung oder Dateisystem mit Protokollierung von "Dateiaktionen"
Ich habe derzeit eine externe Platte auf die ich alle paar Monate mal ein Backup manuell via rsync fahre.
Im Grunde sind die Daten nicht so wichtig, da alles via Nextcloud vom PC synchronisiert wird. Jedoch habe ich für den Fall gerne eine Sicherung..
Bei Rsync gibt es nun aber das Problem, dass wenn ich eine Datei umbenenne und dann eine Sicherung via rsync starte, dass die alte Datei auf der Backup-Platte gelöscht wird (da sie unter diesem Namen auf dem Quelldatenträger nicht mehr vorhanden ist) und unter dem neuen Namen wieder kopiert wird - obwohl sich an der Datei selbst nichts geändert hat.
Gibt es hier eine elegantere Lösung, welche z.B. Umbenennungen sowie das Verschieben von Ordnern erkennt und das dann auf dem Backup-Datenträger durchführt ohne die Dateien einmal zu löschen und unter neuem Namen / Pfad zu kopieren?
Bei einigen wenigen Dateien ist das nicht schlimm, jedoch habe ich letztens meine Filme-Ordner umbenannt und verschoben: Somit mussten knapp 200GB gelöscht und wieder kopiert werden, was ja mehr oder weniger überflüssige Backup-Zeit generiert...
Im Grunde sind die Daten nicht so wichtig, da alles via Nextcloud vom PC synchronisiert wird. Jedoch habe ich für den Fall gerne eine Sicherung..
Bei Rsync gibt es nun aber das Problem, dass wenn ich eine Datei umbenenne und dann eine Sicherung via rsync starte, dass die alte Datei auf der Backup-Platte gelöscht wird (da sie unter diesem Namen auf dem Quelldatenträger nicht mehr vorhanden ist) und unter dem neuen Namen wieder kopiert wird - obwohl sich an der Datei selbst nichts geändert hat.
Gibt es hier eine elegantere Lösung, welche z.B. Umbenennungen sowie das Verschieben von Ordnern erkennt und das dann auf dem Backup-Datenträger durchführt ohne die Dateien einmal zu löschen und unter neuem Namen / Pfad zu kopieren?
Bei einigen wenigen Dateien ist das nicht schlimm, jedoch habe ich letztens meine Filme-Ordner umbenannt und verschoben: Somit mussten knapp 200GB gelöscht und wieder kopiert werden, was ja mehr oder weniger überflüssige Backup-Zeit generiert...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 362238
Url: https://administrator.de/contentid/362238
Ausgedruckt am: 08.11.2024 um 09:11 Uhr
3 Kommentare
Neuester Kommentar
Hi Bear,
schau mal hier:
https://github.com/dparoli/hrsync
Da hat einer eine Lösung für das Problem.
Grüße
Edit: script hinzugefügt
schau mal hier:
https://github.com/dparoli/hrsync
Da hat einer eine Lösung für das Problem.
Grüße
Edit: script hinzugefügt
#!/usr/bin/env bash
# hrsync by Daniele Paroli
#
# simple script to backup a directory with rsync detecting moved and renamed files
#
# use it at your own risk, please see README and LICENSE files
# ------------------------------------------------------------
# Backup source and target directory
Source="${1%/}"
Target="${2%/}"
TargetHost=$3
# ------------------------------------------------------------
# Name of shadow directory
Shadow=".rsync_shadow"
# Start doing things
if [ "${Source:0:1}" != / ]
then
echo "Source path needs to be an absolute path"
exit 0
fi
if [ "${Target:0:1}" != / ]
then
echo "Target path needs to be an absolute path"
exit 0
fi
if [ -z "$2" ]
then
echo "Usage:"
echo " hrsync source target"
echo " hrsync source target remoteHost"
echo "Example:"
echo " hrsync /home/user/Documents /mnt/external/Documents"
echo " hrsync /home/user/Documents /root/Documents root@example.com"
echo "Please see the README file"
exit 0
fi
if [ ! -d "$Source/$Shadow" ]
then
# first time run: create source shadow
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"
fi
# do real syncronization
if [ -z "$3" ]
then
# local version
rsync -axXhHv --stats --no-inc-recursive --numeric-ids --delete --delete-after "$Source"/ "$Target"
else
# remote version
rsync -axXhHv --stats --no-inc-recursive --numeric-ids --delete --delete-after "$Source"/ $TargetHost:"'$Target'"
fi
status=$?
if [ $status -eq 0 ]
then
#update source shadow directory
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"
#update target shadow directory
if [ -z "$3" ]
then
# local version
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target/" "$Target/$Shadow"
else
# remote version
ssh $TargetHost "rsync -a --delete --link-dest='$Target' --exclude='/$Shadow' '$Target/' '$Target/$Shadow'"
fi
fi
exit $status