Ich verwende, rsync
um mein Home-Verzeichnis zu sichern. Das hat schon lange gut funktioniert. Hier ist der Befehl, den ich verwende:
rsync \
-pavz \
--delete \
--exclude 'mnt/' \
--exclude '.cache/' \
--exclude 'Videos/' \
--exclude 'Music/' \
--exclude 'Documents/virtualbox' \
/home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"
Ich habe jedoch den Server gewechselt, auf den ich eine Sicherung mache, und rsync
starte und läuft jetzt einige Sekunden (bis zu einigen Minuten), stoppt dann aber mit der Fehlermeldung
packet_write_wait: Connection to x.x.x.x: Broken pipe
rsync: [sender] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [sender=3.1.1]
Da es auf anderen Servern funktioniert, vermute ich, dass das Problem entweder die Verbindung oder der Server selbst ist. Die Verbindung scheint stabil zu sein. Ich bin über ein Kabel verbunden und sehe keine Unterbrechungen. Ich habe auch versucht, den Server während der Sicherung zu pingen. Der Ping hat eine Antwortrate von 100%, selbst wenn die Sicherung unterbrochen wird.
Ich benutze kerberos
zur Authentifizierung auf dem Remote-Server.
Ich habe versucht , mehrere Kombinationen mit ServerAliveInterval
, ServerAliveCountMax
oder ClientAliveInterval
in meinem ~/.ssh/config
, aber ohne Erfolg.
Es könnte sein, dass auf dem Server etwas läuft, das den rsync
Befehl aus irgendeinem Grund beendet, aber ich weiß nicht, wie ich das untersuchen soll. Irgendwelche Ideen?
quelle
kerberos
auf dem Remote-Server authentifiziere.Antworten:
Ihr Problem könnte (mangelnder) Speicher sein. Damals, als 1 GB für einen Server groß war, schlug rsync bei großen Datenmengen bei mir fehl. Vielleicht hat sich der Algorithmus verbessert, und die Speicherkapazitäten haben zugenommen, aber ich habe dieses Problem seit ungefähr 8 Jahren nicht mehr gesehen. Also wirklich, dies ist eine Außenaufnahme, aber eine, die es wert ist, erkundet zu werden. Versuchen Sie zuerst kleinere Datensätze. Sie können auch versuchen, als Formular für die Überprüfung der geistigen Gesundheit einen Teer-Teer zu erstellen:
Wenn dies auch nach einigen Minuten fehlschlägt, ist es kein Speicher.
quelle
Ich habe dies auch
rsync
in der Vergangenheit erlebt. Die Lösung, die das Problem für mich behoben hat, bestand darin, es innerhalb einerscreen
Sitzung auszuführen, wodurch die Verbindung zum Remote-Server aufrechterhalten werden konnte.Sie können den Status überprüfen, indem Sie ausführen
screen -x rsync
(oder was auch immer Sie die Sitzung benennen möchten, wenn Sie ihr einen Namen geben, der nicht erforderlich ist). Dadurch wird Ihre aktuelle Shell erneut an diese Sitzung angehängt. Denken Sie daran, die Verbindung erneut zu trennen, nachdem Sie den Status überprüft haben, damit er im Hintergrund weiter ausgeführt wird.Sie können den Befehl, über den
screen
im Hintergrund ausgeführt werden soll, auch auf einen Schlag ausführen, indem Sie [jemand korrigiert mich bitte, wenn ich falsch liege]screen -dm 'command'
. Vielleicht möchten Sie es,man screen
bevor Sie es mit dem letzten versuchen.BEARBEITEN:
Ich bearbeite meine Antwort, weil Sie bestätigt haben, dass
screen
dies in diesem Szenario keine Unterstützung bietet, aber Sie haben auf meinen Kommentarscp
geantwortet und vorgeschlagen, herauszufinden, welche Ergebnisse Sie erhalten. Darauf haben Sie seltsamerweise geantwortet, dass es einwandfrei funktioniert hat.Meine neue Antwort lautet also: benutze
scp
- oderssh
(mittar
) - stattrsync
Zugegeben,
scp
die große Anzahl von Merkmalen wie nicht unterstütztrsync
werden, würde aber eigentlich nur , wie viele Features zu entdecken , überrascht , dass es funktioniert Unterstützung , die fast ist identisch zu demrsync
.Reale Szenarien für
scp
und andere Alternativen zursync
:Vor einiger Zeit wurde ich beauftragt, ein Shell-Skript zu erstellen, mit dem Protokolle von unseren Produktionsservern abgerufen und lokal auf einem Webserver gespeichert werden, damit Entwickler zur Fehlerbehebung darauf zugreifen können. Nachdem ich erfolglos versucht hatte, das Unix-Team zur Installation
rsync
auf unseren Servern zu bewegen, kam ich auf eine Problemumgehung,scp
die genauso gut funktionierte.Davon abgesehen habe ich das Skript kürzlich so geändert, dass es nur
ssh
undtar
-GNU tar
/ verwendetgtar
, um genau zu sein. GNUtar
unterstützt viele der Optionen , die Sie tatsächlich in findenrsync
, wie zum Beispiel--include
, die--exclude
Erlaubnis / Attribut Erhaltung, Kompression usw.Die Art und Weise, wie ich dies jetzt erreiche, besteht darin,
ssh
auf den Remote-Server (über pubkey auth) zuzugreifen und zu verwendengtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
- dies schreibt alle Informationen instdout
, die dann [lokal] weitergeleitet werden,tar -xzf
damit keine Änderungen auf dem Remote-Produktionsserver vorgenommen werden und alle Dateien werden unverändert auf den lokalen Server gezogen. Es ist eine großartige Alternative zursync
diesem Fall. Das einzige, was weder wichtigtar
nochscp
unterstützt wird, sind inkrementelle Sicherungen und die Ebene der Fehlerprüfung auf Blockebene, die diesersync
Funktionen bietet.Der vollständige Befehl , den ich mich beziehe , bei der Verwendung
ssh
undtar
so etwas wie diese würde (remote ist Solaris 10, lokal ist Debian, für das, was es wert ist ):In Ihrem Szenario wäre es umgekehrt -
tar -cf -
lokal und über einen Pipe an den Remote-Serverssh user@remotehost "tar -xf -"
- es gibt eine andere Antwort, die auf diese Art von Verhalten verweist, aber nicht so detailliert ist.Es gibt einige andere Optionen, die ich aufgenommen habe, um die Dinge zu beschleunigen. Ich habe alles unermüdlich geplant, um die Ausführungszeit so gering wie möglich zu halten. Sie würden denken, dass die Verwendung der Komprimierung mit
tar
sinnlos wäre, aber sie beschleunigt die Dinge tatsächlich ein wenig, ebenso wie die Verwendung des-C
Flags mitssh
, um diessh
Komprimierung zu aktivieren . Ich kann diesen Beitrag zu einem späteren Zeitpunkt aktualisieren, um den genauen Befehl aufzunehmen, den ich verwende (der dem, was ich gepostet habe, sehr ähnlich ist), aber ich habe im Moment keine Lust, auf VPN zuzugreifen, da ich diese Woche im Urlaub bin.Unter Solaris 10 verwende ich es auch
-c blowfish
, da es die schnellste Verschlüsselung ist, mit der man sich authentifizieren kann, und auch dazu beiträgt, die Dinge ein wenig zu beschleunigen, aber unser Solaris 11 unterstützt es entweder nicht oder hat diese Verschlüsselungssuite deaktiviert.Wenn Sie sich für die Option
ssh
/ entscheidentar
, ist es außerdem eine gute Idee, meine ursprüngliche Lösung zu implementieren,screen
wenn Sie ein Backup erstellen , das eine Weile dauert. Wenn nicht, stellen Sie sicher, dass Ihre Keepalive- / Timeout-Einstellungen in Ihremssh_config
genau richtig eingestellt sind. Andernfalls führt diese Methode sehr wahrscheinlich zu einem Rohrbruch.Selbst wenn Sie mitmachen
scp
, finde ich es immer eine bewährte Methode,screen
odertmux
wenn Sie eine Operation dieser Art durchführen, nur für den Fall . Oft folge ich nicht meinen eigenen Ratschlägen und tue dies nicht, aber es ist in der Tat eine gute Praxis, eines dieser Tools zu verwenden, um sicherzustellen, dass der Remote-Job nicht versagt, weil Ihre aktive Shell-Sitzung irgendwie getrennt wird.Ich weiß, dass Sie die Grundursache Ihres
rsync
Problems herausfinden möchten . Wenn dies jedoch wirklich wichtig ist, sind dies zwei großartige Problemumgehungen, mit denen Sie in der Zwischenzeit experimentieren können.quelle
screen
, das Ergebnis ist das gleiche.Kerberos dient nur zur Authentifizierung, die nach dem Herstellen einer erfolgreichen Verbindung keine Probleme verursachen sollte.
Haben Sie auch versucht, den rsync-Daemon zu verwenden?
Befinden sich Ihre Server im selben Netzwerk oder haben Sie eine Firewall / einen Router dazwischen?
Sie können versuchen, eine Netcat-Sitzung zwischen den Servern einzurichten. Dies ist eine einfache Methode, um zu versuchen, ob Verbindungsprobleme zwischen Ihren Servern auftreten.
Auf dem ersten Server:
Und auf dem Kunden
Sie können die Verbindung offen lassen und prüfen, ob die Verbindung erhalten bleibt oder ob Sie die Verbindung verlieren. Sie können auch versuchen, etwas auf den Client zu schreiben, um sicherzustellen, dass es auf der anderen Seite landet.
quelle
netcat
auf jedem Port> 1024Ich hatte das gleiche Problem unter OSX El Capitan und habe es durch ein Upgrade auf rsync v3.11 behoben. Das Problem trat bei mir in Version 2.6.9 auf.
quelle
rsync 3.1.1
.Sie haben etwas auf dem Remote-Server, das in stdout schreibt . Dies könnte in Ihrem
.profile
oder sein.bash_profile
. Es könnte etwas weniger offensichtliches sein wiestty
odermesg
. Kopieren Sie im Zweifelsfall ein Transkript in Ihre Frage, ob Sie sich beim Server anmelden (redigieren Sie den Hostnamen auf jeden Fall).quelle
.profile
oder.bash_profile
zur Überprüfung. Sie suchen nach Dingen wiemesg
oderstty
mesg
oderstty
keine meiner Punktedateien.Das einzige Mal, dass ich ein solches Problem mit rsync hatte, habe ich es auf einen freien Ethernet-Port auf einem anderen Computer zurückgeführt, der dieselbe IP-Adresse wie mein Zielserver hatte. Wenn rsync flockig ist, liegt mit ziemlicher Sicherheit ein Netzwerkzuverlässigkeits- oder (in meinem Fall) Konfigurationsproblem vor.
quelle
Ich traf ein ähnliches Problem beim Laufen
rsync
oder manuell (entweder mitcp
,scp
oder in Gnome Nautilus) das Kopieren von großen Dateien von einem Linux - Desktop auf einen niedrigen angetriebenen ARM - basierten Linux - NAS über ein Gigabit - Kabelnetz (keinkerberos
in meinem Setup). Die NAS-Laufwerke werden gemeinsam genutzt und mithilfe vonsamba
auf dem Client bereitgestelltcifs
. Die Lösung für mich bestand darin, das NAS-Dateisystem ohne Zwischenspeicherung vom Client aus bereitzustellen (siehe auch Manpages von mount.cifs ):Alternativ kann , wenn auf dem Client das NAS - Laufwerks Montag mit
gvfs
innautilus
diesem Problem bestehen bleiben würde nicht , wenn große Dateien zu kopieren (aber das funktioniert nicht in Kombination mitrsync
though).Wenn Sie Linux gleichzeitig mit lokalen Festplattenlesevorgängen in das Netzwerkdateisystem schreiben lassen, wird näher erläutert, warum dieses Problem möglicherweise auftritt.
quelle
Aktualisieren Sie einfach Ihre rsync-Versionen, um sicherzustellen, dass sie auf dem sendenden und dem empfangenden PC genau gleich sind . Siehe meine Antwort hier: /server/883487/unable-to-rsync-due-to-broken-pipe/988794#988794 .
quelle