Benötige Hilfe für ein Bash Script

jpunkt

Benutzer
Mitglied seit
11. Mai 2010
Beiträge
29
Punkte für Reaktionen
1
Punkte
3
Liebe Forumleser,
leider habe ich keine Ahnung von Bash Programmierung. Daher möchte ich gerne eure Hilfe in Anspruch nehmen.
Folgendes würde ich gerne umsetzen:
Ich sichere Backups von lokalen Rechnern per Acronis in ein Verzeichnis auf der NAS (DS413). Jeder PC hat dort ein Verzeichnis, z.B. PC1, PC2...usw.
Wenn die eingestellte Menge an Kopien erreicht ist, beginnt Acronis alte Versionen zu löschen. Die erscheinen dann im jeweiligen #recycle-Ordner PC1, PC2...
Diese Dateien möchte ich regelmäßig, sagen wir ein Mal pro Woche, auf eine extern angeschlossene Platte verschieben. Schön wäre sie auch dort in die entsprechenden Ordner PC1, PC2...zu legen.
Unter "Aufgabe erstellen" im Aufgabenplaner kann ich ja die Zeiten einstellen, wann der Job laufen soll. Mit der Meldung "bash /volume1/public/job.sh" kann ich nicht viel anfangen, vermute dass dort die Datei mit dem Script (job.sh - Shell script?) liegen soll, was sie ja nicht tut. Einen Ordner "public" anzulegen sollte nicht das Problem sein, allerdings kann man dieses Feld auch in keiner Weise bearbeiten. Dann kann man nur ein Script selber basteln?
Ok, ihr seht schon...0 Ahnung.
Daher hoffe ich hier richtig zu sein und würde mich über Rückmeldungen freuen.
Danke vorab.
jpunkt
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
Mal noch eine grundlegende Frage:
Selbst wenn du die von Acronis rotierten Sicherungen wegsicherst, bleibt da überhaupt die Konsistenz des Backups erhalten? Kann man mit den rotieren Dateien überhaupt etwas anfangen?

Mit der Meldung "bash /volume1/public/job.sh" kann ich nicht viel anfangen,
Das ist nur ein Beispielpfad. Dein Skript kann sonstwo auf der DS liegen. Dieser Pfad muss dann lediglich im Aufgabenplaner eingetragen werden.
 

jpunkt

Benutzer
Mitglied seit
11. Mai 2010
Beiträge
29
Punkte für Reaktionen
1
Punkte
3
Hallo Stephan, erst mal danke das du dich dem Thema angenommen hast. Bei Acronis ist es so eingestellt, das es max. zwei komplette Sätze (diff.) gibt. Acronis selbst löscht dann automatisch ältere Versionen. Auf einem Backupziel ohne Papierkorbfunktion wären die dann einfach weg...
Daher fand ich gerade bei der NAS die Möglichkeit, im Papierkorb noch etwas zu finden, als eine Absicherung über den Zeitpunkt hinaus.
Um deine Frage zu beantworten: ja, die Konsistenz bleibt erhalten.
In dem Feld für das Skript kann ich aber keine Änderungen vornehmen. Was ich anfangs geschrieben hatte, steht das so drin und kann nicht geändert werden.
Gruß Jürgen
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
In dem Feld für das Skript kann ich aber keine Änderungen vornehmen.
Das sollte lediglich ein Blindtext sein.

Frage:
Sind die gelöschten Dateien eindeutig benannt, oder müssen die beim Verschieben umbenannt werden, damit bereits gesicherte Zieldateien nicht überschrieben werden?

Folgende 3 Zeilen verschieben die Dateien im Quellordner in den Zielordner (rekursiv - also mit Unterordnern).
Den Code einfach dort einfügen, wo der graue Beispielpfad eingetragen ist.
Bash:
# Pfade innerhalb der Anführungszeichen anpassen:
SourceDir="/volume1/Acronis/#recycle/"
TargetDir="/volume1/Backup/Archiv/"

# ------ ab hier nichts mehr ändern ------
/bin/rsync --recursive --remove-source-files --size-only --exclude="@eaDir" "${SourceDir%/}/" "${TargetDir%/}"
 
Zuletzt bearbeitet:

jpunkt

Benutzer
Mitglied seit
11. Mai 2010
Beiträge
29
Punkte für Reaktionen
1
Punkte
3
Hallo Stephan, habe deine Daten angepasst und den Job angelegt. Bin gespannt, ob das funzt.
Auf jeden Fall bedanke ich mich für deine Mühe.
Gruß Jürgen.
PS: Das Ziel ist übrigens eine angeschlossene HDD
Die Anpassung wie folgt:
SourceDir="/volume1/Backup/#recycle/"
TargetDir="/satashare/"

# ------ ab hier nichts mehr ändern ------
/bin/rsync --recursive --remove-source-files --size-only --exclude="@eaDir" "${SourceDir%/}/" "${TargetDir%/}"

Passt?
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
TargetDir="/satashare/"
Ist der Pfad wirklich korrekt?
Gehe am besten in der Filestation auf Eigenschaften des gewünschten Ordners und kopiere dir dort den Pfad (nicht, dass du dir die Root-Partition zumüllst!).

Sehr wahrscheinlich sieht der Pfad eher so aus: /volumeSATA/satashare
 
Zuletzt bearbeitet:

jpunkt

Benutzer
Mitglied seit
11. Mai 2010
Beiträge
29
Punkte für Reaktionen
1
Punkte
3
Hallo Stephan,
du hattest Recht, der Ziel Pfad sah genau so aus wie du geschrieben hast. Habe ihn entsprechend angepasst.
Script sieht jetzt so aus:
SourceDir="/volume1/Backup/#recycle/"
TargetDir="/volumeSATA/satashare/Backup/"

# ------ ab hier nichts mehr ändern ------
/bin/rsync --recursive --remove-source-files --size-only --exclude="@eaDir" "${SourceDir%/}/" "${TargetDir%/}"

Es klappt allerdings nicht wirklich. In der Quelle sind die Daten zwar weg, aber tauchen im Ziel nicht auf. Das LOG File ist leer.
Vorher hatte ich noch andere Versuche, da gab es folgendes log:
rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]: Broken pipe (32)
rsync: write failed on "/volumeSATA/Backup/JW01/Samsung SSD 860 EVO 250GB RVT02B6Q-1-0004.tibx": No space left on device (28)
rsync error: no space on remote server (code 41) at io.c(1293) [sender=3.0.9]
oder
rsync: change_dir#1 "/volumeSATA/Backup" failed: Permission denied (13)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(572) [Receiver=3.0.9]
rsync error: rsync service is no running (code 43) at io.c(687) [sender=3.0.9]
Doch schwerer als ich dachte. Noch eine Idee?
rsync Dienst muss doch laufen, oder?
Gruß Jürgen
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
Das Skript hat jetzt keinerlei Prüfung, ob z.B. das Ziel vorhanden ist, der Kopiervorgang erfolgreich war ect.
No space left on device (28)
Heißt, dass der Speicherplatz auf dem Ziel nicht ausreicht.

rsync: change_dir#1 "/volumeSATA/Backup" failed: Permission denied (13)
Es fehlen die nötigen Rechte.
Das Skript als Admin, aber auf jeden Fall als root ausgeführt, sollte das beheben.

rsync Dienst muss doch laufen, oder?
Nein, das ist hier nicht nötig.
 

jpunkt

Benutzer
Mitglied seit
11. Mai 2010
Beiträge
29
Punkte für Reaktionen
1
Punkte
3
Hallo Stephan, ich muss mich entschuldigen! Es hat doch geklappt. Ich hatte nur den falschen Zielpfad angegeben und so hat er noch ein Verzeichnis erstellt (Backup). Das hab ich jetzt entfernt. Ich danke dir vielmals. Das erspart mir etwas Arbeit. Super!
Liebe Grüße Jürgen
 
  • Like
Reaktionen: geimist

jpunkt

Benutzer
Mitglied seit
11. Mai 2010
Beiträge
29
Punkte für Reaktionen
1
Punkte
3
Eine Sache ist doch noch. Die verschobenen Dateien sind alle r/o. Das muss nicht sein.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
… Die verschobenen Dateien sind alle r/o. Das muss nicht sein.
Genaugenommen sind sie synchronisiert und die Quelldateien wurden anschließend gelöscht.

Du meinst, sie sind read only?
Da müsste man sich die Rechte ansehen.

Vielleicht gibt es auch noch einen passenden Schalter für rsync …????
 


 

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