私はそのようなスクリプトを使用しています:
rsync -avu --delete --progress user@Host:~/backup .
そして毎回、しばらくすると、このエラーを受け取ります:
rsync: connection unexpectedly closed (10251754 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.0]
rsync: connection unexpectedly closed (45482 bytes received so far) [generator]
rsync error: unexplained error (code 255) at io.c(226) [generator=3.1.0]
# generator = Debian 5, rsync version 3.0.3 protocol version 30 (Generator[A])
# receiver = Ubuntu 14.04, rsync version 3.1.0 protocol version 31 (Receiver[A])
私はrsync
で10年以上の経験があります。すべてを試しましたが、なぜそれが起こるのかわかりません。
両側:ログにエラーはありません、tcpdumpに奇妙なこと、接続の問題、ファイアウォールはありません。しばらくすると、転送が突然停止します。
問題は1台のサーバーに限定されません。
Rsyncのバージョン間で互換性がないと考えられたため、完全に異なるサーバーファームでジェネレーターを新しい新しいサーバー(Debian 8)に切り替え、レシーバーでrsyncを更新しましたが、次のエラーが発生します。
rsync: connection unexpectedly closed (31931964 bytes received so far) [receiver]
rsync: [generator] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [generator=3.1.2]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.2]
# generator = Debian 8, rsync version 3.1.1 protocol version 31 (Generator[B])
# receiver = Ubuntu 14.04, rsync version 3.1.2 protocol version 31 (Receiver[B])
次に、プロキシを介してReceiver [A]をGenerator [B]と同期させてみました
Receiver[A](Italy) <=> HTTP Proxy(Paris) <=> Generator[B](Strasbourg)
だから今私は持っています
Receiver[A] <=> Generator[A] // ERROR
Receiver[A] <=> Generator[B] // ERROR
Receiver[B] <=> Generator[B] // ERROR
Receiver[A] <=> HTTP Proxy <=> Generator[A] // OK
Receiver[A] <=> HTTP Proxy <=> Generator[B] // OK
HTTPプロキシなしでも試してみました
Receiver[A] <=> Generator[C] // OK
Receiver[A] <=> Generator[D] // OK
Receiver[A] <=> Generator[E] // ERROR
ここで、ジェネレータ[C]
、[D]
、および[E]
は、パリのサーバー(私のHTTP Proxy
と同じサーバーファーム)にrsync 3.0.9, prot. v. 30
を付けたものです。
だからここの一番下の行は:複数の場所に複数のサーバーがあります。 Receiver[A]
にはファイアウォールがなく、数日前からうまく機能しています。 rsync
がunexplained error
を返しましたが、その理由を理解できません。
これは物理的なネットワークエラー(私のマシンではありません)の王様だと思いますが、このエラーを見つけて切り分け、再現できるかどうかはわかりません。
ご協力いただきありがとうございます!
問題を特定するのに苦労しているようですが、問題の再現に問題はありません。この場合、SSH接続自体と、それを介して取得しているデータのトラブルシューティングを行うと役立つ場合があります。
以下のようにrsync
コマンドを実行すると、データデュが生成されます。
rsync -e 'bash -x -c "ssh -vvvv $0 $@ 2>/tmp/rsync-ssh.stderr | tee /tmp/rsync.stdout"' -avu --delete --progress user@Host:~/backup .
それらのファイルの最後を見ると、何か役に立つかもしれません。たとえば、SSH接続が中断された場合、/tmp/rsync-ssh.stderr
に何かが表示されます。そして、それが実際に反対側の問題である場合、/tmp/rsync.stdout
の実際のrsyncプロトコルダンプに文字列化されたヒント(strings /tmp/rsync.stdout
)が含まれている可能性があります。
推測する必要がある場合、それは厄介なファイアウォールか、SSH接続のドロップを引き起こすパケットの破損の物理的な問題のいずれかです。
rsync
は、サーバーのディスクが追いつくよりも速くディスクキャッシュに書き込む可能性があります。たとえば、 https://unix.stackexchange.com/a/を参照してください。 331189/163108 詳細な説明について、および https://unix.stackexchange.com/a/523896/163108 を使用した場合の類似の問題で異なるケースについてはrsync
samba
/cifs
マウントされたドライブ。
可能な解決策は、--bwlimit=
オプションを使用してrsync
を調整することです。サーバーのネットワーク/ディスクパフォーマンスに応じて、2000〜10000(キロビット/秒)の値を試すことをお勧めします。