
ディレクトリをリモートサーバーのディレクトリに同期する必要があります。現在、rsync -ca
これは定期的に実行されますが、ディレクトリは非常に大きく、タイムアウトエラーが原因でプロセス全体が失敗します。
これで、「ワンタイム」ではなくファイル同期を介してファイルを探しています。find
見つかった各サーバーに似ていますrsync
。これを行う最も簡単な方法は何ですか?
次のエラーが発生します。
receiving incremental file list
Write failed: Broken pipe
rsync: connection unexpectedly closed (1175057 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(601)[receiver=3.0.7]
rsync: connection unexpectedly closed (287 bytes received so far) [generator]
rsync error: unexplained error (code 255) at io.c(601) [generator=3.0.7]
答え1
サーバーがSSH接続レベルでタイムアウトしているようです。
だから、次の設定を追加しました。
KeepAlive yes
ServerAliveInterval 20
ServerAliveCountMax 6
/etc/ssh/ssh_config
(または)に~/.ssh/config
今有望に見えます。
答え2
更新:チェックサムを作成するときにrsyncがタイムアウトしているように見えるので、次のように動作できるいくつかの異なるアプローチがあります。
最初に1つのrsyncだけを開いたままにするには(Michael Kjörlingが言及したものに加えて)、このオプションを使用できます--sockopts
。これにより、SO_RCVTIMEOUT=0
データ受信タイムアウトの無効化など、コードからソケットを生成するときに設定したのと同じタイプのソケットオプションを設定できます。
第二に、この--progress-file
オプションは進捗情報を継続的に再送信してタイムアウトをトリガーしないようにすることができます。
第三に、ファイルごとの同期を実行できます。たとえば、次のようになります。
for i in ls /path/to/dir; do rsync -ca $i remoteserver:/path/to/dir; done
第四に、sshを転送メカニズムとして使用し、接続を維持するために適切な方法でおよびTCPKeepAlive
/ServerAliveInterval
オプションを使用できます。ServerAliveCountMax
元の答え: すでにrsyncするファイル固有のアプローチ - 同期するファイルリストの各ファイルを確認して、ターゲットシステムに存在しないか、ターゲットシステムのファイルとは異なるファイルのみを同期します。
転送時間を短縮する1つの方法は、-z
オプションとフラグを使用して転送中に圧縮し、転送が中断された--partial
場合に部分的に同期されたファイルを維持し、rsyncが元の場所から続行できるようにすることです。 Michael Kjörlingが言及した --timeout オプションと --contimeout オプションも便利です。
答え3
たぶんこんなことはありませんか?
find . -type f -exec 'rsync' '{}' ';'
これは、現在のディレクトリの各一般ファイルに対してrsyncを一度実行し、ファイル名(tokenで示される{}
)をコマンドライン引数として渡します。
関連ディレクトリにシンボリックリンク、デバイスファイルなどがある場合は、論理を逆に試すことができます。
find . -not -type f -exec 'rsync' '{}' ';'
これは、要求された操作を実行するという意味で「動作」する必要があります(ファイルごとに1回rsyncを起動します)。しかし、私はあなたが間違った方向に行っていると思います。
rsyncのマニュアルページには、grep forの--timeout
(I / Oタイムアウト)と(接続タイムアウト)がリストされています。--contimeout
timeout
答え4
私にとっては、遅い接続を介して大規模なrsync転送を再開しても、これは起こり続けます。私はsshのすべての問題を避けるためにrsyncdを使用します。
-z
圧縮(または--compress
)を有効にすると問題が解決することがわかりました。転送はほぼ直ちに再開されます。