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
つまり、私は最近スクリプトを修正しましたが、正確にはjustssh
とtar
- /を使用しました。 GNUは、権限/属性の保存、圧縮など、実際に見つけることができる多くのオプションをサポートしています。GNU tar
gtar
tar
rsync
--include
--exclude
今これを達成する方法はssh
(pubkey認証を介して)リモートサーバーに-ingして使用することですgtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
。 - これはすべての情報を書き込み、stdout
[ローカルに]パイプし、リモートtar -xzf
本番サーバーで変更が発生しないようにし、ドラッグします。すべてのファイルをそのままローカルサーバーに保存します。この場合、これは素晴らしい選択肢ですrsync
。重要でもtar
サポートされていない唯一のものは、増分バックアップとscp
その機能のブロックレベルのエラーチェックレベルですrsync
。
ssh
andを使用するときに言及したコマンド全体は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を使用したくありません。-C
ssh
ssh
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
明確ではないかもしれません。疑わしい場合は、サーバーにログインしている質問に履歴をコピーしてください(ホスト名を必ず編集してください)。stty
mesg