[] rsync Backup von /home/user - Script von MSfree

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 15.01.2022 11:13:55

Einen Test worauf? Was willst du testen?
Ich möchte jetzt Übungen machen, bis jetzt ändere ich immer händisch das Datum des vorherigen Tests.

Code: Alles auswählen

# aktuelles Datum
DATE=`date +%d.%m.%y`
Vermutlich muss dieser Abschnitt durch hinzufügen von Stunde, Minute, Sekunde.

Wie sieht das aus, wenn ich jede Minute die Möglichkeit haben möchte ein Backup durchführen zu können?

https://phoenixnap.com/kb/linux-date-command

Code: Alles auswählen

# aktuelles Datum
DATE=`date +%d.%m.%y,%H,%M`
Füge ich ",%H,%M`" hinzu, kann ich jede Minute ein Backup machen.


MSfree
Ich würde auf der USB-Platte zwei Verzeichniss anlegen:

Code: Alles auswählen

mkdir /media/Benutzername/UUID/backup

und

Code: Alles auswählen

mkdir /media/Benutzername/UUID/Logs
Warum hat MSfree mir diese Hinweise gegeben, das Script scheint die Verzeichnisss automatisch anzulegen?
Oder irre ich, weil bei mir noch irgendwas im Cache oder sonstwo gespeichert war?

Warum ist rsync so superschnell, wenn ich das rsync-msfree.sh ausführe?
Die ca. 8 GB sind in fast Realtime auf der usbhdd1?
Die usbhdd1 scheint sich auch nicht zu füllen, es bleibt bei 2% Belegung, bei jetzt 6 Datensicherungen.
Wie macht rsync das?
Zuletzt geändert von AxelMD am 15.01.2022 12:02:26, insgesamt 2-mal geändert.

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von Tintom » 15.01.2022 11:52:21

AxelMD hat geschrieben: ↑ zum Beitrag ↑
15.01.2022 11:13:55
Warum ist rsync so superschnell, wenn ich das rsync-msfree.sh ausführe?
Die ca. 8 GB sind in fast Realtime auf der usbhh1?
Ganz einfach - es werden keine 8 GB an Daten übertragen, sondern nur die Daten, die sich seit dem letzten Aufruf verändert haben (genauer: die sich im Vergleich zu --link-dest verändert haben). Führst du das Skript nun jede Sekunde aus ändern sich nur wenig Daten, dementsprechend schnell läuft der Befehl durch.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 15.01.2022 11:58:27

Nicht ganz richtig, jede 1 Minute kann ich das Script ausführen.

Code: Alles auswählen

# aktuelles Datum
DATE=`date +%d.%m.%y,%H,%M`
Es fehlt "%S" – Second (00-60).

Warum kann ich z. B. die ersten 3 Backup's löschen und die Daten sind trotzdem nicht verloren?
Festplattenbelegung bleibt bei 2%.

Welche Strategie muss ich angehen, um die usbhdd1 Belegung möglichst klein zu halten?
Löschen bringt ja irgendwie nichts.

Später möchte ich, sagen wir 10 Backupsvorhalten, bei Nr. 11 wird Nr. 1 gelöscht und
Nr. 11 wird namentlich Nr. 10 (Daten von Nr. 11).
Zuletzt geändert von AxelMD am 15.01.2022 12:07:46, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 15.01.2022 12:07:23

Tintom hat geschrieben: ↑ zum Beitrag ↑
15.01.2022 10:22:10
Vermutlich liegt's daran:
# gestriges Verzeichnis
PREV=`ls -rtd $DSTDIR/$PREFIX-* | tail -1`

Sofern du das Skript zum ersten mal auf einem neuen (formatierten !) Medium ausführst, gibt es kein Verzeichnis vom Vortag. Das führt dann zu dem beschriebenen Fehler.
Ja, das ist wohl ein Fehler an dem Skript, daß beim ersten Aufruf kein Urbackup angelegt wird. Das könnte man natürlich boch einbauen, ein zweiter Aufruf tut es aber auch. Das Skript ist ja auch schon ein paar Jahre alt und ganz genau erinnere ich mich auch nicht mehr an die Entstehung. Vermutlich habe ich damals bei mir das Urbackup per cp oder rsync über die Kommandozeile angelegt, so daß bei mir immer ein Urbackup vorhanden war und dieser Mißstand bei mir nie aufgetreten ist.
AxelMD hat geschrieben: ↑ zum Beitrag ↑
15.01.2022 11:13:55
Ich möchte jetzt Übungen machen, bis jetzt ändere ich immer händisch das Datum des vorherigen Tests.

Code: Alles auswählen

# aktuelles Datum
DATE=`date +%d.%m.%y`
Vermutlich muss dieser Abschnitt durch hinzufügen von Stunde, Minute, Sekunde.
Ja, das könntest du tun.

Code: Alles auswählen

man date
beschreibt die Datumsformatierung. Mit

Code: Alles auswählen

DATE=`date +%d.%m.%y_%k:%M`
würde am Datum noch die Uhrzeit als _hh:mm angehängt. Für Sekunden könnte man noch %S anhängen.

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von Tintom » 15.01.2022 12:08:12

@Axel: Es ist im Allgemeinen sehr schwierig auf deine Beiträge zu antworten, wenn du diese minütlich editierst :wink:

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 15.01.2022 12:10:41

Stimmt wohl, wenn mir etwas einfällt, ich es gelöst habe antworte ich mir selbst.

@MSfree
Ja, das ist wohl ein Fehler an dem Skript, daß beim ersten Aufruf kein Urbackup angelegt wird.
Evtl. ein Hinweis im Script für die erste Ausführung, die 2 mal erfolgen muss.

Welche Vorteile hat rdiff-backup, irgendwie empfinde ich es jetzt, mit dem MSfree Script als überflüssig? Es ist erheblich langsamer in meinem Fall, an Daten von vor x Tagen ist es erheblich schwieriger ran zu kommen.

Ist rdiff-backup oder rsync fehleranfälliger?

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 15.01.2022 12:26:04

AxelMD hat geschrieben: ↑ zum Beitrag ↑
15.01.2022 11:58:27
Später möchte ich, sagen wir 10 Backupsvorhalten, bei Nr. 11 wird Nr. 1 gelöscht und Nr. 11 wird namentlich Nr. 10 (Daten von Nr. 11).
Man könnte natürlich die alten Backups löschen, aber warum?

Die per --link-dest angelegten Backups brauchen kaum Platz. Wenn du deinen momentanen Datenbestand von ca. 8GB damit täglich sicherst, werden nach 1000 Backups auf keinen Fall 8TiB Platz benötigt. Meiner Schätzung nach werden deutlich weniger als 500GB dafür benötigt.

Ich würde erstmal nichts löschen und die Platzentwicklung beobachten. Bei mir belegen zum Beispiel die letzten 885 Tagesbackups insgesamt rund 18TB, inklusive des Urbackups von etwa 2TB Größe. Täglich kommen bei mir also rund 18GB dazu, also weniger als 1% des Bestands.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 15.01.2022 12:30:15

Du hast ja recht, löschen ist nicht zwingend erforderlich, das war mir zuvor nicht klar.
Welche Vorteile hat rdiff-backup, irgendwie empfinde ich es jetzt, mit dem MSfree Script als überflüssig? Es ist erheblich langsamer in meinem Fall, an Daten von vor x Tagen ist es erheblich schwieriger ran zu kommen.

Ist rdiff-backup oder rsync fehleranfälliger?

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 15.01.2022 12:40:28

AxelMD hat geschrieben: ↑ zum Beitrag ↑
15.01.2022 12:10:41
Evtl. ein Hinweis im Script für die erste Ausführung, die 2 mal erfolgen muss.
Ich habe ja schon geschrieben, daß man das auch sauber lösen kann, ohne das Skript zweimal aufzurufen. Man könnte z.B. testen, ob $PREV leer ist und dann rsync ohne --link-dest aufrufen.
Welche Vorteile hat rdiff-backup
Es hat nicht den Fehler mit dem Erstbackup. Ansonsten tut es das gleiche wie mein Skript.
Ist rdiff-backup oder rsync fehleranfälliger?
Das macht kaum einen Unterschied. Fehleranfällig sind eigentlich beide Programme nicht. Gegen Stromausfälle, Netzwerkabbrüche oder Wackelkontakte im USB-Kabel sind beide gleich machtlos.

Ich begegne dem, in dem ich rsync in der while-Schleife laufen lasse, so daß ein Abbruch zum Wiederaufsetzen des letzten Vorgangs führt. Gegen Stromausfall oder gammelige USB-Kabel nützt das aber auch nicht.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 15.01.2022 12:44:05

Es hat nicht den Fehler mit dem Erstbackup. Ansonsten tut es das gleiche wie mein Skript.
Wieso ist deine Lösung so viel schneller?

Vorteil ist bei deiner Scriptlösung ist, ich kann sofort auf einen alten Bestand zurückgreifen.
Bei rdiff-backup muss ich in der Konsole basteln, von einem zum anderen mal Gebrauch vergesse ich immer wieder alles.

Würdest Du das Script, den Fehler beseitigen "offiziell MSfree" ändern und hier, da wo das alte liegt einstellen?
Zuletzt geändert von AxelMD am 15.01.2022 13:18:50, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 15.01.2022 13:11:09

AxelMD hat geschrieben: ↑ zum Beitrag ↑
15.01.2022 12:44:05
Wieso ist deine Lösung so viel schneller?
Das kann ich dir nicht beantworten. Ich habe rdiff-backup nie grundlegend getestet, daß mir da etwas aufgefallen wäre. Für mich hat rsync einfach so viele Vorteil, daß ich dabei hängen geblieben bin. Backups auf Dateisystemebene sind für mich ein unschlagbares Argument. Ich wollte nichts, das Backups in (proprietären) Archivdateien (z.B. ZIP) ablegt, wer weiß, ob ich in Zukunft ZIP noch lesen darf/kann. Ich habe auch Dateien zu sichern, die größer als 4GiB sind, was einige Backupprogramme nicht können...
Vorteil ist bei deiner Scriptlösung ist, ich kann sofort auf eine alten Bestand zurückgreifen.
Das habe ich mir bei Apples TimeMachine abgeschaut. :wink:
Würdest Du das Script, den Fehler beseitigen "offiziell MSfree" ändern und hier, da wo das alte liegt einstellen?
Ich habe keine Berechtigung, an den Dateien, die unter NoPaste eingelagert sind, Änderungen vorzunehmen. Der Zustand wird also bis in alle Ewigkeit hier im Forum stehen bleiben. Ich kann aber eine geänderte Version erneut nach NoPaste hochladen. Gib mir aber ein wenig Zeit, zumidest ein paar grobe Tests sollte ich da schon machen.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 15.01.2022 13:19:54

Super, danke, evtl. das Releasedate noch im Script aufnehmen.

Macht die Änderung wirklich Sinn, verkompliziert es, wird das Script nicht zu ausgefeilt, zu kompliziert?

rdiff-backup sichert auch auf Dateiebene.

Code: Alles auswählen

rdiff-backup /home/axel/ /media/axel/usbhdd1/axel/
Das dauert eeeeeeeeeeeeeeewiiiiiiiiiiiiiggggggggggg.


bis dahin -------------------> viewtopic.php?t=183277

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: [in Wartestellung] rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 15.01.2022 21:45:59

Das Problem mit dem Urbackup sollte behoben sein.

Code: Alles auswählen

#/bin/bash
#=====================================================
# customize SRC, DSTDIR, PREFIX:
#
SRC=hostname::share
DSTDIR=/volume1/backup
HTMLLOGDIR=/volume1/RSyncLog
PREFIX=daily
#=====================================================
DATE=`date +%d.%m.%y`
DST=$DSTDIR/$PREFIX-$DATE
BUS=$DSTDIR/.running-$DATE
LOG=$DSTDIR/log/log-$DATE.log
HTMLLOG=$HTMLLOGDIR/log-$DATE.html
PREV=`ls -rtd $DSTDIR/$PREFIX-* 2> /dev/null | tail -1`
#=====================================================
if test -z "$PREV"
then
  HARDLINK=""
else
  HARDLINK=--link-dest=$PREV
fi

if test ! -d $DSTDIR
then
  mkdir $DSTDIR
fi

if test ! -d $DSTDIR/log
then
  mkdir $DSTDIR/log
fi

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

while ! \
  rsync -av $HARDLINK $SRC $BUS >> $LOG  2>&1
do
  sleep 60
done

mv $BUS $DST
touch $DST

CURRENTTIME=`date -u`
echo "================================================" >> $LOG
echo "Finished at      " $CURRENTTIME                   >> $LOG
echo "================================================" >> $LOG

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

gzip -9 $LOG

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: [new test] rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 16.01.2022 09:39:55

*wow, einige Tage sind bei dir schnell.
Danke

Erster Test bei mir leider mit Fehler

Code: Alles auswählen

sh ./rsync-msfree-2.sh
./rsync-msfree-2.sh: 77: Nach: not found
Warum hast Du das erste Script nicht komplett als Basis genommen?
Du hast jetzt andere Pfadbezeichnungen (RSyncLog) gewählt, warum das?

Code: Alles auswählen

sh ./rsync-msfree-2.sh
mv: das Verschieben von '/media/axel/usbhdd1/backup/.running-16.01.22' nach '/media/axel/usbhdd1/backup/daily-16.01.22/.running-16.01.22' ist nicht möglich: Das Verzeichnis ist nicht leer
./rsync-msfree-2.sh: 57: cannot create /media/axel/usbhdd1/RSyncLog/log-16.01.22.html: Directory nonexistent
gzip: /media/axel/usbhdd1/backup/log/log-16.01.22.log.gz already exists; do you wish to overwrite (y or n)? y
./rsync-msfree-2.sh: 77: Nach: not found
Meine Anpassungen vom neuen Script:

Code: Alles auswählen

#/bin/bash
#=====================================================
# customize SRC, DSTDIR, PREFIX:
#
SRC=/home/axel
DSTDIR=/media/axel/usbhdd1/backup
HTMLLOGDIR=/media/axel/usbhdd1/RSyncLog
PREFIX=daily
#=====================================================
Was ist da falsch?
Wie müßte ich das erste funkionierende Script anpassen, damit die Neuheiten berücksichtigt werden?
Ein Anzeige, was gerade bearbeitet wird bekomme ich nicht, das trotz dem rsnyc -av Schalter.
v steht für verbose.

Das erste Script funktioniert.

Mache ich etwas falsch oder liegt es am neuen Script?
Mit dem neuen Script bin ich überfordert, ich finde nicht mal die Änderungen.
Die Kommentare, wie beim ersten Script fehlen mir auch.

Frage:

Code: Alles auswählen

rsync -av --link-dest
Was genau macht die die Option "--link-dest"?
--link-dest=DIR hardlink to files in DIR when unchanged
rsync man, das sagt mir aber nichts.

@MSfree
Hattest Du damals das Script selbst entwickelt oder woher hattest Du die Basis?
Gibt es irgend ein Standardscript für rsync und ein Vorhaben?
Eine was mehr genutzt wird, mehr Anwender, die sich damit auskennen.
So wie es scheint hast nur Du davon einen Plan.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: [new test] rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 16.01.2022 14:14:34

AxelMD hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 09:39:55
Warum hast Du das erste Script nicht komplett als Basis genommen?
Ich habe das Skript verwendet, das ich bei mir in meiner Versionsverwaltung habe. Das Skript aus NoPaste ist aber funktionell identisch, da sind nur ein paar zusätzlich Kommentare drin.
Du hast jetzt andere Pfadbezeichnungen (RSyncLog) gewählt, warum das?
Wenn du mal auf Zeile 12 von NoPaste-Eintrag41572 schaust und das mit dem von mir oben vergleichst, wirst du sehen, daß die Zeilen identisch sind.

Die Variablen SRC, DSTDIR, HTMLLOGDIR und PREFIX mußt du aber auf deine Bedürfnisse anpassen.

Code: Alles auswählen

mv: das Verschieben von '/media/axel/usbhdd1/backup/.running-16.01.22' nach '/media/axel/usbhdd1/backup/daily-16.01.22/.running-16.01.22' ist nicht möglich: Das Verzeichnis ist nicht leer
Da ist vermutlich beim Copy'n'Paste des Skripts aus dem Forum in deinen Editor ein Unfall passiert.

Code: Alles auswählen

./rsync-msfree-2.sh: 57: cannot create /media/axel/usbhdd1/RSyncLog/log-16.01.22.html: Directory nonexistent
Das Anlegen des Verzeichnisses für die HTML-Logs fehlt noch in dem Skript.

Code: Alles auswählen

gzip: /media/axel/usbhdd1/backup/log/log-16.01.22.log.gz already exists; do you wish to overwrite (y or n)? y
Eigentlich war das Skript dafür gedacht, einmal am Tag zu laufen. Die Datumsvariable, aus der das Backupverzeichnis und die Namen der beiden Logdateien abgleitet werden, ist nicht eindeutig, wenn du das Skript mehrfach am Tag aufrufst. Du kannst der Variable DATE auch ein Datum mit Uhrzeit zuweisen, so daß das Skript auch sekündlich aufgelöste Namen erzeugt. Dann gibt es diese Doppeldeutigkeit nicht mehr.
Was genau macht die die Option "--link-dest"?
Damit wird eine "Kopie" des letzten Backups erzeugt, indem dort alle Dateien der letzten Backups als Hardlinks ins neue Backupverzeichnis übernommen werden. Danach läuft rsync ganz normal auf der "Kopie". Kopie ist hier deshalb in Anführungsstrichen, weil es sich nich um byteweise Dateikopien handelt sondern nur um Dateinamen im Dateibaum, dessen physikalischer Inhalt auf eine bereits vorhandene Datei zeigt.
Hattest Du damals das Script selbst entwickelt oder woher hattest Du die Basis?
Das habe ich selbst geschrieben. Ursprünglich tat das auf einem kleinen Synology NAS seinen Dienst. Die Synologies laufen unter Linux und bringen rsync mit.
Gibt es irgend ein Standardscript für rsync und ein Vorhaben?
rsync hat eine große Menge von Parametern, um so ziemlich alles abzudecken, was man sich als Backup oder Datensynchronisation wünscht. Z.B. kann rsync von Platte zu Platte oder über das Netzwerk erfolgen. Über das Netzwerk kann man das rsync-Protokoll nehmen oder es über SSH tunneln. Folglich kann es so etwas wie einen Standardaufruf gar nicht geben. Natürlich kann man ein Skript schreiben, das das alles unterstützt, es würde aber entsprechend komliziert sein und genauso viele Parameter übernehmen müssen wie rsync selbst.

Ich habe mal die Kommentare aus dem ursprünglichen Skript eingebaut und das Erzeugen des HTMLLogDirs hinzugefügt.
NoPaste-Eintrag40928

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 16.01.2022 14:18:22

bitten Löschen, ein Versehen, danke
Zuletzt geändert von AxelMD am 16.01.2022 14:24:50, insgesamt 1-mal geändert.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 16.01.2022 14:20:09

Oh super, danke

Mein heimlicher Favorit ist schon die Lösung

"rsync Backup von /home/user - Script von MSfree".

Flexibel, schnell und mit Basisprogramm, nur etwas schlau sollte man sein.

rsync, die Funktionalitäten sind fast unendlich und in jedem Linuxsystem enthalten.

Das soll sich AxelMD auch merken:

MSfree
Mein Backupsystem holt sich die Daten vom Fileserver. Das hat den wesentlichen Vorteil, daß der Backuprechner keine Netzwerkfreigaben nach aussen anbieten muß und Schadsoftware es wesentlich schwerer hat, von aussen den Backuprechner zu infizieren.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 16.01.2022 14:44:55

Fehlermeldung

Code: Alles auswählen

sh ./rsync-msfree-3.sh
ls: Zugriff auf '/media/axel/usbhdd1/backup/daily-*' nicht möglich: Datei oder Verzeichnis nicht gefunden
rsync-msfree-3.sh

Code: Alles auswählen

#/bin/bash
#=====================================================
# anpassen:
#=====================================================
#  SRC = Hostname und Freigabename der Quelle
SRC=/home/axel
 
#  DSTDIR = Vereichnis, unter dem die Backups auf dem Ziel angelegt werden
DSTDIR=/media/axel/usbhdd1/backup
 
#  HTMLLOGDIR = Vereichnis, unter dem die Logs auf dem Ziel angelegt werden
HTMLLOGDIR=/media/axel/usbhdd1/Logs

#  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-* | tail -1`
 
#=====================================================
# anlegen der Ausgabeverzeichnisse
#=====================================================
if test ! -d $DSTDIR
then
mkdir $DSTDIR
fi
 
if test ! -d $DSTDIR/log
then
mkdir $DSTDIR/log
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 --link-dest=$PREV $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
 
Vor der Scriptausführung hatte ich alles auf usbhdd1 gelöscht.
Die Ordner "backup" und "Logs" habe ich danach manuell auf usbhdd1 angelegt.

Wie bekomme ich debianforum.de pastebin die Dateien sauber auf meinen PC?
Bis jetzt mache ich das mit copy und paste.


Schade, was läuft da falsch?

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 16.01.2022 15:12:20

Das Script funktioniert einwandfrei:

rsync-mini.sh

Code: Alles auswählen

#!/bin/sh

quelle=/home/axel/
ziel=/media/axel/usbhdd1/
heute=$(date +%Y-%m-%d)

rsync -avR --delete "${quelle}"  "${ziel}${heute}/" --link-dest="${ziel}last/"
ln -nsf "${ziel}${heute}" "${ziel}last"

exit 0 
 

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 16.01.2022 17:25:43

AxelMD hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 15:12:20
Das Script funktioniert einwandfrei:
Es funktioniert, aber nicht so, wie du erwartest. Denn das --link-dest erfordert ein bestehendes, vorheriges Backupverzeichnis. Da bei deinem Skript das Verzeichnis ${ziel}last/ nie existiert, passiert hier einfach keine Verlinkung sondern nur eine Komplettsicherung.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 16.01.2022 17:42:06

AxelMD hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 14:44:55
Fehlermeldung

Code: Alles auswählen

sh ./rsync-msfree-3.sh
ls: Zugriff auf '/media/axel/usbhdd1/backup/daily-*' nicht möglich: Datei oder Verzeichnis nicht gefunden
Wie löse ich das Problem bei deinem Script?
Irgendwie scheine ich bei deinem Script zu "anfängerich".
passiert hier einfach keine Verlinkung sondern nur eine Komplettsicherung.
Das ist natürlich nicht so schön, bei dir gefällt mir das besser, schneller und platzsparender.

Dein Script scheint aber auch ausgefeilter zu sein, hier kennt sich wohl niemand damit so richtig aus.
Es sieht sooooooo einfach aus.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 16.01.2022 17:54:41

AxelMD hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 17:42:06

Code: Alles auswählen

sh ./rsync-msfree-3.sh
ls: Zugriff auf '/media/axel/usbhdd1/backup/daily-*' nicht möglich: Datei oder Verzeichnis nicht gefunden
Wie löse ich das Problem bei deinem Script?
Ich dachte, das hätte ich mit dem lezten Upload behoben, aber irgendwie hat sich da doch noch ein Copy'n'Paste-Fehler eingeschlichen.

Zur Erklärung:
Der ls-Aufruf auf Zeile 31 bringt eine Fehlermeldung, wenn noch kein altes Backup existiert. Die Meldung ist allerdings bedeutungslos, weil die Variable PREV dann trotzdem leer ist. Auf Zeile 54 wird geprüft of PREV leer ist und entscheidet damit ob das Backup mit oder ohne --link-dest gemacht werden soll.

In der Variante NoPaste-Eintrag41573 wird die Fehlermeldung unterdrückt. Beide Versionen laufen aber bis auf die Mledung korrekt durch. Sobald mal ein Backup vom Vortag vorhanden ist, ist auch PREV nicht mehr leer und ls gibt keine Meldung mehr aus.

P.S. ja, den Text von NoPaste kann man wohl nicht runterladen, das muß man per Copy'n'Paste machen.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 16.01.2022 18:03:49

Darf ich das Script bei https://pastebin.com/ hochladen?
aber irgendwie hat sich da doch noch ein Copy'n'Paste-Fehler eingeschlichen.
Bei dir oder bei mir?

Hat noch keiner dich nach deinem Script befragt?

Bei jetzt 814 Aufrufen dieses Thread's scheint Interesse vorhanden zu sein.
Das Script ist auch voll cool, eine Perle sozusagen.
Feinschliff und Dokumentation ist noch erforderlich.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von MSfree » 16.01.2022 19:32:26

AxelMD hat geschrieben: ↑ zum Beitrag ↑
16.01.2022 18:03:49
Darf ich das Script bei https://pastebin.com/ hochladen?
Ich habe jedenfalls keine Bedenken. Das Skript ist ja ohnehin schon öffentlich.
Bei dir oder bei mir?
Das war mein Fehler.
Hat noch keiner dich nach deinem Script befragt?
Bis jetzt jedenfalls nicht.
Bei jetzt 814 Aufrufen dieses Thread's scheint Interesse vorhanden zu sein.
Solche Zahlen sagen nicht viel aus. Inzwischen sind es ja sogar 839, bei 37 Beiträgen. Einfach gerechnet heißt das, daß hier 839/37 also 21-22 Leute mitlesen, wovon mindestens 15 Stammnutzer dieses Forums sind.

AxelMD
Beiträge: 1378
Registriert: 15.03.2009 08:02:11

Re: [] rsync Backup von /home/user - Script von MSfree

Beitrag von AxelMD » 17.01.2022 08:53:15

msfree-rsync-4.sh 41573
https://pastebin.com/LpdNRssj

Fehlermeldung:

Code: Alles auswählen

sh ./rsync-4.sh
: not foundh: 7: 
: not foundh: 10: 
: not foundh: 13: 
: not foundh: 16: 
: not foundh: 32: 
./rsync-4.sh: 125: Syntax error: end of file unexpected (expecting "do")
Was ist da falsch?
Warum werden jetzt keine Leerzeilen akzeptiert?
Liegt das an pastebin?
Den Download habe mit "download" bei pastebin getätigt und "txt" beim Speichern gegen "sh" ausgetauscht.

Warum haben die Scripte von MSfree keinen "sync" Befehl enthalten damit im Schreibpuffer des Linux-Kernels befindliche Daten auf den Datenträger geschrieben werden?

Mein Editor für die *.sh ist Kate.

Für AxelMD zum merken:
Mit F11 werden bei Kate die Zeilenummern angezeigt.

Jetzt habe ich copy - paste erneut rsync-4.sh angelegt, das Script funktioniert jetzt.

Das für mich angepaßte Script (von https://pastebin.com/LpdNRssj) sieht wie folgt aus:

Code: Alles auswählen

#/bin/bash
#=====================================================
# customize SRC, DSTDIR, HTMLLOGDIR, PREFIX:
#
#  SRC = Hostname und Freigabename der Quelle
SRC=/home/axel
 
#  DSTDIR = Vereichnis, unter dem die Backups auf dem Ziel angelegt werden
DSTDIR=/media/axel/usbhdd1/backup
 
#  HTMLLOGDIR = Vereichnis, unter dem die Logs auf dem Ziel angelegt werden
HTMLLOGDIR=/media/axel/usbhdd1/Logs
 
#  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 
Wie ist ein empfehlenswertes Vorgehen für die Zukunft?
Gibt es eine Pastedienst wo ich die Datei downloaden und gleich mit arbeiten kann?

Warum haben wir, habe ich 2 mal log?
/media/axel/usbhdd1/backup/log/
und
/media/zxz/usbhdd1/Logs/

Welche Überlegung steckt dahinter?

Antworten