[Projekt] rsync -Alternative dateibasierte Datensicherung

Status
Für weitere Antworten geschlossen.

mann_0815

Benutzer
Mitglied seit
02. Apr 2008
Beiträge
26
Punkte für Reaktionen
0
Punkte
7
So, nun ein kurzes Feedback von mir.

Was soll ich sagen, es klappt.
Lasse das Such-Script mit dem Aufgabenplaner zu bestimmten Zeiten ausführen.
Bisher klappt das tadellos.
Vielen herzlichen Dank an euch zwei.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Perfekt. Schön das du es hinbekommen hast und zufrieden mit unserem Script bzw. dem Ergebnis bist. Dann kann ich dir nur weiterhin viel Spaß mit unserem Script wünschen.

Tommes
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Mir ist vorhin etwas aufgefallen.


Ich mache aktuell ein Backup von einer externen Festplatte die an der 415+ hängt auf meine 212j.
Das Script wurde einfach direkt über die 415+ auf der Festplatte gestartet, sprich (Fromthisdevice=1) tossh (212j),
bis jetzt läuft auch alles 1a und das Script ist fleißig am kopieren.

Allerdings war die 415+ mehrere Minuten im HDD-Ruhemodus.

Ich war bis jetzt der Meinung, dass die DS immer komplett läuft, sobald man das Script/rsync startet.

Aber es ist wohl möglich, dass die internen Platten schlafen gehen.

Vielleicht interessiert es ja einen :)
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Das hört sich ziemlich interessant an, wenngleich ich einer DS dieses Verhalten nicht zugeschrieben hätte. Aber das sollte sich ja ganz einfach reproduzieren lassen indem man deinen Aufbau nachstellt. Ich schreib das mal auf meine Liste "Was ich noch alles tun möchte" und werde dann berichten. Kann aber etwas dauern...

Tommes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Wie sollen denn bei einem rsync-Skript die Quell-Laufwerke schlafen gehen? Es sollte doch fast die gesamte Zeit über von den Quellplatten gelesen werden.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Das Quelllaufwerk und der Speicherort des Scriptes war in dem Fall ja die externe Festplatte an der DS415+. Von dort aus ging es dann per SSH auf die DS212j.

Mir wäre diese Verhaltensweise auch neu, aber man lernt ja nie aus. Oder PsychoHH ist in Anbetracht der vorgeschrittenen Uhrzeit zwischenzeitlich mal kurz weggenickt und hat dann die Schuld auf die DS geschoben *gg*
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Naja rsync gibt ja, so lange alles normal ist, nix an stdout. Wenn also auch sonst nix läuft, spricht ja nix dagegen, dass die internen HDDs ne runde schlafen…
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Ah, ok, dann läuft das Skript und der rsync im RAM, das passt dann m.E. schon.
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Das Quelllaufwerk und der Speicherort des Scriptes war in dem Fall ja die externe Festplatte an der DS415+. Von dort aus ging es dann per SSH auf die DS212j.

Mir wäre diese Verhaltensweise auch neu, aber man lernt ja nie aus. Oder PsychoHH ist in Anbetracht der vorgeschrittenen Uhrzeit zwischenzeitlich mal kurz weggenickt und hat dann die Schuld auf die DS geschoben *gg*

Ja genau so war es. Ich hätte trotzdem nie gedacht, dass die internen schlafen können.

Haha nein habe das am späten Abend gesehen und dann später im Protokoll geschaut und das Backup lief die ganze Zeit weiter.

Wenn jemand aber eine große DS vollausgestattet hat und die externen auf eine andere DS sichert ist das schon nicht schlecht wenn die internen schlafen.

Wie gesagt hab mir nur gewundert und dachte das Backup läuft nicht. Aber ist alles da :)
 

Doktor-Parnassus

Benutzer
Mitglied seit
11. Feb 2015
Beiträge
65
Punkte für Reaktionen
1
Punkte
8
Kann ich das Skript auch benutzen, um anstatt auf eine externe USB- oder SATA-Festplatte auf ein anderes NAS, genaugenommen eine andere Synology DiskStation, im Netzwerk zu synchronisieren? Wenn ja, wie müsste ich es hierfür anpassen? Ich kann den Ziel-Pfad (TARGET) ja einfach auf die IP-Adresse + Ordner-Pfad des anderen NAS anpassen, aber wie sieht es mit den erforderlichen Berechtigungen aus?
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Mit dem Script kann man eigentlich fast alles machen, steht aber auch alles im Wiki beschrieben. Du kannst dir also aussuchen, ob du auf (TOSSH) oder von (FROMSSH) einer entfernten Diskstation sichern willst. Das einzige was du im Vorfeld machen mußt, ist einen SSH Zugang auf der Konsole einzureichen. Wie das geht ist auch im Wiki beschrieben. Lies dir also bitte das Wiki mal aufmerksam durch und schau ob du damit zurecht kommst. Wir helfen natürlich auch gerne weiter, wenn es irgendwo hakt.

Um später das Script ausführen zu können brauchst du dann die IP der DS auf oder von der du sichern möchtest und den SSH Benutzer (i.d.R. root). Das Script findet dann selbständig die zu sichernden Ordner und hängt verschüsselte ggfs. ein und später wieder aus. Als SOURCES und TARGET brauchst du also nur die Ordner anzugeben um die es geht, genauso als wenn du auf USB/SATA sichern würdest. Nähere Informationen findest du aber auch in den Kommentaren im Script selber. Schau's dir einfach mal an.

Tommes
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ich habe mal eine Frage an die Scripter,
Vielleicht kann mir einer kurz helfen und folgendes schreiben.


Gerne will ich das Script erweitern, habe jetzt aber mal eine Frage wie ich das sinnvoller lösen kann.
Ich will, dass gecheckt wird ob ein Ordner existiert, wenn ja soll der Befehl durchgeführt werden, wenn nicht soll 4x 30sek gewartet werden und erneut geprüft werden ob der Ordner vorhanden ist.

Müsste doch mit einer Schleife gehen oder? Nur wie setzt man dort, dass 4x geprüft wird?



if test -d Ordner; then
Befehl ..
else
sleep 30
if test -d Ordner; then
Befehl ..
else
sleep 30
if test -d Ordner; then
Befehl ..

nach dem 4ten mal soll ein echo erfolglos kommen.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.377
Punkte
234
Ohne es jetzt getestet zu haben:

Rich (BBCode):
n=0
if [-d $ordner ]; then
   Befehl
else
   while [ !-d $ordner ]
      do
         sleep 30
         n=`expr $n + 1`
         if [ $n = 4 ]; then
            echo "4x gesucht und immer noch nicht da :-("
            continue
         fi
      done
   if [-d $ordner ]; then
      Befehl
   fi
fi
 
Zuletzt bearbeitet:

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Wow danke,

ich werde es nachher probieren.

Das ist ne ziemlich einfach aber geile Idee die Var mit 0 zusetzen und bei jedem durchlauf mit +1 zu addieren.


Ich habe mir das mit der while Schleife auch angeschaut und dachte ich muss dies mit break machen, aber damit wird die ja wohl nur gestoppt.
Mit continue ergibt das aber Sinn.


Nochmals danke!
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.159
Punkte für Reaktionen
912
Punkte
424
Hast du mal eine geschachtelte for-if-Schleife probiert?

#!/bin/bash

i=1
for i in {1..4}; do
if test -d Test; then
echo "Test found"
break
else
i=i+1
echo "sleep"
sleep 10
fi
done
exit 0
 

Tiuz

Benutzer
Mitglied seit
21. Jun 2016
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Vielen Dank für das geniale Script. Leider habe ich derzeit noch ein paar Probleme. Und zwar verstehe ich die vier Parameter FROMTHISDEVICE, NOTTOSCRIPT, HOSTNAME und AUTORUN nicht ganz.
Ich würde meine Daten gerne per autoron auf eine USB Festplatte sichern. Wenn ich die Festplatte anstecke, soll die autorun automatisch gestartet werden, die Daten auf die Festplatte gesichert werden und danach die Festplatte wieder ausgeworfen werden.
Wie muss ich da die Parameter setzen?

Derzeit habe ich das Script "autorun" benannt, auf der USB Festplatte ins root Verzeichnis gelegt und die Parameter folgendermaßen gesetzt:
FROMTHISDEVICE="0"
NOTTOSCRIPT="0"
HOSTNAME="0"
AUTORUN="1"

Leider passiert beim anstecken der Festplatte gar nichts.

Vielen Dank im voraus.

#edit: ich glaube ich bin von selbst drauf gekommen. Ohne das Addon "autorun" von Jan Reidemeister werden die autorun dateien nicht automatisch ausgeführt. Das könnte man im Wiki noch etwas deutlicher herausheben.
 
Zuletzt bearbeitet:

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.159
Punkte für Reaktionen
912
Punkte
424
Für meinen Geschmack steht es eigentlich schon deutlich dabei. Es ist optional schon unter Vraussetzungen erwähnt und zudem noch bei Funktionsweise. Entweder Scriptausführung über den DSM-Aufgabenplaner oder Scriptausführung mittels "autorun".
Hast du einen Vorschlag, wie es besser verständlich formuliert wäre?
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Also zum testen der Schleifen bin ich noch nicht gekommen, da die Prioritäten beim Script gerade woanders liegen.
Es läuft bis jetzt bestens aber es wird noch ein bisschen was verändert.

Jetzt kommt mal wieder eine kniffelige Frage..

Ich wollte je nach Anwendungsfall die Variablen bzw. Testabfragen verändern um unnötig Code zu verwenden.

Im Grunde genommen will ich ein Code für Lokal und SSH nutzen.
Es scheitert aber an der Syntax.

Ich habe je nach Fall test gesetzt und auch die Zeichen mit eingebaut, allerdings werden diese wohl dann nicht mehr Berücksichtig.
Ist es überhaupt möglich das so zu machen?


Rich (BBCode):
if $TEST -d $SOURCE_PATH/$Y$SHARE$Z; then
echo "$ORDNER $SHARE gefunden" 
else
echo "$ORDNER $SHARE nicht gefunden" 
fi


SSH_USER="root"
SSH_FROM="192.168.2.99"
FROMSSH="ssh $SSH_USER@$SSH_FROM"
SOURCE_PATH="/volume*"

TEST="test"
A="\'"
B="\""
C="'\""


Rich (BBCode):
if [ -z "$SSH" ]; then
ORDNER="LOKAL: Ordner"
SHARE="DS212j Testordner"
Y="$B"
Z="$B"
else
ORDNER="SSH: Ordner"
SHARE="DS415Plus Testordner"
TEST="$B$TEST"
Y="$A"
Z="$C"
fi



Folgende Befehle klappen so:
Werden auch per Echo ober im Code so ausgegeben.
Allerdings werden die " und ' nicht berücksichtig:

Lokal:
if test -d /volume*/"DS212j Testordner"; then

SSH:
if ssh root@192.168.2.99 "test -d /volume*/'DS415Plus Testordner'"; then



Und ja schon mal vieeeelen Dank
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ich wollte mit einem find einen Pfad auslesen aber auch mit -not oder ! einen Teil ausschließen.

Allerdings ist unter DSM 5.2 folgende Version installiert.
BusyBox v1.16.1 (2016-04-26 17:12:35 CST) multi-call binary.
Und auch wenn Synology paar Anpassungen vorgenommen hat ist diese von 2009 und dort geht es noch nicht.

Gibt es sonst eine Alternative außer die ipkg + findutils zu installieren?
 
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