Backup script Mgutt schreibt immer Backups voller Grösse der Originaldateien


ullibelgie

Recommended Posts

Hallo,

leider war ich umständehalber eine zeitlang nicht mehr mit Unraid beschäftigt - es fehlte die Zeit und der Server stand ein paar Monate still.

 

Jetzt habe ich mich wieder etwas eingearbeitet und will eine Backup-Lösung einrichten für die Unraid Daten und Systemfiles.

Hierzu wollte ich eigentlich das Script von MGutt nutzen aber es will nicht so recht funktionieren. Folgendes habe ich getestet:

 

Ein Testfolder mit einigen Dateien van ca 5Mb soll auf einen externen Linux PC (Ubuntu 20.04LTS) gesichert werden

Die HDD vom Zielrechner ist mit dem Plugin 'unassigned devices' in Unraid gemounted und die URL im Backup Scipt vers. 0.6 auch als Ziel angegeben

Ich führe das Script auf Unraid im Hintergrund laufend aus mit dem Script Plugin 'User scripts' aus - das funktioniert prima und die Daten werden auch auf der HDD des Zielrechners geschrieben.

 

So weit alles gut - aber:

 

Wenn ich das script nochmal ausführe ohne den Quellordner irgendwie geändert zu haben, wird wieder alles in voller Grösse geschrieben und die frisch formatierte ext4 HDD hat jetzt doppelt so viel Speicher beschrieben wie der Quellordner gross ist (also kein incrementelles Backup)

Wenn ich das script dann 5x ausführe immer mit dem gleichen Ordner ohne Anderungen, kann ich mit

 

du -d1 -h /url Zielordner | sort -k2

 

genau sehen, das eben 5x die 5Mb vom Test-Quellordner geschrieben sind und die neue Platte eben 25Mb neue Daten hat.

 

Das scheint mir nicht zu sein, wie es sein sollte !

 

Zur Kontrolle habe ich mal mit rsync manuell:

rsync -avh "quellordner" "zielordner" 

mehrere  Male ausgeführt mit dem korrekten Resultat, dass der Ordner nur einmal über das Netzwerk auf den Linux-Rechner gespielt wird und die Daten nicht mehrfach in voller Grösse übertragen und geschrieben werden (Dupes!)

 

Allerdings:

Wenn ich mit dem Script von MGutt innerhalb des Unraid servers auf einen Zielordner  ein "Backup" machen lasse und eben nicht über das Netzwerk (einfach von einem Share auf einen anderen Share in Unraid), dann funktioniert die Sache und der Folder wird nur einmal in voller Grösse geschrieben. Man sieht das nur das erste Backup die Originalgrösse hat und alle anderen Backups viel kleiner sind. (so wäre es korrekt!)

 

Was mir auch aufgefallen ist bei der Ubertragung des 2ten.3ten, 4ten Backups (immer mit demselben Ordner uber das Netzwerk):

Im Log wird ab dem 2ten Backup gesagt das nichts übertragen/geschrieben wurde, aber tatsächlich waren alle Daten doch in voller Grösse doppelt und dreifach geschrieben worden - es scheint also, als ob das Script log nicht übereinstimmt mit der Realität.

 

Was kann hier die Ursache sein - was müsste ich evtl mal uberprüfen um das Script doch richtig zum Laufen zu bringen  um von Unraid auf ext4 formatierte Platten nach Ubuntu zu sichern.

Leider habe ich es nicht fertiggebracht die HDD in xfs unter Ubuntu zu formatieren - hier ist vielleicht die Ursache im anderen Filesystem zu suchen ?

Hat schon mal jemand wirklich getestet ob das Script läuft auf Zielmedien von ext4 Platten - hier sollten Hardlinks eigentlich unterstützt werden, aber ich habe inzwischen meine Zweifel...

 

Oder muss ich in Samba auf dem Zielrechner irgendwas einstellen was bisher fehlt (.conf file)

 

Vielen Dank für ein paar gute Tips zu dem Script. 

Link to comment

Irritierend ist ja, daß das Script log am Ende sagt, das beim zweiten Backup der original Datei nichts übertragen und geschrieben wurden auf dem Ziel. Das wäre ja auch richtig, da an der Quelldatei nichts verändert wurde.

Aber tatsächlich ist auf dem Ziel Ubuntu PC alles neu geschrieben worden.

 

Habe nochmals überprüft:

- beim Einfügen des script keine versehentlichen windows line-feeds, sondern correct Unix-LF benutzt

- Am Zielrechner das smb.conf file enthält unter Global - Networking, die nicht auskommentierte Zeile

     unit extensions = yes

- Im Terminal mit Befehl "testparm" überprüft, daß keine fundamentalen (Syntax-)Fehler im smb.conf stecken

 

Also ich weiss leider nicht wo ich jetzt weiter suchen soll.

Habe es nochmals ausprobiert - ohne Erfolg - immer jedes Backup genauso gross wie die Quelldatei...

Link to comment

So ich habe das jetzt mal gemacht:

 

Ein File geschrieben auf den Zielrechner (Ubuntu) auf die gemountete Backup-HDD:

'testfile'  (einfach ein paar Zeilen Text)

 

Dann mit ln im Terminal einen Link, also im terminal eingegeben

     ln linkfile testfile"

Es entsteht im Folder ein neues File 'linkfile' und ich habe jetzt also 2 files in dem Folder, nämlich testfile.txt und linkfile.txt

 

Dann mit ls -i und ls -l festgestellt, das beide Files dieselbe Inode Nummer tragen, nämlich 11403266

Nochmals controlliert mit Eingabe im Terminal:

       find . -inum 11403266

 

Es wird ausgegeben:

./testfile

./linkfile

 

Das beweist, das 'linkfile' auf dieselben Daten verweist wie 'testfile' - ich also mit ln einen hardlink schreiben kann auf meinem Ubuntu Rechner...

 

Die Frage ist jetzt - wie gross ist der Folder "Link_Testen" in dem die beiden Files sind !

    du -dl -h      ergibt

16k

Das ist weniger als 2x das Testfile, denn das testfile ist bereits 10k gross...

 

Also kann Linkfile nur ein Hardlink sein (was zu beweisen war)

 

Jetzt: Warum funktioniert das aber nicht mit dem Script ?

Mir ist nicht klar, was mir die Testprocedure mit ln und ls Befehlen im Terminal auf dem Zielrechner bringen soll - ich weiss jetzt nur, das der Ubuntu Zielrechner Hardlinks kann....

 

Wie kann ich weiter vorgehen um das Script correkt zum laufen zu kriegen ?

 

Danke!

 

Link to comment

Ich kann nur als Anfänger der simpelen Logik folgen - für alles andere im Internet die Syntax suchen... also weitermachen:

 

Ich hatte auf dem Ubuntu Rechner (Ziel für das Backup von Unraid was ich machen möchte) ja festgestellt, daß hardlinks funktionieren, wenn ich lokal mit Befehl 'ln' links setze.

Nun ist aber die Frage, was passiert wenn ich das Zielverzeichnis von dem Backup-PC in Unraid mounte (unassigned devices plug-in) und dann im Terminal von Unraid die gleiche Procedure mache wie oben beschrieben - einziger Unterschied ist dann, dass der Befehl über SMB ausgeführt wird:

 

Also im Terminal von Unraid eingeben:

    cd /mnt/remotes.... (Zielverzeichnis)

Dann im Zielverzeichnis eingeben:

    ln testfile.pdf  linkfile.pdf

Kontrolle:

   ls

Es ist jetzt nicht nur testfile.pdf im Ordner, sondern auch linkfile.pdf

 

Jetzt checken nach Inode nummer:

   ls -i -h

Die Inode nummern sind verschieden !!

Das bedeutet doch, dass mit ln so keine Hardlinks geschrieben werden können über SMB von Unraid nach Ubuntu !

 

Was ist hier faul ? Oder ist das normal ?

Es sieht hier so aus, als ob bei mir die Hardlinks erzeugen eben nur lokal geht aber nicht via SMB !

 

Doch irgendwas nicht richtig mit den Unix-extensions ? Wo muss ich was ändern in den Einstellungen ?

 

Eigentlich wäre es das beste, das Script auf dem Zielrechner laufen zu lassen, wo auch geschrieben wird - aber dafür muss das Script neu geschrieben werden - das geht mit der Vorlage von MGutt leider gar nicht...

 

Was tun ?

Oder doch alles sein lassen und mit irgendeinem anderen Backuptool arbeiten ? Ich will aber was lernen und nicht nur Knöppe drücken...

 

Link to comment

Um meine  Verwirrung komplett zu machen:

Mein Testfile bei der Ausführung von ln vom Unraid-terminal war 650kB gross

Frage: wie gross ist also Testfile und Linkfile (der vermeintliche Hardlink von Testfile) dann zusammen ??

 

Ausführung im Unraid Terminal mit cd im Zielverzeichnis stehend:

    du -d1 -h      liefert 1.3MB     (also kein Hardlink ?!?)

Ausführung direkt auf dem Zielrechner im Terminal des zielverzeichnisses:

    du -d1 -h      liefert  650kB   (also doch Hardlink ??)

 

Wat denn nu ?!

Link to comment
15 hours ago, ullibelgie said:

Die Inode nummern sind verschieden !!

Nun dann funktionieren die Unix Extensions des Samba Servers nicht.

 

Sicher, dass deine Config korrekt ist und auch geladen wurde? Sicher, dass der Share selbst diese Regel nicht aushebelt?

 

15 hours ago, ullibelgie said:

aber dafür muss das Script neu geschrieben werden

Das kann nur eine Kleinigkeit sein. Ich schaue mal, dass ich herausfinde, wo es in Ubuntu hakt.

 

Link to comment
7 hours ago, mgutt said:

Nun dann funktionieren die Unix Extensions des Samba Servers nicht.

Sicher, dass deine Config korrekt ist und auch geladen wurde? Sicher, dass der Share selbst diese Regel nicht aushebelt?

 

Ich kann doch am Ubuntu Rechner nicht mehr tun als in smb.conf unter [global] eintragen

  unix extensions = yes

 

Ich habe nachgesehen - auch in Unraid ist im SMB setting eingetragen:

  unix extensions = yes

 

Wenn das nicht korrekt ist: wie muss es dann richtig gemacht werden ?

Und: Muss im smb.conf der Eintrag an einer ganz bestimmten Stelle gemacht werden, weil das ansonsten nicht funktioniert ?!

 

Das Script auf dem Ubuntu Rechner funktioniert nicht, da die Verweisungspfade alle nicht mehr stimmen (z.B. der Notifikations) ausserdem bekam ich auch allerlei andere Fehlermeldungen - als quasi Laie was coding angeht, habe ich es dann mal gelassen...

Link to comment
8 hours ago, ich777 said:

Du kannst luckyBackup ausprobieren das nutzt auch rsync als Backend und hat eine GUI.

 

Das habe ich inzwischen auch gesehen. Ich hatte aber gehofft, daß ich mit dem Gebrauch von dem Bash Script von MGutt eben mehr lerne als nur Knöppe zu drücken. Womöglich mit der Folge, dass wenn ich wirklich mal einen restore machen muss die Software auch nicht richtig benutzt habe... naja - vielleicht bin ich ja doch zu dumm, das Bash script zu verstehen - dann wird es lucky backup werdem müssen.

 

Unterschiede sind wohl vor allem darin zu suchen, wenn man bestimmte alte Backups aufbewahren will - dann muss man das mit luckyBackup eben manuell machen... habe mich aber damit noch nicht so beschäftigt.

 

Jedenfalls Danke für den Hinweis - ist dann mein Rettungsanker, wenn es nix wird mit MGutts Script...

Link to comment
1 hour ago, ullibelgie said:

Das habe ich inzwischen auch gesehen. Ich hatte aber gehofft, daß ich mit dem Gebrauch von dem Bash Script von MGutt eben mehr lerne als nur Knöppe zu drücken.

Ich schreibe zwar Docker Container, diverse Plugins usw. aber beim Backup steig ich aus und mir ist eigentlich nur wichtig das es funktioniert ohne mich mit rsync oder Skripten rumschlagen zu müssen.

Ich benutz luckyBackup auf meinem Backup Server mit Public Key um das Backup zu erstellen, funktioniert ohne Probleme und auch ziemlich Resourcenschonend (funktioniert auch in die andere Richtung, sprich von unRAID auf einen anderen Server/Computer).

 

1 hour ago, ullibelgie said:

Unterschiede sind wohl vor allem darin zu suchen, wenn man bestimmte alte Backups aufbewahren will - dann muss man das mit luckyBackup eben manuell machen... habe mich aber damit noch nicht so beschäftigt.

Nein, du hast in der GUI eine Möglichkeit zum Wiederherstellen eines Backups und musst nichts manuell machen, nur ist das limitiert auf ein ganzes Backup, aber das funktioniert ohne Probleme.

Link to comment
4 hours ago, ullibelgie said:

Ich habe nachgesehen - auch in Unraid ist im SMB setting eingetragen:

  unix extensions = yes

Unraid spielt keine Rolle bei diesem Feature. Das ist einzig Sache von Samba Server der Ubuntu Maschine.

 

War der Eintrag denn schon drin oder hast du den hinzugefügt? Danach Samba neu gestartet?

 

Edit: es scheint als müsste man explizit SMB1 dafür verwenden:

https://bugs.launchpad.net/ubuntu/+source/samba/+bug/1883234

 

Du kannst alternativ übrigens auch mit SSHFS mounten. Oder NFS wäre auch noch eine Option.

Link to comment
16 hours ago, mgutt said:

War der Eintrag denn schon drin oder hast du den hinzugefügt? Danach Samba neu gestartet?

 

Das weiss ich nicht mehr genau ... aber man kann ja wirklich nicht viel falsch machen eine Zeile in die [Global] section zu schreiben. Das ist ja Monate her und der Computer seitdem jeden Tag Abends ausgeschaltet und morgens wieder an...

 

Wenn es nur mit SMB 1 funktionieren würde, wäre das nicht gut... scheinbar wird da noch gewerkelt um das auch mit den letzten Releases von Samba zum laufen zu bringen...

Ich werd mal versuchen mit NFS zu mounten...

 

In der Zwischenzeit geht für mich dann wohl nur die schnelle Lösung mit luckybackup bis deutlich ist, was man beim lokalen Ausführen des Scripts alles ändern muss - leider geht das über meine "Fähigkeiten".... oder eben über meinen laienhaften Gebrauch...

Link to comment
20 hours ago, ich777 said:

...

Nein, du hast in der GUI eine Möglichkeit zum Wiederherstellen eines Backups und musst nichts manuell machen, nur ist das limitiert auf ein ganzes Backup, aber das funktioniert ohne Probleme.

 

Danke für die Hinweise - werde mich dann damit auch mal genauer beschäftigen ... vielleicht ist das eine gute Lösung für mich - die Tatsache, daß man das auch von ausserhalb Unraid ausführen kann mit nur Leserechten auf dem Unraid server ist jedenfalls sehr positiv

Um Clients auf Unraid zu sichern, könnte ich dann wiederum den luckybackup docker auf Unraid installieren um mit nur Leserechten von den Clients auf einen Backupshare von unraid zu schreiben...

So wird immer das Backup ausgeführt dort wo es auch geschrieben wird...

Luckybackup gibt es sogar für Windows sehe ich gerade.... aber das brauche ich nicht....

 

Mal schauen...

Link to comment

Ich habe mal eine Ubuntu VM aufgesetzt und es getestet. Mein Script läuft auch auf Ubuntu fehlerfrei. Wie hast du es gestartet? Ich vermute mal mit "sh script.sh"? Das ist falsch, weil das ein Bash Skript ist. Also wenn "bash script.sh" oder einfach "/pfad/script.sh".

 

Dann zu den Hardlinks. Beim Abholen gab es wie zu erwarten gar kein Problem. Beim Senden zu einem Ubuntu SMB Share hatte ich dann wie du das Problem, dass keine Hardlinks erstellt wurden. Also habe ich die Unix Extensions und SMB1 (NT1) aktiviert:

 

unix extensions = yes
server min protocol = NT1
client min protocol = NT1

[backups]
  comment = backups on ubuntu
  path = /home/marc/backups
  read only = no
  browseable = yes
  writeable = no
  read list =
  write list = marc
  case sensitive = auto
  preserve case = yes
  short preserve case = yes
  force user = root

 

Wie man sieht habe ich außerdem den User "root" erzwungen, denn nur so ist rsync in der Lage die Dateirechte zu setzen.

 

Und im rsync Skript habe ich das am Anfang ergänzt, damit er das Ziel über SMB1 mountet:

mkdir -p /mnt/remotes/ubuntu_backup_smb1
mount -t cifs -o username=marc,password=<password>,vers=1.0 //ubuntu/Home /mnt/remotes/ubuntu_backup_smb1

 

Und zum Schluss wieder unmounten:

umount -l /mnt/remotes/ubuntu_backup_smb1
rmdir /mnt/remotes/ubuntu_backup_smb1

 

Aber abholen über Ubuntu ist immer noch die beste Methode, weil ein gehackter Unraid Server dann nicht ans Backup kommt.

Link to comment

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...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.