[Projekt] rsync -Alternative dateibasierte Datensicherung

Status
Für weitere Antworten geschlossen.

freddiek

Benutzer
Mitglied seit
12. Mrz 2013
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hi Tommes

ein schönes Stück Arbeit :)

Ich habe jedoch beim Ausführen von deinem Script kleine Problemchen und ich weiß nicht was ich falsch mache?
Wenn ich versuche dein Script auszuführen, bekomme ich ständig den Fehler - line 92: syntax error: unexpected "(" (scheint syntaxproblem mit der Klammer zu geben).
So wie ich die Diskussion verfolgt habe, funktioniert das Script bei allen anderen, sprich bei mir ist irgendetwas faul :)

Meine Vorgehensweise:
Ich passe die enstprechenden Variablen (Quelle, Ziel und E-Mail) im Script an und kopiere es anschließend per SSH auf eine USB Platte, die an der DS angeschlossen ist.
Danach starte ich das Script (vorerst) manuell auf der Konsole mit sh ./rsync.sh. und als Ausgabe bekomme ich den oben genannten Fehler.

Ich habe bei mir auf der DS213+ die Firmware 5.2.
Gibt es bestimmte Systemvoraussetzungen (sprich Pakete) die installiert werden müssen, damit alles glatt läuft?

Schöne Grüße
freddiek
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Starte bitte per sh rsync.sh oder per ./rsync.sh. Wenns dann immer noch nicht geht, poste bitte das Skript, dann finden wir den Fehler vielleicht.
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.160
Punkte für Reaktionen
407
Punkte
393
Hallo,
womit hast Du das Script bearbeitet? Unter Windows notepad++ verwenden und unbedingt Linux Zeilenumbrüche einstellen.

Gruß Götz
 

freddiek

Benutzer
Mitglied seit
12. Mrz 2013
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hi

danke für die schnellen Antworten :)

@dil88
Beide Arten das Scipt auszuführen enden wie bereits beschrieben.
Beim ersten Ausführen hatte ich den Fehler bereits in der Zeile mit den SOURCES, dort habe ich die Klammern durch Anführungszeichen ersetzt (SOURCES="/volume1/DS_time_machine")
Es handelt sich bei mir nur um eine einzige Quelle.

@goetz
Ich arbeite am Mac (Tincta) weswegen es eigentlich keine Probleme geben soll.
Bei den letzten Versuchen habe ich allerdings das Script direkt von hier kopiert und mit dem Text-Editor auf der DS bearbeitet.
Somit sollte das als Fehlerquelle entfallen.

Hier ist mein Script:
(musste ein txt hinterdranhängen, sonst wird es nicht hochgeladen)
 

Anhänge

  • rsync.sh.txt
    6,9 KB · Aufrufe: 19

petehild

Benutzer
Mitglied seit
17. Mrz 2011
Beiträge
443
Punkte für Reaktionen
0
Punkte
22
Von mir auch ein Dank an Tommes :)
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.377
Punkte
234
… Beim ersten Ausführen hatte ich den Fehler bereits in der Zeile mit den SOURCES, dort habe ich die Klammern durch Anführungszeichen ersetzt (SOURCES="/volume1/DS_time_machine") …

Die Anführungszeichen sollten auch den Fehler eliminieren. In den Pfaden sind ja Rauten enthalten (#recycle) wodurch der Rest der Zeile zum Kommentar erklärt wird und dadurch die öffnende Klammer nicht geschlossen wird.

Zeile 92 von:
Rich (BBCode):
…
RSYNCCONF=(--stats --log-file-format="%i %o %f" --exclude=/@eaDir/*** --exclude=/#recycle/*** --exclude=/#snapshot/*** --exclude=/.DS_Store/*** --delete --backup --backup-dir=@Recycle/`$DATE`)

zu:
Rich (BBCode):
…
RSYNCCONF="--stats --log-file-format="%i %o %f" --exclude=/@eaDir/*** --exclude=/#recycle/*** --exclude=/#snapshot/*** --exclude=/.DS_Store/*** --delete --backup --backup-dir=@Recycle/`$DATE`"
…
 
Zuletzt bearbeitet:

mehlbox

Benutzer
Mitglied seit
17. Nov 2015
Beiträge
119
Punkte für Reaktionen
0
Punkte
16
Auch von mir erstmal ein dickes Dankeschön. Ich werd mir das mal zu Gemüte führen und schauen ob und inwieweit ich die Versionierung einbauen werde. In erster Linie geht es bei diesem Projekt ja um die Möglichkeit, dateibasierte Sicherungen unter DSM 6 anzulegen, daher würde ich eine Versionierung nur optional zur Auswahl einbinden wollen.

Mir stellt sich aber immer noch die Frage, wie und womit man so ein versioniertes Backup, welches mit Hardlinks arbeitet wiederherstellen kann. Das mag unter Linux vielleicht recht einfach umzusetzen sein (auch wenn ich nicht weiß wie), aber unter Windows scheind mir das dann bestimmt nicht mehr so einfach zu sein. Und dieses Projekt soll ja in erster Linie dazu dienen, das man auf seine Daten immer und überall, also Systemunabhängig zugreifen kann. Vielleicht kannst du mir hierzu noch etwas an die Hand geben...

Tommes

Ein Hardlink ist ein Hardlink weil er sich von einer normalen Datei nicht unterscheidet. Er verweißt auf den Speicherbereich auf der Festplatte, den die Datei einnimmt. Vom Prinzip her ist jede einfache Datei auch ein Hardlink.
Rsync erstellt also zusätzliche Hardlinks zu jeder einzelnen Dateien. Die Verzeichnisstruktur nimmt jedes mal erneut Speicherplatz ein.
Das sieht dann wie folgt aus:
Rich (BBCode):
du -sh current 2016-02-0*

571G    current
11G     2016-02-01
684M    2016-02-02
220M    2016-02-03
333M    2016-02-04
472M    2016-02-05
163M    2016-02-06
35M     2016-02-07
26M     2016-02-08
Es ist also ein dateibasiertes Backup mit der Voraussetzung dass man ein Unix System benötigt, dieses lesen zu können. Es gibt mittlerweile auch Programme für Windows die das lesen von ext3 / ext4 Dateisysteme ermöglichen. Ich persönlich traue dem aber nicht. Muss jeder für sich entscheiden.

Die Frage ist dann wohl, was für den einzelnen "Systemunabhängig" bedeutet.
Fakt ist.. Für das zurückspielen ist ein Unix System erforderlich. Im Notfall auch VirtualBox + beliebiges Linux mit Windows als Hostsystem. Ich persönlich bin mit VirtualBox "Systemunabhängig"

In der Praxis sieht es aber so aus dass man sein ganzes Backup gar nicht auf dem Windows Computer unterbringen kann. Man wird das Backup wohl auf ein frisches NAS System wieder aufspielen. Und die können sowieso alle ext 3 / ext4 über USB

Sollte bei mir der worst case eintreten dann hole ich mein Raspberry Pi aus meinem Schreibtisch. Einmal frisches Rasbian installieren, Backup Fertplatte dran und ich bin in 10 Minuten wieder "Online". So habe ich Zugriff auf das nötigste bis eine neue NAS oder neue Platten für die NAS organisiert sind. Wer mit den gängigen Linux Systemen unterwegs ist kann sich sicher sein dass diese ext3 / ext4 unterstützten. Und Hardlinks sind Bestandteil des Dateisystems, werden folglich auch unterstützt.
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Sehe ich genauso. Bei Time Backup ist es derzeit ja genauso. Und wenn man das versionierte rsync-Backup mit einem nicht versionierten auf eine NTFS-Platte verbindet, dann kommt man an die Daten ganz schnell und problemlos unter Windows heran und hat nur dann etwas mehr Aufwand, wenn man an eine ältere Version herankommen muss, die im aktuellen Backup nicht mehr drin ist.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Da ich von Natur aus ein eingefleischter Windowsnutzer bin muß das erstellte Backup auch ohne wenn und aber unter Windows lesbar sein. Aus diesen Grunde sehe ich die Versionierung für dieses Projekt hier als nicht zielführend an und ich würde es selber wohl auch nicht nutzen.

Natürlich darf hier jeder der Lust dazu hat auf Grundlage des hier vorgestellten Scriptes eine Versionierung einbauen und dieses hier oder in einem eigenen Thread veröffentlichen. Mein Grundgedanke war jedoch ein anderer als ich diesen Thread ins Leben gerufen habe, weshalb ich das mit der Versionierung auch nicht einbauen werde.

Trotzdem dank ich dir für deine Scripte und deinen Ausführungen, welche wirklich sehr informativ und nützlich sind.

Tommes
 

freddiek

Benutzer
Mitglied seit
12. Mrz 2013
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hallo

so langsam ist es mir peinlich zu fragen.
Scheinbar bin ich hier der einzige, der sich so doof anstellt :p

@geimist
Danke für den Hinweis bezüglich der #.
Habe die entsprechende Zeile angepasst und beim erneuten Ausführen des Scriptes kommen folgende Fehlermeldungen:

Rich (BBCode):
rsync.sh: line 92: %o: not found
BusyBox v1.16.1 (2015-11-12 18:01:35 CST) multi-call binary.

Usage: readlink FILE

Display the value of a symlink

rsync.sh: line 99: /bin/find: not found
rsync.sh: line 115: syntax error: bad substitution

Dabei habe ich an den entsprehenden Stellen keine Änderungen am Script vorgenommen.
Hat jemand vielleicht eine Idee, woran ich jetzt drehen könnte damit es funktioniert.

Schöne Grüße
freddiek
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.377
Punkte
234
… stimmt. Da sind ja auch doppelte Anführungszeichen drin (ich habe es nicht getestet und nutze das Script derzeit auch noch nicht).
Verwende mal einfache Anführungszeichen anstelle der Klammer (also: ' ).

Bzgl. /bin/find:

Was für eine DS nutzt du?

Bei mir liegt da auch kein find und einige andere nicht. Das liegt bei mir unter /usr/bin/find.

Mach doch mal folgendes:
In den Zeilen 81 bis 89 würde ich es einfach mal mit den einfachen Programmnamen versuchen (also ohne Pfadangaben), z.B. DATE="date +%Y-%m-%d" anstatt DATE="/bin/date +%Y-%m-%d"

Vielleicht erübrigt sich der Fehler in Zeile 115
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Ihr versucht das bestimmt unter DSM 5.2 und nicht unter DSM 6 Beta 2, richtig?

Unter DSM 5.2 erhalte ich auch diese Fehlermeldungen

Tommes
 

freddiek

Benutzer
Mitglied seit
12. Mrz 2013
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hallo geimist

... also die Idee mit dem einfachen Anführungszeichen war wieder mal super :)
DIe Zeile 92 wird jetzt anstandslos abgearbeitet.
Die aktuelle Fehlermeldung sieht folgendermassen aus:

Rich (BBCode):
BusyBox v1.16.1 (2015-11-12 18:01:35 CST) multi-call binary.

Usage: readlink FILE

Display the value of a symlink

./rsync.sh
rsync.sh: line 115: syntax error: bad substitution

Ich habe eine DS213+

Apropos ich habe auch die Dateipfade in den Zeilen 81 bis 89 durch die einfachen Dateinamen ersetzt.

@Tommes
absolut korrekt, ich bin mit der 5.2 unterwegs :)
das beruhigt mich jetzt so richtig

Grüße freddiek
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
@Tommes
absolut korrekt, ich bin mit der 5.2 unterwegs :)
das beruhigt mich jetzt so richtig

Naja, dieses Pojekt wurde ja grade wegen der DSM 6 Beta ins Leben gerufen um weiterhin eine dateibasierte Sicherung druchführen zu können, die durch Hyper Backup aktuell ja nicht mehr gegeben ist. Somit wurde das Script auch nur unter DSM 6 Beta gestestet.

Tommes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Wenn die Pfade durch den reinen Programmnamen ersetzt und keine PATH-Variable definiert wird, wird das Skript nicht per Aufgabenplaner oder cronjob laufen. Deshalb würde ich davon abraten.
 

freddiek

Benutzer
Mitglied seit
12. Mrz 2013
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hi Tommes,

ja die Diskussion über das HyperBackup verfolge ich auch und die Argumente sind mir bekannt.
Dein Lösungansatz ist allerdings so praktisch, dass ich bereits bei 5.2 gerne davon profitieren wollte.
Dass es allerdings ausschließlich für die Beta 6 vorgesehen ist, habe ich wohl überlesen, sorry.

Dann bleibt mir nichts anderes übrig, als sich zu entspannen und warten bis die 6.1 :cool: herauskommt.
Spätestens dann darf diese auch auf mein NAS :)

Danke für die Hilfe und Aufklärung

Schöne Grüße
freddiek
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Naja, es wird wohl auch irgendwie unter DSM 5.2 laufen. Es gibt da wohl unterschiedliche Schreibweisen in der Syntrax. Ich versuch mich auch grade daran, scheiter aber genauso wie du.

Ich hab die Variablen schon mal angepasst...

Code:
# Umgebungsvariablen definieren
  SSMTP="/usr/bin/ssmtp"
  RSYNC="/usr/syno/bin/rsync"
  MKDIR="/bin/mkdir" 
  ECHO="/bin/echo"
  FIND="/usr/bin/find"
  DATE="/bin/date +%Y-%m-%d_%H%M"
  TIMESTAMP="/bin/date +%d.%m.%Y_%H:%M:%S"
  SYNODSMNOTIFY="/usr/syno/bin/synodsmnotify"

Dabei ist mir aufgefalen, das rsync unter 5.2 wohl nichts mit den Schaltern...
Code:
--log-file-format="%i %o %f"
... anfangen kann. Ebenso wenn die Variableninhalte in Klammern stehen und nicht in Anführungszeichen.

Weiter bin ich auch noch nicht. Ich schau aber mal ob ich das noch hinbekomme... am besten mit eurer Hilfe!
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ja die Pfade waren unter DSM 5 anders. Musste meine Scripte auch für DSM 6 anpassen.


Ich denke aber es liegt am fehlenden /bin/bash oder?
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Ah ja... jetzt wo du's sagst. Unter DSM 5.2 gibts ja nur /bin/ash

Hast du denn evtl. eine Lösung parat, das man dieses Script auch unter 5.2 lauffähig bekommt? Ich bekomm das grad irgendwie nicht hin.

Tommes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Eine Möglichkeit wäre, die Environmentvariable PATH zu Beginn des Skripts zu definieren:

Rich (BBCode):
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin

Solange alle relevanten Pfade darin enthalten sind, sollten die Programme auch dann gefunden werden, wenn sie sich in den beiden DSM-Versionen unter verschiedenen Pfaden befinden. Dann könnten Dinge wie "RSYNC=/bin/rsync" entfallen und nachfolgend die Programme ohne Pfad verwendet werden - also z.B. rsync statt $RSYNC.
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat