Chavell3
Anmeldungsdatum: 23. September 2018
Beiträge: 23
|
Hallo zusammen, ich bin gerade erst diesem Forum beigetreten, weil ich ein Problem habe zudem ich aktuell nirgends eine Lösung finden kann. Ich hoffe ihr könnt mir helfen.
Ich möchte eine rsync synchronisation starten von meinem lokalen Server(Source) zu dem Remote-Server(Target).
Problem ist nur, auf der Source bin ich root und kann rsync ohne Probleme ausführen, auf dem Remote-Server(Ubuntu) muss ich mich per sudo erst zum root machen, damit rsync alle informationen(Timestamp, Berechtigung) richtig setzen kann.
An der Konfiguration wie ich sie tun möchte, gibt es allerdings noch Besonderheit, nämlich möchte ich mehrere Threads starten, nicht wie normal nur 1. Führe ich ein:
| rsync --progress -arh --rsync-path="sudo rsync -rah --progress" /mnt2/Daten/ thomas@backupnas:/mount/vg_DATA/DATA/
|
aus funktioniert alles. Nutze ich:
| ls /mnt2/Daten | parallel --will-cite -v -j4 rsync -rve ssh --rsync-path="sudo rsync -arvh --progress" {} thomas@backupnas:/mount/vg_DATA/DATA/{} -vvv
|
kommen Fehlermeldungen...(logging habe ich nur zur Hilfe aktiviert) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | rsync -rve ssh --rsync-path=sudo rsync -arvh --progress Backup_VeryOld thomas@backupnas:/mount/vg_DATA/DATA/Backup_VeryOld -vvv
FILE_STRUCT_LEN=24, EXTRA_LEN=4
cmd=ssh machine=backupnas user=thomas path=/mount/vg_DATA/DATA/Backup_VeryOld
cmd[0]=ssh cmd[1]=-l cmd[2]=thomas cmd[3]=backupnas cmd[4]=sudo cmd[5]=--server cmd[6]=-vvvvvlogDtpre.iLsfxC cmd[7]=. cmd[8]=/mount/vg_DATA/DATA/Backup_VeryOld
opening connection using: ssh -l thomas backupnas sudo --server -vvvvvlogDtpre.iLsfxC . /mount/vg_DATA/DATA/Backup_VeryOld (9 args)
msg checking charset: UTF-8
[sender] _exit_cleanup(code=12, file=io.c, line=226): entered
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(12)
sudo: unrecognized option '--server'
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
[command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
prompt] [-T timeout] [-u user] file ...
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.2]
|
Parallel, habe ich aus einem anderen Forum um mit rsync mehrere Threads auszuführen, vielleich hat ja jemand eine andere Idee.
Falls DANKE euch.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5334
|
Du kannst remote einen rsyncd (zB auch via xinetd) laufen lassen (ueber SSH-Tunnel oder VPN), womit du serverseitig den Nutzer definierst, sowie die (nicht-) erlaubten Verzeichnisse.
|
Chavell3
(Themenstarter)
Anmeldungsdatum: 23. September 2018
Beiträge: 23
|
in dem fall müsste ich den root-user auf dem Remote-Server aktivieren und den rsynd dadrüber laufen lassen, oder ?
der root user ist aktuell nämlich noch nicht freigeschalten.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5334
|
Chavell3 schrieb: der root user ist aktuell nämlich noch nicht freigeschalten.
Es gibt keinen User mit uid 0?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
sebix schrieb: Chavell3 schrieb: der root user ist aktuell nämlich noch nicht freigeschalten.
Es gibt keinen User mit uid 0?
Vermutlich meint er, dass der sich nicht einloggen kann. Das ist nicht gut, die Ausgabe von ls zu parsen - insbesondere, wenn da irgendwo Leerzeichen in Dateinamen sind. Warum man das nicht tun sollte:
Ich glaube nicht, dass man einen rsyncd auf dem Zielrechner laufen lassen muss, damit es funktioniert. Zum ursprünglichen Problem: ich sehe noch nicht, wie es kommt, dass die Option --server, die sudo dann anmeckert, an dieser Stelle auftaucht. Passen die Kommandozeile und die Ausgabe wirklich zusammen? Ich würde auf jeden Fall mal alle Optionen beim entfernten rsync weglassen! (siehe Manpage von rsync ) Man kann die Fortschrittsausgabe vom entfernten rsync ja sowieso hier nicht sehen. Die Reihenfolge der Optionen wirkt auch merkwürdig: warum steht das -vvv am Ende? Das führt dann dazu, dass das bei allen Kommandozeilen hinten angehängt wird, was Du nicht willst: | $ parallel echo x{} y{} -vvv ::: a b c
xa ya -vvv
xb yb -vvv
xc yc -vvv
|
Also eher so: | parallel --will-cite -v -j4 rsync -rvvve ssh --rsync-path="sudo rsync" {} thomas@backupnas:/mount/vg_DATA/DATA/{} ::: /mnt2/Daten/*
|
|
Chavell3
(Themenstarter)
Anmeldungsdatum: 23. September 2018
Beiträge: 23
|
genau, mit root kann ich mich nicht einloggen(ist eigentlich auch ok so) aber der wenn ich "sudo su" ausführe werde ich zum root hochgestuft.
Der root User hat natürlich auch die UID 0 @rklm:
genau das ist die Frage, wo kommt das "--server" her bzw. warum wird es dort gesetzt... Der Output von deinem Vorschlag ist aber leider ähnlich, wenn nicht sogar gleich...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | rsync -rhavvve ssh --rsync-path=sudo rsync /mnt2/Daten/BE-ACC-DB_2.kdbx thomas@backupnas:/mount/vg_DATA/DATA//mnt2/Daten/BE-ACC-DB_2.kdbx
opening connection using: ssh -l thomas backupnas sudo --server -vvvlogDtpre.iLsfxC . /mount/vg_DATA/DATA//mnt2/Daten/BE-ACC-DB_2.kdbx (9 args)
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(12)
sudo: unrecognized option '--server'
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
[command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
prompt] [-T timeout] [-u user] file ...
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.2]
|
Kurz für mich noch mal, da ich jetzt nicht der Linux spezi bin, was macht das:
am ende, ist das auch eine mögliche Option den Inhalt des Ordners als Input zu verwenden? Danke.
|
Chavell3
(Themenstarter)
Anmeldungsdatum: 23. September 2018
Beiträge: 23
|
Vom ersten Kommando her:
| rsync -rhavvve ssh --rsync-path=sudo rsync /mnt2/Daten/BE-ACC-DB_2.kdbx thomas@backupnas:/mount/vg_DATA/DATA//mnt2/Daten/BE-ACC-DB_2.kdbx
|
scheint aber noch ein anderes kleines Thema aufzutauchen. Als Ziel wird /mount/vg_DATA/DATA//mnt2/Daten/BE-ACC-DB_2.kdbx gesetzt aber es sollte nur /mount/vg_DATA/DATA/BE-ACC-DB_2.kdbx sein. Wobei wenn es am Ende vom Tag funktioniert könnte ich damit auch leben.
|
Chavell3
(Themenstarter)
Anmeldungsdatum: 23. September 2018
Beiträge: 23
|
von den Seiten, https://chrisdown.name/2013/11/04/securely-automating-rsync-to-archive-sensitive-files.html http://positon.org/rsync-command-restriction-over-ssh kann man erahnen, dass das "--server" von rsync kommt, aber ich konnte noch keine Aktion daraus ableiten wie ich es vermeide oder nutzen kann... Danke.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Chavell3 schrieb: genau, mit root kann ich mich nicht einloggen(ist eigentlich auch ok so) aber der wenn ich "sudo su" ausführe werde ich zum root hochgestuft.
sudo -i ist einfacher.
genau das ist die Frage, wo kommt das "--server" her bzw. warum wird es dort gesetzt...
Das macht rsync selber, wenn er den entfernten rsync -Prozess startet. Fragt sich nur, warum das rsync -Kommando wegbleibt. Hast Du mal die rsync -Versionen auf dem Client und Server verglichen?
Der Output von deinem Vorschlag ist aber leider ähnlich, wenn nicht sogar gleich...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | rsync -rhavvve ssh --rsync-path=sudo rsync /mnt2/Daten/BE-ACC-DB_2.kdbx thomas@backupnas:/mount/vg_DATA/DATA//mnt2/Daten/BE-ACC-DB_2.kdbx
opening connection using: ssh -l thomas backupnas sudo --server -vvvlogDtpre.iLsfxC . /mount/vg_DATA/DATA//mnt2/Daten/BE-ACC-DB_2.kdbx (9 args)
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(12)
sudo: unrecognized option '--server'
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
[command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
prompt] [-T timeout] [-u user] file ...
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.2]
|
Ganz ehrlich, ich würde den ganzen Zauber mit parallel weglassen. Das Protocoll von rsync ist sowieso darauf ausgerichtet, effizient zu sein, und Du bekommst normalerweise (kann bei bestimmten WLANs anders sein) nicht mehr Netzwerkbandbreite durch mehrere parallele Verbindungen.
Kurz für mich noch mal, da ich jetzt nicht der Linux spezi bin, was macht das:
am ende, ist das auch eine mögliche Option den Inhalt des Ordners als Input zu verwenden?
Feature von parallel (siehe Manpage). Chavell3 schrieb:
scheint aber noch ein anderes kleines Thema aufzutauchen. Als Ziel wird /mount/vg_DATA/DATA//mnt2/Daten/BE-ACC-DB_2.kdbx gesetzt aber es sollte nur /mount/vg_DATA/DATA/BE-ACC-DB_2.kdbx sein.
Ja, stimmt, das sind jetzt absolute Pfade. Schlauer ist vermutlich: | rsync -rave ssh --rsync-path='sudo rsync' /mnt2/Daten/ thomas@backupnas:/mount/vg_DATA/DATA
|
Möglicherweise hilft ein Semikolon: | rsync -rave ssh --rsync-path='sudo rsync;' /mnt2/Daten/ thomas@backupnas:/mount/vg_DATA/DATA/
|
|
Chavell3
(Themenstarter)
Anmeldungsdatum: 23. September 2018
Beiträge: 23
|
Das mit dem ";" hat leider nichts gebracht, sondern nur die rsync Hilfe aufgerufen ☹ Gibt es denn sonst irgendwelche Möglichkeiten rsync zu beschleunigen?
Es wird halt immer nur 1 Datei kopiert und bei mehrere kleine Files wird hierdurch schon einiges an Performance verschenkt... Danke euch.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Chavell3 schrieb: Das mit dem ";" hat leider nichts gebracht, sondern nur die rsync Hilfe aufgerufen ☹
Schade. Und seltsam. Hast Du die Versionen verglichen?
Gibt es denn sonst irgendwelche Möglichkeiten rsync zu beschleunigen?
Es wird halt immer nur 1 Datei kopiert und bei mehrere kleine Files wird hierdurch schon einiges an Performance verschenkt...
Das ist zu wenig. Bevor ich da keine Messungen sehe, glaube ich nicht daran, dass rsync ineffizient ist. Man kann sehr wohl das Ermitteln der zu sendenden Dateiliste und das eigentliche Senden so gestalten, dass es effizient die verfügbare Bandbreite ausnutzt.
|
Chavell3
(Themenstarter)
Anmeldungsdatum: 23. September 2018
Beiträge: 23
|
Genau, die rsync Versionen, die sind genau gleich auf beiden Servern, gibt es also keinen unterschied. rsync version 3.1.2 protocol version 31 Den Durchsatz siehts du hier:
https://i.imgur.com/luleiGM.jpg 10Mb/s obwohl mehr geht, im Peak...
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Chavell3 schrieb: Genau, die rsync Versionen, die sind genau gleich auf beiden Servern, gibt es also keinen unterschied. rsync version 3.1.2 protocol version 31
Im Moment sind mir die Ideen ausgegangen, woran es liegen kann. Du hast ja immer Kommando und Ausgabe getrennt gepostet. Ist sicher gestellt, dass da beim Übertragen aus dem Forum nichts schief gegangen ist? Moment, zwei Ideen habe ich noch:
Auf dem Zielsystem in der /etc/sudoers einen Eintrag machen für Benutzer "thomas" und /usr/bin/rsync (oder wo es auch immer liegt, siehe type -a strace ) bzw. besser eine neue Datei in /etc/sudoers.d anlegen mit dem Eintrag. Dadurch verhinderst Du die Passwortabfrage. Dann würde ich auch genau den Pfad zu rsync hinter dem sudo angeben. Du könntest noch versuchen etwas herauszubekommen, indem Du den lokalen rsync mit strace ausführst. Manchmal geben die Syscalls Hinweise.
Den Durchsatz siehts du hier:
https://i.imgur.com/luleiGM.jpg 10Mb/s obwohl mehr geht, im Peak...
Und das Netzwerk hat mehr Bandbreite? Peak-Werte sagen oft nicht viel aus. Ich benutze für strace immer dieses Skript, das die Ausgabe in einem temporären Verzeichnis anlegt und am Ende wegräumt: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | #!/bin/sh
# run strace with some default settings
test -n "$DEBUG" && set -x
set -e
base="${TMP:-/tmp}/$(id -un)"
mkdir -p "$base"
dir="$(mktemp -d "--tmpdir=$base")"
trap 'rm -rf "$dir"' 0
trap 'exit 1' INT TERM QUIT HUP
set +e
strace -v -s 1024 -ff -o "$dir/trc" "$@"
stat=$?
cat <<EOM
Exited with status $stat.
Enter "exit" to exit and remove temp files.
EOM
cd "$dir"
"$SHELL"
exit $stat
|
Wenn der Prozess geendet hat, kommst Du in eine interaktive Shell in dem Verzeichnis mit den Trace-Dateien. Aufruf mit der kompletten Kommandozeile des Befehls als Argumente.
|
Chavell3
(Themenstarter)
Anmeldungsdatum: 23. September 2018
Beiträge: 23
|
Den Durchsatz habe ich mal getestet mit IPERF, kommen so etwa 100MB/s raus, von beiden Richtungen. Den User in die sudoers eintragen habe ich schon gemacht, seitdem funktioniert das Ganze überhaupt mal, halbwegs(vorher konnten u.a. die Timestamps nicht geändert werden)... Das mit dem strace kann ich noch mal heute Abend versuchen. Aber gibt das auch wirklich mehr Info raus, der vvv-Switch beim rsync selber ? DANKE
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Chavell3 schrieb: Den Durchsatz habe ich mal getestet mit IPERF, kommen so etwa 100MB/s raus, von beiden Richtungen.
Dann sind 10MB/s natürlich enttäuschend. Fragt sich trotzdem, ob man das sauber hinbekommt, wenn man die Parallelisierung außerhalb von rsync macht. Wenn man z.B. foo/bar und foo/baz über zwei verschiedene Verbindungen überträgt, dann müssen ja auf dem Zielsystem zwei Prozesse parallel prüfen, ob foo schon da ist, und es ggf. anlegen. Ich würde trotzdem erst mal sehen, dass das ganze mit einem rsync auf dem Client funktioniert.
Den User in die sudoers eintragen habe ich schon gemacht, seitdem funktioniert das Ganze überhaupt mal, halbwegs(vorher konnten u.a. die Timestamps nicht geändert werden)...
OK, hoffentlich hast Du ihn nicht für alle Prozesse freigegeben. Ich würde das aus Sicherheitsgründen nur selektiv machen.
Das mit dem strace kann ich noch mal heute Abend versuchen. Aber gibt das auch wirklich mehr Info raus, der vvv-Switch beim rsync selber ?
Andere. ☺ Edit: der Durchsatz wird ja sowohl durch die verfügbare Netzwerkbandbreite als auch die verfügbaren IO-Bandbreiten auf beiden Systemen begrenzt. Wenn man dann noch parallel arbeitet, kann sich das sogar als schädlich erweisen.
|