Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

rsync Skript für inkrementelle Backups

Featured Replies

  • Author

Bedenke, dass der Docker Dienst läuft. Vielleicht hat er in dem Moment Daten in die Image Datei geschrieben. Das Backup der Datei wäre dann eh kaputt.

  • Replies 142
  • Views 25.3k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • Naja. Irgendwo ^^   Wenn ich mal alle Optionen verfügbar gemacht habe, werde ich dazu aber auch noch mal Anleitungen schreiben.    

  • nicht mit Versionierung arbeiten ... sondern Standard Backups   hier ein Task um einen Share zu mounten, syncronisieren, umount ... und am Ende noch replication zu starten  

  • Dazu ist mir auch noch keine Lösung eingefallen.   Aktuell tatsächlich nicht. Muss ich mir mal anschauen, wie man das "nachbauen" könnte. Mir war wichtig, dass nur die Container gestartet

Posted Images

31 minutes ago, mgutt said:

Bedenke, dass der Docker Dienst läuft. Vielleicht hat er in dem Moment Daten in die Image Datei geschrieben. Das Backup der Datei wäre dann eh kaputt.

 Ja ich lasse es normalerweise immer Nachts um 4 Uhr laufen, hat bis jetzt immer geklappt. Hatte es heute morgen dann nochmal manuell probiert.

Aber wenn es eh nicht nötig ist vom image ein Backup zu machen, dann werde ich es rausnehmen.

Danke für die Hilfe

  • 3 months later...

Hallo zusammen,

 

erstmal vielen Dank für das tolle Script!

 

ich bekam beim ersten Lauf mit aktiver Option "--dry-run" den Fehler, dass mein Dateisystem (xfs) keine Hardlinks unterstützt. Als ich "--dry-run" wieder auskommentiert habe, klappte es. Wenn das Absicht ist, wäre ein Hinweis darauf vielleicht für Frischlinge hilfreich :)

 

Nun habe ich folge habe ich es wie folgt eingestellt:
 

# keep backups of the last X days
keep_days=7
# keep multiple backups of one day for X days
keep_days_multiple=1
# keep backups of the last X months
keep_months=6
# keep backups of the last X years
keep_years=1
# keep the most recent X failed backups
keep_fails=3

 

Und es läuft seit 16 Tage oder so. Das script hat nun nach (vermutlich) 14 Tagen alles was älter als 7 Tage ist, gelöscht.
Ich hätte erwartet, dass die letzten 7 Tage täglich eins behält, und davor die letzten 6 Monate jeweils eins und davor eins vom letzten Jahr.
Wenn er das löscht, behält er es aber offensichtlich nicht oder habe ich einen Knoten im Hirn?
Am liebsten wäre mir ein Zyklus in dieser Form = 7D,4W,6M,1Y (also die letzten 7 Tage, dann jeweils eins der letzten 4 Wochen, dann jeweils 1 der letzten 6 Monate und abschließend das älteste eines Jahres).

Wie realisiere ich das hier am besten oder welche Einstellungen kommen dem am nächsten?

 

Ich frühe mich über Unterstützung :)

  • 2 weeks later...

Es fehlt dafür im Script die Wochen Regel. 

So bleiben halt nur solande eine Woche stehen, bis es zur Monatsgrenze kommt. Es wird also in Zukunft, immer der letzte Tag des Monats bleiben, und vom aktuellen Monat so maximal die letzten 7 Tage.

Mir persönlich reicht das. Du kannst wenn du keine Wochenloch haben möchtest die Tage dann auf 30 herauf setzen. Da das ja inkrementelle Backups sind sollte der anfallende Speicherplatz ja nicht so ins groß ausfallen.

Danke für die Aufklärung. Ja, ich habe Tage nun erstmal auf 14 hochgesetzt und warte mal ab.

  • 1 month later...

Erst Mal danke für das Script und die mühe dir du dir damit machst. 

 

Kann mir (absoluter Anfänger) jemand erklären wie ich das Script nutze? Ich möchte eigentlich nur mein Pool manuell alle paar Monate Mal sichern. Bisher kopiere ich immer alles komplett neu 🫣

  • 1 month later...

Hey, gibt es für dieses Skript irgendwo eine Anleitung?

 

Ich habe zwar schon länger Unraid, aber es lange nicht wirklich genutzt. Jetzt möchte ich mich ein wenig mehr damit auseinander setzen.

Habe Immich auf einem NVMe Cache und möchte das regelmäßig auf mein Array sichern, dabei bin ich auf dieses Skript gestoßen.

 

Jetzt habe ich das "User Scrips" aus dem App-Store geladen und den "Code" soweit in das Skript kopiert.

Ich weiß aber noch nicht so genau, was ich alles anpassen muss. :-)

 

backup_jobs=(
  # source                          # destination
  "/boot"                           "/mnt/user/backup/boot"
  "/mnt/cache/appdata"              "/mnt/user/backup/appdata"
  "root@tower:/mnt/user/isos"       "/mnt/user/backup/isos"

 

Sind das hier z. B. nur Beispiele und ich muss hier einfach nur meine Ordner angeben und kann diese hier überschreiben?

 

Die nachfolgenden Zeilen sind soweit ja verständlich, dass ich dann die gewünschte Zeiträume für das Backup eingebe und so.

Aber es sind ja über 400 Zeilen, muss da auch was angepasst werden?

 

Habe nichts gefunden, wo ich mich schön einlesen kann, daher wäre ich für einen Link oder ein paar Tipps sehr dankbar.

 

VG Andy

 

 

Hallo,

 

erstmal vielen Dank an @mgutt für die Arbeit und das tolle Skript. Schlank programmiert und macht was es soll.

 

Ich habe aktuell folgendes Problem. Ich sichere einen Ordner vom Pool auf einen BackUp Share auf dem Array. Das Skript läuft sauber durch und alle Daten sind auf dem BackUp Share vorhanden.

Wenn ich (zum Testen) nach 15 Minuten und ein paar Testveränderungen das Skript wiederholt laufen lassen, so läuft es wieder sauber durch und eben auch sehr schnell, da er ja nur die Änderungen berücksichtigt.

Aber: Er legt keine Hardlinks an. Der BackUp Ordner ist doppelt so groß. 

 

Nach einem dritten Testlauf, sind alle Dateien 3x vorhanden und der Ordner entsprechend 3x so groß.

 

Array hat XFS, der Pool ZFS.

 

Anbei das Log:

 

Script location: /tmp/user.scripts/tmpScripts/BackUp Eigene Dateien/script
Note that closing this window will abort the execution of this script
# #####################################
last_backup: '20241109_225708/'
Create incremental backup from /mnt/user/Name/Dokumente to /mnt/user/BackUp/Name/Dokumente/20241109_230415 by using last backup /mnt/user/BackUp/Name/Dokumente/20241109_225708/
created directory /mnt/user/BackUp/Name/Dokumente/.20241109_230415
cd..t...... ./

Number of files: 6,227 (reg: 5,527, dir: 700)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 0
Total file size: 9.26G bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.010 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 301.47K
Total bytes received: 846

sent 301.47K bytes received 846 bytes 40.31K bytes/sec
total size is 9.26G speedup is 30,617.84
File count of rsync is 6227
Make backup visible ...
... through local mv
renamed '/mnt/user/BackUp/Name/Dokumente/.20241109_230415' -> '/mnt/user/BackUp/Name/Dokumente/20241109_230415'
Success: Backup of /mnt/user/Name/Dokumente was successfully created in /mnt/user/BackUp/Name/Dokumente/20241109_230415 (0)!
# #####################################
Clean up outdated backups
Keep daily backup: 20241109_230415
Keep multiple backups per day: 20241109_225708
# #####################################

 

  • Author
9 hours ago, anmarcel said:

Aber: Er legt keine Hardlinks an. Der BackUp Ordner ist doppelt so groß. 

Wie hast du das ermittelt?

1 hour ago, mgutt said:

Wie hast du das ermittelt?

Über die GUI-Anzeige bei "Main" und über "compute" bei dem entsprechenden Ordner.

 

Wenn es "nur" eine Anzeige ist und den Hardlinks geschuldet, dann bin ich beruhigt, dass es klappt. Aber  könnte es nicht zu Problemen führen, da das System denkt, es braucht mehr Speicherplatz als es tatsächlich verbraucht?

 

Laut "stat" hat er zwei Links angelegt. Das sollte ja korrekt sein, oder?

Bildschirmfoto2024-11-10um10_44_30.thumb.png.8f05025d794425f46b78056ab17e5d03.png

Edited by anmarcel

  • Author
1 hour ago, anmarcel said:

Aber  könnte es nicht zu Problemen führen, da das System denkt, es braucht mehr Speicherplatz als es tatsächlich verbraucht?

Nein. Das Dateisystem weiß wie es die Hardlinks zu zählen hat.

 

1 hour ago, anmarcel said:

Laut "stat" hat er zwei Links angelegt. Das sollte ja korrekt sein, oder?

Jo.

 

Du kannst dir mit "du" die reale Größe ausgeben lassen, sofern du alle Backups in einem ausliest. Dann skippt er Hardlinks.

 

In deinem Fall so:

du -d1 -h /mnt/user/BackUp/Name/Dokumente

 

Wenn du "du" mit nur einem Backupordner prüfst, dann siehst du einen hohen Wert. Das ist exakt das was die GUI anzeigt.

 

Anders kann das aber auch nicht angezeigt werden, weil man aus Sicht eines Hardlinks nicht wissen kann, welcher "älter" ist, weil der Zeitpunkt wann der Hardlink erzeugt wurde, nicht gespeichert wird.

 

Dh wenn du die Größe des zweiten Backups ermittelst, weiß das Kommando nicht, dass es das zweite ist, sondern geht davon aus, dass es für sich alleine steht. Richtig kompliziert wird dann zb das zehnte Backup, wo ja diverse Hardlinks aus Backup 2 bis 9 drin stecken. Also alles nicht so einfach für den User darstellbar.

 

31 minutes ago, mgutt said:

Du kannst dir mit "du" die reale Größe ausgeben lassen, sofern du alle Backups in einem ausliest. Dann skippt er Hardlinks.

 

In deinem Fall so:

du -d1 -h /mnt/user/BackUp/Name/Dokumente

 

Wenn du "du" mit nur einem Backupordner prüfst, dann siehst du einen hohen Wert. Das ist exakt das was die GUI anzeigt.

 

Danke!

 

Das ist gut zu wissen und ich muss mir also keine Sorgen machen, dass meine Platte überläuft

On 11/8/2024 at 1:58 PM, AndyBre said:

Hey, gibt es für dieses Skript irgendwo eine Anleitung?

 

Ich habe zwar schon länger Unraid, aber es lange nicht wirklich genutzt. Jetzt möchte ich mich ein wenig mehr damit auseinander setzen.

Habe Immich auf einem NVMe Cache und möchte das regelmäßig auf mein Array sichern, dabei bin ich auf dieses Skript gestoßen.

 

Jetzt habe ich das "User Scrips" aus dem App-Store geladen und den "Code" soweit in das Skript kopiert.

Ich weiß aber noch nicht so genau, was ich alles anpassen muss. 🙂

 

backup_jobs=(
  # source                          # destination
  "/boot"                           "/mnt/user/backup/boot"
  "/mnt/cache/appdata"              "/mnt/user/backup/appdata"
  "root@tower:/mnt/user/isos"       "/mnt/user/backup/isos"

 

Sind das hier z. B. nur Beispiele und ich muss hier einfach nur meine Ordner angeben und kann diese hier überschreiben?

 

Die nachfolgenden Zeilen sind soweit ja verständlich, dass ich dann die gewünschte Zeiträume für das Backup eingebe und so.

Aber es sind ja über 400 Zeilen, muss da auch was angepasst werden?

 

Habe nichts gefunden, wo ich mich schön einlesen kann, daher wäre ich für einen Link oder ein paar Tipps sehr dankbar.

 

VG Andy

 

 

Einer ein Tipp für mich, was ich falsch gefragt habe, welchen falschen Ansatz ich habe, dass mir keiner antwortet?

Möchte schon gerne wissen, wenn ich hätte woanders zuerst schauen müsste und mich auch gerne einlesen.

 

Sorry sonst für die Nood-Frage. VG

Edited by AndyBre

2 hours ago, AndyBre said:

Möchte schon gerne wissen, wenn ich hätte woanders zuerst schauen müsste und mich auch gerne einlesen.

Dann mal andersherum gefragt, den Startpost und den Link in den englischen Teil hast du aber gesehen und gelesen?

Ist bei mir selbst jetzt schon ne ganze Weile her, aber ich meine da sollte eigentlich alles relevante stehen 

19 hours ago, jj1987 said:

Dann mal andersherum gefragt, den Startpost und den Link in den englischen Teil hast du aber gesehen und gelesen?

Ist bei mir selbst jetzt schon ne ganze Weile her, aber ich meine da sollte eigentlich alles relevante stehen 

Klar, den habe ich gelesen und da finde ich wird das Skript mehr oder weniger angekündigt und vorgestellt und dann auf die Probleme der Leute eingegangen.

 

How to execute this script?

Use the User Scripts Plugin (Unraid Apps) to execute it by schedule

Use the Unassigned Devices Plugin (Unraid Apps) to execute it after mounting a USB drive

Call the script manually (Example: /usr/local/bin/incbackup /mnt/cache/appdata /mnt/disk6/Backups/Shares/appdata)

 

Das ist für mich eher die einzige Erläuterung, mir geht es doch eher, was man im Skript anpassen muss.

Wie @jj1987 bereits sagte, im Startpost steht eigentlich alles. Ansonsten

 

On 11/13/2024 at 2:55 PM, AndyBre said:

Sind das hier z. B. nur Beispiele

Ja

 

On 11/13/2024 at 2:55 PM, AndyBre said:

ich muss hier einfach nur meine Ordner angeben und kann diese hier überschreiben?

Korrekt.

 

Bei mir beispielsweise so (Auszug aus dem "über 400 Zeilen Script"

 

Quote

# backup source to destination
backup_jobs=(
  # source                              # destination
  "/boot"                               "/mnt/disks/externalnvme/Backup/boot"
  "/mnt/user/backups/HomeAssistant"     "/mnt/disks/externalnvme/Backup/HomeAssistant"
  "/mnt/user/backups/Unraid"            "/mnt/disks/externalnvme/Backup/Unraid"
  "/mnt/user/home"                      "/mnt/disks/externalnvme/Backup/home"
)

# keep backups of the last X days
keep_days=14
 

 

P.S.: Bin auch noch blutiger Anfänger und fuchse mich gerade erst seit einigen Wochen ein ;-)

Btw sichere ich übrigens alles auf einer externen NVMe die ich noch übrig hatte, nicht auf dem Array.

Edited by k3vbert

Danke, ich bin irgendwie blind, ich kann das dennoch nicht finden, wo das so beschrieben ist.

 

Okay, dann also nur Source und Destination anpassen und fertig?

Das kann doch nicht so einfach sein. 🙂

 

Vielen Dank, dann werde ich das mal einrichten. Hätte mir das echt komplizierter vorgestellt.

 

Muss ich nur noch schauen, was ich bei "Immich" am besten sichere, aber das ist ja eine andere Baustelle.

23 hours ago, AndyBre said:

nur Source und Destination anpassen und fertig?

Genau

 

23 hours ago, AndyBre said:

Das kann doch nicht so einfach sein. 🙂

Doch, und es ist echt genial :) Das Initialbackup dauerte ca. 50 Min, seither dauert ein Backup ca. 10 Min.

23 hours ago, AndyBre said:

was ich bei "Immich" am besten sichere

Sichere dir doch einfach den AppData Ordner (das ist dann die Config) und die Datenbank bzw. den Fotoordner.

 

Bei mir (siehe Kommentar weiter oben) beinhaltet "/mnt/user/backups/Unraid" den Ordner AppData und "/mnt/user/home" beinhaltet meine Fotos etc.. Musst du dir mit deinem Docker-Container anschauen, und die Ordner im Script entsprechend berücksichtigen.

7 hours ago, k3vbert said:

Genau

 

Doch, und es ist echt genial :) Das Initialbackup dauerte ca. 50 Min, seither dauert ein Backup ca. 10 Min.

Sichere dir doch einfach den AppData Ordner (das ist dann die Config) und die Datenbank bzw. den Fotoordner.

 

Bei mir (siehe Kommentar weiter oben) beinhaltet "/mnt/user/backups/Unraid" den Ordner AppData und "/mnt/user/home" beinhaltet meine Fotos etc.. Musst du dir mit deinem Docker-Container anschauen, und die Ordner im Script entsprechend berücksichtigen.

Ja, man ist wohl zuerst erschlagen von den ganzen Zeilen und wird dadurch etwas verunsichert.

Habe den Appdata Ordner gesichert und auch die Datenbank. Ist halt nur die Frage, ob das einfach so klappt, falls mal etwas crashen sollte, oder wenn ich die NVMe mal gegen eine größere tauschen möchte.

 

sent 19 bytes  received 12 bytes  62.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1338) [sender=3.3.0]
File count of rsync is 0
Delete /mnt/user/Sicherung auf Array/vaultwarden/.20241119_051223

 

Was bedeutet denn hier dieser rsync error? Das verstehe ich noch nicht so richtig.

Auf den ersten Blick scheint nämlich alles richtig angelegt worden zu sein.

Edited by AndyBre

Wenn ich auf dem Unraid System Dateien löschen, werden diese bei dem nächsten Backup nicht mehr berücksichtigt. Dennoch sind die alten Einträge noch vorhanden (habe die Standradeinstellungen im Skript gelassen). Ist es möglich, die gelöschten Dateien / Ordner auch bewusst im Backup zu löschen? Der Speicherplatz ist auf der Backup Festplatte leider voll und die Dateien / Ordner werden nicht mehr benötigt.

 

Vielen Dank.

  • 2 weeks later...

Hallo zusammen, 

 

ich möchte hier noch einmal nachfragen wie ich das Skript zusammen mit dem rsync Container zum laufen bringen kann.

 

- ich habe das Script auf dem Ziel Server in der Version 1.7

- Auf dem Quell Server ist der rsync Container mit Port 5020 im Bridge Modus eingerichtet

- der SSH_AUTH_KEY_1: ist vom Ziel Sever eingetragen

- im script ist folgendes als Quell und Zieladresse eingetragen: 

"[email protected]:/mnt/user/backup2/"   "/mnt/user/backup"

- in der Zeile 93 habe ich #alias ssh='sshpass -p "<password>" ssh -o "StrictHostKeyChecking no"' ersetzt durch:

alias ssh='ssh -p 5020'

 

wenn ich jetzt das script starte bekomme ich die folgende Meldung:

Script location: /tmp/user.scripts/tmpScripts/rsync-incremental-backup/script
Note that closing this window will abort the execution of this script
# #####################################
created directory /mnt/user/backup/link_dest
>f+++++++++ empty.file
removed '/tmp/_tmp_user.scripts_tmpScripts_rsync-incremental-backup_script/empty.file'
*deleting link_dest/empty.file
*deleting link_dest/
Create full backup from [email protected]:/mnt/user/backup2 to /mnt/user/backup/20241130_083115

rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(231) [Receiver=3.2.7]
File count of rsync is 0
Error: Host key verification failed. rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] rsync error: unexplained error (code 255) at io.c(231) [Receiver 3.2.7] (255)!
# #####################################
Clean up outdated backups

 

Wenn ich aber in der Kommandozeile vom Zielserver folgenden Befehl eingebe, überträgt er die Dateien:

rsync --itemize-changes --recursive --rsh='ssh -p5020' [email protected]:/mnt/user/backup2/ /mnt/user/backup

 

 

Was ist an meiner Konfiguration falsch?

Hier nutzt ja gefühlt jeder 2te das Script von @mgutt, aber ich bin irgendwie zu Blöd dafür🤷‍♂️

So, nach endlosen Versuchen habe ich nun es endlich hinbekommen.

 

Für alle die auch das Script in Verbindung mit den rsync-Server nutzen wollen, so müssen die Zeilen aussehen:

 

# user-defined rsync command
alias rsync='rsync -e "ssh -p5020 -o StrictHostKeyChecking=no"'

# user-defined ssh command
alias ssh='ssh -p5020 -o StrictHostKeyChecking=no'

 

Ich habe hier als Beispiel Port 5020 gewählt.

Hallo,

 

ist es möglich, einen Container(Duplicati) beim Sichern nicht zu stoppen und zu überspringen? 

Wenn das Script ausgeführt wird, wird es öfter nicht beendet und macht mein System nicht mehr benutzbar.

Extrem langsam und alle Container müssen manuell gestartet werden.

Abort kann ich zwar nutzen und es steht dann auch, dass das Script beendet wurde. 

Nur wenn ich das Script dann wieder starte, kommt die Meldung, dass es läuft und nicht gestartet wird.

Dann hilft bloß ein Neustart, welcher eine Paritätsprüfung zur Folge hat.

 

Hier habe ich auch schon um Hilfe gebeten. 

 

  • 1 month later...

Das Skript an sich läuft, wenn ich die Sicherungen lokal anlege. Sobald ich die Sicherung aber über ein gemountetes SMB durchführe erhalte ich eine Fehlermeldung:

 

Error: Your destination /mnt/remotes/FritzBox-MAF/BACKUP/SERVER does not support hardlinks!

 

Die Backup-Platte an dem SMB war vorher auf NTFS, dann habe ich die extra auf Ext4 formatiert und das Problem ist dennoch nicht gelöst. Wie schaffe ich das denn dann die Backups dort zu erstellen?

 

Hintergrund der ganze Sache, warum ich das so mache ist folgendes:

Ich lege lokale Backups in Unraid an und möchte dann dieses Backup noch zusätzlich extern an einen anderen Standort sichern, falls mal was abbrennt.

55 minutes ago, Cannon said:

Sobald ich die Sicherung aber über ein gemountetes SMB durchführe erhalte ich eine Fehlermeldung:

du siehst ja die Fehlermeldung, rsync und hardlinks und entsprechendes target

 

Seite 1 dieses Threads

 

image.png.a6469e9e7fe89d22d89340460a731288.png

 

da ich nicht mit hardlinks arbeite ... mal schauen ob sich jemand dazu schaltet, ansonsten mal einlesen und ggf. anpassen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.