まず、質問の「再開」部分について、--partial
送信側が完全に転送されたように見えなくなった場合、部分的に転送されたファイルを保持するように受信側に指示します。
ファイルの転送中、ファイルは一時的に隠しファイルとしてターゲットフォルダー(例:)に保存される.TheFileYouAreSending.lRWzDC
か、--partial-dir
スイッチを設定した場合は特別に選択されたフォルダーに保存されます。転送が失敗して--partial
設定されていない場合、この隠しファイルはこの暗号名の下のターゲットフォルダーに残りますが、--partial
設定されている場合、ファイルは実際のターゲットファイル名(この場合はTheFileYouAreSending
)に名前が変更されます完全ではありません。ポイントは、--append
またはでrsyncを再度実行することで、後で転送を完了できることです--append-verify
。
したがって、失敗した転送またはキャンセルされた転送自体は再開され--partial
ません。再開するには、次の実行時に前述のフラグのいずれかを使用する必要があります。そのため、ターゲットに正常に表示されるが実際には不完全なファイルが含まれないようにする必要がある場合は、を使用しないでください。逆に、ターゲットディレクトリに隠されている失敗したファイルを残さないようにし、後で転送を完了することができることを確認したい場合は、お手伝いします。--partial
--partial
--append
上記のスイッチに関して、これは実際の「再開」スイッチであり、を使用しているかどうかに関係なく使用できます--partial
。実際、を使用している場合--append
、一時ファイルは作成されません。ファイルはターゲットに直接書き込まれます。この点で、失敗した転送--append
と同じ結果が得られますが、--partial
これらの隠された一時ファイルは作成されません。
要約すると、大きなファイルを移動していて、キャンセルまたは失敗したrsync操作をrsync
停止した正確なポイントから再開するオプションが必要な場合、次の試行で--append
またはを使用する必要があります--append-verify
。
以下に@Alexが指摘しているように、バージョン3.0.0 rsync
には新しいオプションがあり--append-verify
、--append
スイッチが存在する前と同じように動作します。おそらく常に動作をしたい--append-verify
ので、バージョンを確認してくださいrsync --version
。あなたがMac上でだと使用していない場合rsync
からhomebrew
、あなたは(少なくともエルキャピタンまでを含む)の古いバージョンを持って使用する必要があります--append
のではなく--append-verify
。なぜ彼らが振る舞いを続けず--append
、代わりに新人--append-no-verify
と名付けられたのかは少し不可解です。いずれにしても、バージョン3 --append
よりrsync
前--append-verify
は新しいバージョンと同じです。
--append-verify
危険ではありません。単に等しいと仮定するだけでなく、常に両端のデータを読み取って比較します。チェックサムを使用してこれを行うため、ネットワーク上では簡単ですが、ターゲットに追加することによって実際に転送を再開する前に、ワイヤの両端で共有データ量を読み取る必要があります。
第二に、「rsyncがソースとデスティネーションの違いを見つけることができ、その違いをコピーするだけだ」とあなたは言った。
それは正しいことであり、デルタ転送と呼ばれますが、それは別のものです。これを有効にするには、、-c
または--checksum
スイッチを追加します。このスイッチが使用されると、rsyncは回線の両端に存在するファイルを調べます。これをチャンクで行い、両端のチェックサムを比較し、それらが異なる場合は、ファイルの異なる部分のみを転送します。しかし、@ Jonathanが以下で指摘するように、比較はファイルの両端が同じサイズの場合にのみ行われます。サイズが異なるとrsyncがファイル全体をアップロードし、ターゲットを同じ名前で上書きします。
これには最初は両端で少しの計算が必要ですが、たとえば小さな変更を頻繁に含む固定サイズのファイルを頻繁にバックアップする場合など、ネットワークの負荷を軽減するには非常に効率的です。思い浮かぶ例は、仮想マシンまたはiSCSIターゲットで使用される仮想ハードドライブイメージファイルです。
--checksum
ターゲットシステムにまったく新しいファイルのバッチを転送するために使用する場合、rsyncは転送前にソースシステムでチェックサムを計算することに注意してください。なぜわからないのか:)
つまり、要するに:
頻繁にrsyncを使用して「ものをAからBに移動する」だけで、その操作をキャンセルして後で再開するオプションが必要な場合は、を使用せずにを使用--checksum
してください--append-verify
。
rsyncを使用して頻繁にバックアップを--append-verify
行う場合、サイズは継続的に大きくなりますが、一度書き込まれるとめったに変更されない大きなファイルを送信する習慣がない限り、おそらく使用してもあまり効果はありません。おまけのヒントとして、btrfs
またはなどのスナップショットをサポートするストレージにバックアップする場合zfs
、--inplace
スイッチを追加すると、変更されたファイルは再作成されず、変更されたブロックが古いブロックに直接書き込まれるため、スナップショットサイズを削減できます。このスイッチは、わずかな変更のみが発生したときに、ターゲット上でファイルのコピーを作成するrsyncを回避する場合にも役立ちます。
を使用する場合--append-verify
、rsyncは同じサイズのすべてのファイルで常に行うように動作します。変更または他のタイムスタンプが異なる場合、それらのファイルをさらに詳しく調べることなく、ターゲットをソースで上書きします。--checksum
同じ名前とサイズのすべてのファイルペアの内容(チェックサム)を比較します。
更新済み2015-09-01 @Alexによるポイントを反映するように変更(ありがとう!)
更新済み2017-07-14 @Jonathanによるポイントを反映するように変更(ありがとう!)