rsync 接続は切断され続けます。パイプが壊れています。

rsync 接続は切断され続けます。パイプが壊れています。

rsync私のホームディレクトリのバックアップに使用します。これは長い間実行されてきました。これは私が使用するコマンドです:

rsync \
    -pavz \
    --delete \
    --exclude 'mnt/' \
    --exclude '.cache/' \
    --exclude 'Videos/' \
    --exclude 'Music/' \
    --exclude 'Documents/virtualbox' \
    /home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"

ところで、バックアップしようとしてサーバーを切り替えたら、起動してrsync数秒(最大数分)実行してからエラーメッセージで停止します。

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]

他のサーバーで実行されているため、接続またはサーバー自体に問題があると思われます。接続が安定しているようです。ケーブルで接続しましたが、途切れがありません。また、バックアップ中にサーバーにpingを試みました。バックアップが中断されても、Pingの応答率は100%です。

kerberosリモートサーバーによる認証に使用します。

ServerAliveInterval私は、ServerAliveCountMaxまたは私の組み合わせでいくつかの組み合わせを試しましたが、成功しませんでした。ClientAliveInterval~/.ssh/config

サーバーで実行されている何かが何らかの理由でコマンドを終了する可能性がありますが、rsyncこれを調べる方法がわかりません。どんなアイデアがありますか?

答え1

問題はメモリ不足である可能性があります。サーバーに 1 GB が多い場合、大容量データセットでは rsync が失敗します。おそらくアルゴリズムが改善されてメモリ容量が増えたかどうかはわかりませんが、約8年間このような問題を見たことはありません。もちろん、これは外部の写真ですが、見る価値のある写真です。まず、より小さなデータセットを試してみてください。また、健全性検査の一形態でtar-tarを実行することもできます。

tar cf - $HOME | ssh ${server} tar xf -

もし返品数分後に失敗します。メモリではありません。

答え2

rsync私は過去にこのような状況に直面していました。この問題を解決したソリューションは、screenリモートサーバーへの接続を維持するのに役立つ可能性があるセッションで実行することでした。

screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session

screen -x rsync実行してステータスを確認できます(またはセッション名を何でも指定することにしましたが、名前を指定した場合は必要ありません)。これにより、現在のシェルがセッションに再接続されます。バックグラウンドで実行し続けるように状態を確認してから、再度分離することを忘れないでください。

screen[間違っている場合は修正してください]を実行して、1回の失敗でバックグラウンドで実行されているコマンドを実行することもできますscreen -dm 'command'man screen最後の作業を試みる前にこれを行うことをお勧めします。

編集する:

screenこの場合は、何の助けも提供していないことを確認したので、回答を編集しています。しかし、scpどのような結果が得られるかを確認するよう提案する私のコメントに答えました。答えは奇妙でとてもうまくいきます。 。

だから私の新しい答えは次のとおりです。 scp代わりに - またはssh(と一緒にtar) - を使用してください。rsync

もちろん、scpサポートされていない機能は非常に多いですが、rsync実際にサポートしている機能の数に驚くでしょう。するほぼサポートまったく同じ到着したrsync

実際のシナリオscpおよびその他の代替案rsync:

しばらく前に、本番サーバーからログを取得し、ローカルのWebサーバーに保存するシェルスクリプトを作成することになっていました。これにより、開発者はトラブルシューティングのためにそのログにアクセスできます。 Unixチームがそれを私たちのサーバーにインストールすることに失敗した後、私は同じように動作する解決策をrsync思いつきました。scp

つまり、私は最近スクリプトを修正しましたが、正確にはjustsshtar- /を使用しました。 GNUは、権限/属性の保存、圧縮など、実際に見つけることができる多くのオプションをサポートしています。GNU targtartarrsync--include--exclude

今これを達成する方法はssh(pubkey認証を介して)リモートサーバーに-ingして使用することですgtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]。 - これはすべての情報を書き込み、stdout[ローカルに]パイプし、リモートtar -xzf本番サーバーで変更が発生しないようにし、ドラッグします。すべてのファイルをそのままローカルサーバーに保存します。この場合、これは素晴らしい選択肢ですrsync。重要でもtarサポートされていない唯一のものは、増分バックアップとscpその機能のブロックレベルのエラーチェックレベルですrsync

sshandを使用するときに言及したコマンド全体はtar次のとおりです(リモートはSolaris 10、ローカルはDebianなので価値があります)。

cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz

あなたのシナリオでは正反対です。tar -cf -ローカルからリモートサーバーにパイプされますssh user@remotehost "tar -xf -"。この種の動作を引用する別の答えがありますが、詳細には説明しません。

作業速度を上げるためのいくつかの異なるオプションも含まれていました。実行時間をできるだけ短く保つために、常にすべての時間を測定した。 with圧縮を使用することは意味がないと思うかもしれませんが、withフラグを使用して圧縮を有効にするのtarと同じくらい速くなります。私が使用した正確なコマンドを含めるために後でこの投稿を更新することもできますが(公開されたコマンドとよく似ています)、今週休暇中なので、今はVPNを使用したくありません。-Csshssh

Solaris 10は認証のための最速のパスワードであり、作業速度を向上させるのにも役立ちますので、このパスワードを使用してください。-c blowfishただし、Solaris 11ではこれをサポートしていないか、この暗号スイートが無効になっています。

また、/オプションを使用することを選択した場合は、ssh時間がかかるバックアップを実行する場合は、tar実際に元のソリューションを実装することをお勧めします。screenそうでない場合は、接続の維持/タイムアウト設定が正しく調整されていることを確認してくださいssh_config。そうしないと、このアプローチによってパイプが破損する可能性があります。

を使用することを選択しても、scp私はいつもこの種のタスクを実行するとき、またはをscreen使用するのがベストプラクティスだと思います。tmuxもしかして。多くの場合、私は自分のアドバイスに従わず、そうしません。しかし、アクティブなシェルセッションが切断されたため、リモート操作が実行されないように、これらのツールの1つを使用することは本当に良い習慣です。何らかの方法で質問。

rsync私はあなたが問題の根本的な原因を見つけたいと思っていることを知っています。しかし、これが本当に重要な場合は、同時に試すことができる2つの素晴らしい解決策があります。

答え3

OSX El Capitanで同じ問題があり、rsync v3.11にアップグレードして解決しました。 v2.6.9でこの問題が発生しました。

答え4

リモートサーバーに書き込むことができる内容があります。標準出力。これは.profileまたはにあります。またはなど、あまり.bash_profile明確ではないかもしれません。疑わしい場合は、サーバーにログインしている質問に履歴をコピーしてください(ホスト名を必ず編集してください)。sttymesg

関連情報