ホームディレクトリのバックアップに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
コマンドを強制終了する何かがサーバーで実行されている可能性がありますが、その調査方法がわかりません。何か案は?
問題はメモリの不足です。サーバーにとって1GBが大きかったとき、rsyncは大きなデータセットに対して失敗しました。アルゴリズムによってメモリ容量が改善されたのかもしれませんが、8年ほどはその問題は見られませんでした。本当に、これは外見ですが、探索する価値があります。最初に小さいデータセットを試してください。健全性チェックのフォームとして、tar-tarを実行することもできます。
tar cf - $HOME | ssh ${server} tar xf -
alsoが数分後に失敗した場合、それはメモリではありません。
OSX El Capitanでも同じ問題が発生しており、rsync v3.11にアップグレードすることでこれを修正しました。この問題はv2.6.9で発生していました。
Kerberosは認証専用であり、接続が正常に作成された後は問題は発生しません。
Rsyncデーモンも使用してみましたか?
サーバーは同じネットワーク上にありますか、または間にファイアウォール/ルーターがありますか?
サーバー間のnetcatセッションのセットアップを試すことができます。これは、サーバー間の接続に問題がある場合に試す簡単な方法です。
最初のサーバーで:
nc -lk <port-number>
そしてクライアント上で
nc <server> <port-number>
接続を開いたままにして、接続が維持するかどうか、または接続を失うかどうかを確認できます。また、クライアントで何かを書いてみることができます。それが反対側で終わることを確認してください。
rsyncでこのような問題が発生したのはこのときだけで、ターゲットサーバーと同じIPアドレスを持つ別のマシンの予備のイーサネットポートまで追跡しました。 rsyncが不安定な場合、ほぼ確実にネットワークの信頼性または(私の場合)構成の問題です。
rsync
を実行するとき、または手動で(cp
、scp
またはGnome Nautilusを使用して)Linuxデスクトップから低電力のARMベースのLinux NASにギガビットケーブルネットワーク経由で大きなファイルをコピーするときに同様の問題が発生しました(私のセットアップではkerberos
はありません)。 NASドライブはsamba
を使用して共有され、cifs
を使用してクライアントにマウントされます。私にとっての解決策は、キャッシュなしでクライアントからNASファイルシステムをマウントすることでした( mount.cifs のマニュアルページも参照):
Sudo mount -t cifs //server.lan/somedir /mnt/somedir/ -o cache=none
または、gvfs
でnautilus
を使用してクライアントにNASドライブをマウントする場合、大きなファイルをコピーするとこの問題は解決しません(ただし、rsync
と組み合わせて使用すると機能しません)。
Linuxがローカルディスクの読み取りと同時にネットワークファイルシステムに書き込むようにする この問題が発生している理由について詳しく説明します。
stdoutに書き込むリモートサーバー上に何かがあります。これは.profile
または.bash_profile
。 stty
やmesg
のように、あまりわかりにくい場合もあります。疑わしい場合は、サーバーにログインする質問に筆記録をコピーします(必ずホスト名を編集してください)。
Rsyncのバージョンをアップグレードして、送信側と受信側の両方のPCでが完全に同じであることを確認してください。ここで私の答えを参照してください: https://serverfault.com/questions/883487/unable-to-rsync-due-to-broken-pipe/988794#988794 。