Wie Verzeichnisse eines Linux-Servers (Ubuntu LTS) auf NFS-Freigabe inkl. Berechtigungen kopieren?

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Hallo zusammen,

da ich ein DS218j mit zwei gespiegelten HDDs nutze, wollte ich dazu übergehen, Verzeichnisse von lokalen Linux-Servern auf eine NFS-Freigabe meines DS218j zu kopieren.
Die Verzeichnisse wurden auf dem Linux-Server mit meinem Stamm-User "harry" Besitzer- und Gruppen-ID "1000" erstellt und ich möchte an den bisherigen Berechtigungen auch nichts ändern, sondern die bisherige Verzeichnisstruktur/Berechtigungen auf die NFS-Freigabe kopieren.
Ich nutze auf mehreren Mini-Servern (x386) Docker, möchte aber die Bind-Mounts und Volumes von den lokalen Servern auf die NFS-Freigabe "umziehen", um damit auch eine Möglichkeit zu schaffen, einen beliebigen anderen Mini-Server nutzen zu können, falls es mal einen Ausfall gibt. Die Daten des DS218j sind sowohl über RAID-1 als auch eine externe USB-HDD sowie Cloud-Speicher geschützt, auf die regelmäßig gesichert wird.

Ich bin alles andere als ein LINUX-Profi und nehme an, dass es sowohl auf dem DS218j wie auch auf dem LINUX-Server bei Nutzung von NFS Dinge zu beachten/berücksichtigen/konfigurieren gibt.

Zu diesem Thema wäre ich für jegliche Unterstützung - gerne auch in Form von Links zum einlesen - dankbar und erwarte nicht, hier alles auf dem Silbertablett serviert zu bekommen.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Von wie vielen Docker Containern reden wir hier? Und von welchen?
Ich finde das Thema prinzipiell spannend, glaube aber leider nicht, dass du damit performancetechnisch zufrieden sein wirst. Und zwar aus 2 Gründen:
-die schwache Hardware der 218j (die lahme CPU und der sehr geringe RAM)
-nur Gigabit Ethernet ist für mehrere Maschinen im Live Betrieb eventuell zu wenig (kommt hier auf die Images an)
Alles in allem zusammengefasst würde ich dir raten, einfach die Daten auf die DS zu sichern / syncen. Produktiv aber weiterhin auf den Servern selbst arbeiten. Das kannst du entweder einfach per Script auf den Servern machen und via rsync oder SMB sichern. Oder ein Tool dahinterhängen wie zum Beispiel Syncthing. Das kannst du auf der DS nativ installieren. Braucht also kein Docker.
 
  • Like
Reaktionen: nas4mich

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Hallo plang.pl und vielen Dank für Deine blitzschnelle Antwort.

Momentan nutze ich ca. 10 Container z.B. mit wiki.js, Vaultwarden, duplicati, ......
Die Idee mit dem Sync hatte ich auch schon, bin aber daran gescheitert, einen verläßlichen Workflow zu etablieren, der m.M.n. folgende Schritte automatisiert abarbeiten sollte:

(1) Individuelle Ausführung des Sync zu gewünschtem Datum/Zeit mit/ohne Wiederholung für den Container auf mein DS218j
(2) Zur eingestellten Zeit den Container stoppen, Bind-Mounts/Volumes sichern/syncen auf DS218j und danach Container wieder starten

Bei einem Ausfall des Docker-Hostsystems sollte ein beliebiger Linux-Server den ausgefallenen ersetzen und die letzten Sicherungen vom DS218j auf den neuen Docker-Host (inkl. sämtlicher Berechtigungen) wiederhergestellt werden.

Das wäre so in etwas meine Traumkombination, die es ermöglicht die lokalen/schnellen SSDs in meinem Docker-Host zu nutzen, die wichtigen Nutzdaten aber regelmäßig auf mein DS218j zu sichern (und von dort aus nochmals, weil RAID-1 eben KEIN Backup ist).
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
Frag mal etwas gezielter. Was weißt du schon über NFS und was möchtest du noch wissen?

Eins kann ich dir schonmal sagen, NFS kümmert sich nicht um Berechtigung, die NFS-Freigaben gelten für IP-Adressen oder IP-Ranges, höchstens noch mit einer Unterscheidung zwischen r- oder r/w-Zugriff. Man "mountet" dann eine NFS-Freigabe in ein zunächst leeres Verzeichnis, wie lokale Platten/Devices auch. Dann gelten für die Rechte die UIDs/GIDs, die es auf beiden Seiten gibt. Die sollten im Idealfall auf beiden Seiten gleich sein. Man kann höchstens noch Squashen, d.h. alles z.B. einem bestimmten Benutzer, z.B. Admin oder root zuweisen. Die Möglichkeiten sind aber sehr begrenzt. Das dürfte das Hauptproblem bei NFS sein.
 
  • Like
Reaktionen: nas4mich

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
  • Like
Reaktionen: nas4mich

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Danke Benares für Deine Antwort, ich denke aber ich werde den von plang.pl o.g. Ansatz weiter verfolgen, weil ich damit Probleme durch mangelnde Performance meines DS218j und mit NFS-Berechtigungen zu umgehen hoffe.
 

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Zu den genannten Punkten (1) und (2): Das stoppen und starten eines Containers ist doch mit einem Script kein Problem. Das Sichern der Mounts auch nicht. Einen Cronjob kannst du ja einfach auf dem Linux-Server anlegen (crontab -e; https://www.stetic.com/developer/cronjob-linux-tutorial-und-crontab-syntax/)
Danke für den Link.
Das stoppen und starten sollte ich per Script hinbekommen aber wie sichere ich idealerweise die Docker-Nutzdaten auf mein DS218j?
Ich würde auf dem DS218j gerne ein Verzeichnis/Freigabe "Docker" nutzen und dort zur Unterscheidung von Bind-Mounts und Volumes die Daten in den Unterverzeichnissen "BM" und "Volumes" sichern wollen.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
  • Like
Reaktionen: nas4mich

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Leider bekomme ich bei der Ausführung des folgenden Befehls Fehlermeldungen und es wird nicht gesynct:

rsync -rt /home/harry/docker/wikijr 192.168.178.19:/home

Der rsync-Dienst auf dem DS218j ist aktiviert.
Gibt es denn bei der Nutzung von rsync keine Probleme mit Berechtigungen der Verzeichnisse/Dateien?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Versuch es mal auf der DS mit /homes/harry anstatt mit /home
 
  • Like
Reaktionen: nas4mich

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Could not chdir to home directory /var/services/homes/harry: No such file or directory
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.3]
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
  • Like
Reaktionen: nas4mich

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Sofern ich rsync aber verstanden habe, ist das eigentlich nicht, was ich möchte. Rsync sorgt dafür, dass bei einer Änderung in der Quelle das Delta in das Ziel gesynct wird. In meinem Fall also, wenn der Container hochgefahren wird, würden auch (temporäre) Dateien gesynct.
Ich möchte aber einen konsistenten Zustand meiner Daten im Ziel, d.h. bei heruntergefahrenem Container unmittelbar nach dem Herunterfahren die Nutzdaten kopieren (lassen) auf das NAS.
Die Berechtigungen möchte ich unbedingt mitkopieren, damit es später keine Probleme gibt.,
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Aber du willst doch nur kopieren, wenn der Container gestoppt ist, dachte ich?
Jede andere Methode wird dir sonst auch die temporären Daten rüberschieben.
Du müsstest auf jeden Fall die Option --delete inkludieren, denke ich.
Ansonsten noch -a für Kopieren der Berechtigungen.
Du könntest es auch mit einem Script versuchen, dass einfach auf den Samba-Share der DS schiebt, aber ich denke, dass rsync die bessere und performantere Alternative ist.
Hier noch mal ein Link: https://www.shellbefehle.de/befehle/rsync/
 
  • Like
Reaktionen: nas4mich

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Ja, nur wenn der Container gestoppt ist soll kopiert/gesynct werden.
Dann habe ich rsync doch missverstanden und ging fälschlicherweise davon aus, dass ich damit Quelle und Ziel dauerhaft verbinde und rsync dafür sorgt dass bei Änderungen in der Quelle diese sofort in das Ziel gesynct werden.
Ist also dann doch eher so - habe es leider bisher nicht zum Laufen gebracht daher mutmaße ich - dass rsync nur einmalig nach Aufruf synct (?), wenn es denn mal läuft zwischen Linux-Server und DS218j.
Sofern dann noch die Berechtigungen ebenfalls passen, wäre das genau mein Wunschprozedere.

Plan B wäre per Script den gwünschten Ordner per tar packen, auf den DS218j kopieren (NFS oder SMB) und bei Bedarf wieder zurück auf einen Linux-Server und entpacken.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Du startest das Script und es wird einmal gesynct. Ich weiß nicht, ob ein dauerhafter Sync per Script möglich ist. Aber wenn ja, ist das auf jeden Fall nicht der Standard.
Wie gesagt, klar könntest du das auch per SMB machen. Da würd ich aber, je nachdem wie oft das Backup laufen soll und wie viele Daten das sind, lieber NFS verwenden. Da könntest du einfach einen dauerhaften (und automatischen) Mount in die /etc/fstab eintragen und könntest dann auf dem Server sozusagen lokal kopieren, was das Scripten einfacher machen dürfte
 
  • Like
Reaktionen: nas4mich

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Es funktioniert weiterhin nicht. Auf dem DS218j hat der Benutzer "harry" Schreib-/Lesezugriff auf die Freigabe "docker".

Code:
rsync -av wikijs/ harry@192.168.178.19::docker/wikijs/


Führt zu:


Code:
Password:

@ERROR: account system disabled

rsync error: error starting client-server protocol (code 5) at main.c(1682) [sender=3.1.3]
 

nas4mich

Benutzer
Mitglied seit
16. Okt 2022
Beiträge
40
Punkte für Reaktionen
2
Punkte
8
Benutze ich nur einen Doppelpunkt wie in Deinem Link beschrieben. Habe mal ein "n" eingefügt für dry-run.

Code:
rsync -avn wikijs/ harry@192.168.178.19::docker/wikijs/

Erfolgt folgende Ausgabe:

Code:
load pubkey "/home/harry/.ssh/id_rsa": invalid format
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0664 for '/home/harry/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/harry/.ssh/id_rsa": bad permissions
harry@192.168.178.19's password:
Could not chdir to home directory /var/services/homes/harry: No such file or directory
sending incremental file list
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.3]
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Ich kann dazu leider nicht viel sagen. Ich verwende rsync nicht. Ich kann nur, genau wie du, recherchieren.
Bei mir läuft es so:
-die DS zieht sich wichtige Daten regelmäßig von Linux Servern mit Active Backup (was auf deiner DS leider nicht läuft)
-die Linux Server werden über den Hypervisor (Proxmox) an einen Proxmox Backup Server gesendet (Bare-Metal Backup)
->der Proxmox Backup Server wiederum hat einen Ordner der DS als NFS Share gemountet und legt dort die Backups ab

Wenn du es mal mit NFS versuchen willst, musst du auf dem Linux Server erstmal einen Ordner erstellen, wohin der NFS Share gehängt werden soll (z.B. /mnt/backup")
Dann die /etc/fstab bearbeiten und reinschreiben:
IP_DER_DS:/volume1/Share /mnt/backup nfs defaults 0 0
Dann entweder den Server neu starten oder temporär mounten mit mount IP_DER_DS:/volume1/Share /mnt/backup.
Dann kannst du einfach mit einem Script und dem Befehl mv Daten auf den angehängten Ordner schieben, als wäre er lokal.
Logischerweise muss auf der DS NFS aktiv sein und die IP des Servers auf den Share berechtigt sein.
 
  • Like
Reaktionen: nas4mich


 

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