https://pastebin.com/LpdNRssj
Zeile 125
Code: Alles auswählen
rsync
Code: Alles auswählen
rsync
Ich erhebe kein Urheberrecht auf das Skript. Ob du da nu noch was dranhängst, bedarf keiner Genehmigung meinerseits.
Code: Alles auswählen
#/bin/bash
#=====================================================
# customize SRC, DSTDIR, HTMLLOGDIR, PREFIX:
#
# SRC = Hostname und Freigabename der Quelle
SRC=quellrechner::pub
# DSTDIR = Vereichnis, unter dem die Backups auf dem Ziel angelegt werden
DSTDIR=/volume1/backup
# HTMLLOGDIR = Vereichnis, unter dem die Logs auf dem Ziel angelegt werden
HTMLLOGDIR=/volume1/RSyncLog
# PREFIX: "Vorsilbe", die den täglichen Unterverzeichnisnamen vorgehängt wird
PREFIX=daily
#=====================================================
# automatische Variablen, keine Anpssung nötig
#=====================================================
# aktuelles Datum
DATE=`date +%d.%m.%y`
# Zielverzeichnis
DST=$DSTDIR/$PREFIX-$DATE
# temporäres Verzeichnis
BUS=$DSTDIR/.running-$DATE
# Logdateiname
LOG=$DSTDIR/log/log-$DATE.log
# HTML-Logdatei
HTMLLOG=$HTMLLOGDIR/log-$DATE.html
# gestriges Verzeichnis
PREV=`ls -rtd $DSTDIR/$PREFIX-* 2> /dev/null | tail -1`
#=====================================================
# anlegen der Ausgabeverzeichnisse
#=====================================================
if test ! -d $DSTDIR
then
mkdir $DSTDIR
fi
if test ! -d $DSTDIR/log
then
mkdir $DSTDIR/log
fi
if test ! -d $HTMLLOGDIR
then
mkdir $HTMLLOGDIR
fi
#=====================================================
# prüfen, ob rsync mit --link-dest laufen soll
#=====================================================
if test -z "$PREV"
then
HARDLINK=""
else
HARDLINK=--link-dest=$PREV
fi
#=====================================================
# Kopf der Logdate erzeugen
#=====================================================
CURRENTTIME=`date -u`
echo "================================================" > $LOG
echo "Started at " $CURRENTTIME >> $LOG
echo "================================================" >> $LOG
echo "Fetching from " $SRC >> $LOG
echo "Storing at " $DST >> $LOG
echo "Hardlinking from " $PREV >> $LOG
echo "================================================" >> $LOG
#=====================================================
# rsync aufrufen und bei Fehler neu starten
# die Sicherung wird hier erstmal in ein temporäres
# Verzeichnis geschrieben
#=====================================================
while ! \
rsync -av $HARDLINK $SRC $BUS >> $LOG 2>&1
do
sleep 60
done
#=====================================================
# Sicherungsverzechnis in endgültigen Namen umbenennen
# und mit touch auf die aktuelle Uhrzeit setzen
#=====================================================
mv $BUS $DST
touch $DST
#=====================================================
# Ende der Logdate erzeugen
#=====================================================
CURRENTTIME=`date -u`
echo "================================================" >> $LOG
echo "Finished at " $CURRENTTIME >> $LOG
echo "================================================" >> $LOG
#=====================================================
# Logdate HTML umsetzen, damit man sie leichter in
# einem Browser lesen kann.
#=====================================================
awk '
BEGIN {
print "<!DOCTYPE html>"
print "<html>"
print " <head>"
print " <meta charset="UTF-8">"
print " <title>TimAchine Backup Log</title>"
print " </head>"
print " <body>"
}
{
print " "$0"<br>"
}
END{
print " </body>"
print "</html>"
}' $LOG > $HTMLLOG
#=====================================================
# originale Logdate komprimieren, um Platz zu sparen
#=====================================================
gzip -9 $LOG
sync
Wenn das Skript unter dem Benutzer "axel" ausgeführt wird, ist das auch sinnvoll und nötig. Anderenfalls könnte es sein, daß du einige Dateien gar nciht schreiben darfst.
Code: Alles auswählen
--info=progress2
Ja, ich kenne im Prinzip die Optionen, mit denen man den Fortschritt ausgeben kann. Allerdings sind solche Fortschrittsausgaben in meinem Anwendungsfall nicht sinnvoll. Ich lasse das Skript per cron laufen, also im Hintergrund ohne Terminalausgabe, da interessiert mich der Erfolg erst, wenn es fertig ist oder fehlerhaft abgebrochen ist.
Code: Alles auswählen
rsync -av $HARDLINK $SRC $BUS >> $LOG 2>&1
Code: Alles auswählen
rsync -av --info=progress2 $HARDLINK $SRC $BUS >> $LOG 2>&1
Soweit ich das sehe wir dein Progress dennoch in die Datei $LOG geschrieben und erscheint somit nicht auf dem Bildschirm.AxelMD hat geschrieben:31.01.2022 11:29:03Line 79sind da irgendwelche Problem zu erwarten, bzw. weitere Anpassungen vor zu nehmen?Code: Alles auswählen
rsync -av --info=progress2 $HARDLINK $SRC $BUS >> $LOG 2>&1
Der Fortschritt wird normalerweise per stdout auf das Terminal geschrieben. Mit dem ">>" wird diese Ausgabe an die Datei $LOG angehängt.AxelMD hat geschrieben:31.01.2022 11:29:03Line 79sind da irgendwelche Problem zu erwarten,Code: Alles auswählen
rsync -av --info=progress2 $HARDLINK $SRC $BUS >> $LOG 2>&1
Ich glaube, du kannst nur entweder eine Fortschrittsanzeige ausgeben lassen oder ein Log mit Dateinamen, die kopiert wurden.AxelMD hat geschrieben:31.01.2022 12:22:46Was wäre eine gute Lösung, wenn ich den aktuellen Status gerne sehen möchte?
Code: Alles auswählen
tail -f <Logdateiname>
Hallo Juribel, zeigst Du mir deine abgespeckte Variante?juribel hat geschrieben:01.05.2024 21:54:03Meine erste Wahl für die Datensicherung ist ein Skript mit rsync. Es gibt dazu im Ubuntu-Wiki einen guten Artikel: https://wiki.ubuntuusers.de/Skripte/Backup_mit_RSYNC/. Dort wird ein Skript vorgestellt, das ich für mich übernommen, abgespeckt und angepasst habe.
Während die Erstsicherung auf eine USB-SSD zweieinhalb Stunden lief, dauern die nachfolgenden Tagessicherungen so zwischen 2 und 4 Minuten. Für jede Tagessicherung wird ein Tagesordner angelegt, der aus Benutzersicht eine komplette Sicherung darstellt, dank hard links trotzdem absolut Platz sparend.
Hauptvorteil von rsync: um die Daten zu verwenden oder zurückzuspeichern, sind ausser einem Dateimanager oder dem "cp"-Befehl keinerlei Tools erforderlich. Die Sicherung ist "datei-inkrementell": geänderte Dateien werden 1:1 kopiert, unveränderte Dateien werden gelinkt.
Das ist das typische Problem, ein One-Size-Fits-All in ganz klein, ganz übersichtlich, ganz einfach und tut-alles-was-ich-will gibt es leider nicht. Selbst das Skript, das ich hier mal ins Forum gestellt habe, scheint einige Leute zu überfordern, obwohl es mit 120 Zeilen Code und hoffentlich genug Komemntaren in meinen Augen noch einigermassen leicht verständlich ist.juribel hat geschrieben:02.05.2024 08:43:36Im Prinzip gerne, aber aus einem "abgespeckten" bash-Skript ist mittlerweile ein arg "aufgespecktes" Perl-Programm geworden
Selbst das Skript, das ich hier mal ins Forum gestellt habe, scheint einige Leute zu überfordern, obwohl es mit 120 Zeilen Code und hoffentlich genug Komemntaren in meinen Augen noch einigermassen leicht verständlich ist.
Das Skript hatte ich geschrieben, um es mit cron, also automatisch zu einer bestimmten Uhrzeit täglich laufen zu lassen. Dabei sollte nur ein bestimmtes Verzeichnis meines Heimservers auf ein Backupsystem kopiert werden.AxelMD hat geschrieben:02.05.2024 09:33:04Das Script von MSfree finde ich schon gut, nur wenn irgendwas war, stehe ich immer mit offenem Mund da und ein *ähm
So kompliziert ist rsync nun wirklich nicht, Beispiele für den Aufruf findet man unter man rsync.Mir fehlt irgendwie der sanfte Einstieg, die Range vom Wissenstand zu rsync ist hier erheblich.
Code: Alles auswählen
rsync --delete -avR "/media/juribel/intern/DATEN/" /media/juribel/Datensicherung/240502 --link-dest=../last
...
ln -nsf /media/juribel/Datensicherung/240502 /media/juribel/Datensicherung/last
Haltet Ihr es für sinnvoll sich damit weiter in Grsync einzuarbeiten und wenn es vorerst nur dazu dient als Hilfe Scripte zu erstellen?Grsync ist ein Programm mit grafischer Schnittstelle und das zum Synchronisieren von Daten sowie für die Datensicherung geeignet. Egal, ob innerhalb des Hauses oder auf entfernte Computer und Server, dieses Programm unterstützt diese Aufgabe hervorragend.
Grsync, die grafische Schnittstelle, setzt auf das Terminal-Kommando „rsync“ auf.
Warum ist rsync nach dem Erstdurchlauf so superschnell? rdiff-backup benötigt erheblich länger.juribel hat geschrieben:Während die Erstsicherung auf eine USB-SSD zweieinhalb Stunden lief, dauern die nachfolgenden Tagessicherungen so zwischen 2 und 4 Minuten. Für jede Tagessicherung wird ein Tagesordner angelegt, der aus Benutzersicht eine komplette Sicherung darstellt, dank hard links trotzdem absolut Platz sparend.