web-dev-qa-db-ja.com

rsyncによる単一ファイルの転送を再開します

Ubuntuでは、大きなファイルをハードドライブからリムーバブルドライブにrsyncでコピーしたいと思います。その他の理由により、操作は1回の実行で完了できません。だから私はrsyncを使って前回中断したところからファイルのコピーを再開する方法を理解しようとしています。

オプション--partialまたは--inplaceを使用しようとしましたが、--progressとともにrsync--partialまたは--inplaceで実際に開始することがわかりました前回残ったものからではなく、最初から。手動でrsyncを早期に停止し、受信したファイルのサイズを確認しても、私が見つけたことが確認されました。

しかし、--appendを使用すると、rsyncは前回残ったものから始まります。

man page--partial--inplace、および--appendで見たように混乱しています。前回残ったものからのコピーの再開に関連しているようです。誰かが違いを説明できますか?コピーの再開で--partialまたは--inplaceが機能しないのはなぜですか?コピーを再開するには、rsync--appendオプションを使用する必要があるのは本当ですか?

また、部分的なファイルがrsyncではなくmvまたはcpによって残された場合、rsync --appendはファイルのコピーを正しく再開しますか?

52
Tim

中断されたコピーを再開するには、rsync --appendを使用する必要があります。 manページの--appendの説明から:

これにより、rsyncはファイルの末尾にデータを追加してファイルを更新します受信側に既に存在するデータは送信側のファイルの先頭と同一であると想定しています。 [ ...]暗黙の--inplace、[...]

オプション--inplacersyncに宛先ファイルの内容を直接(上書き)書き込みます。 なし--inplacersyncは次のようになります:

  1. 一時的な名前で新しいファイルを作成し、
  2. 更新されたコンテンツをそれにコピーし、
  3. それを宛先ファイルと交換し、最後に
  4. 宛先ファイルの古いコピーを削除します。

通常の操作モードは、宛先ファイルを開いている可能性のあるアプリケーションとの競合、およびrsyncマンページに正式にリストされているその他のいくつかの事故を主に防ぎます。

手順1.〜3.でコピー/更新操作が失敗した場合は注意してください。上記の場合、rsyncは一時的な宛先ファイルを削除します。 --partialオプションはこの動作を無効にし、rsyncは部分的に転送された一時ファイルを宛先ファイルシステムに残します。したがって、最初のrsync--partialまたは--partial-dir--partialと同じ効果に加え、rsyncは、特定のディレクトリにすべての一時ファイルを作成します)。

39
Riccardo Murri

--append--inplaceを意味し、それ自体は--partialを意味することに注意してください。

  • --partialを使用するだけで、rsyncに部分的な転送を残し、以降の試行でそれらを再開する必要があります。

  • --appendを使用することで、rsyncに部分的なファイルを残させ、次回それらを再開させる必要があります。転送後、rsyncは送信されたデータのチェックサムのみを検証する必要があります。

  • --append-verifyは、以前の転送で転送された部分を含む、ファイル全体をチェックサム検証に含めます。

  • --appendまたは--append-verifyのいずれかを使用すると、チェックサム検証に失敗すると、ファイルが完全に再送信されます(--inplaceを使用)

mvまたはcp操作はrsyncで再開できるはずですが、安心して--append-verifyオプションを使用することもできます。

--appendを使用すると、rsyncは、レシーバー上のサイズが上のサイズよりも短いファイルのみをコピーすることに注意してください。送信者(タイムスタンプに関係なく)、または受信者に存在しない。このオプションに関するドキュメント:

ファイルを転送する必要があり、受信側のファイルのサイズが送信側のサイズと同じかそれより長い場合、ファイルはスキップされます。

詳細は man page にあります

21
TomG

デビッドシュワルツは正しいです、--partial(またはより良い、-P)はあなたが望むことをします。ネットワーク経由で〜8gに停止された37Gファイルでこれを確認しました。 rsyncは、パーシャルの最初の部分をすばやくスキャンし(-Pのおかげで進行状況を示しています)、パーシャルファイルの最後まで転送を再開しました。

6
Steve Byrne

あなたは正しくやっていた--partialはあなたがやりたいことをします。コピーする必要があるファイルデータチャンクのリストの先頭から常に開始されるため、最初から開始されているように見えます。 --appendオプションは危険であり、データが何らかの理由で一致しない場合、ファイルが破損します。

2
David Schwartz

デフォルトでは、ローカルディスクからローカルディスクに転送する場合、rsync--whole-fileを有効にします。これにより、中断された転送が最初から再開されます。すでにそこにあるパーツをチェックするのではありません。

これを無効にするには、次を使用します:

--no-whole-file

これを--inplaceまたは--partialと組み合わせると、後で転送を再開できます。

rsyncを使用してコピーするための私のエイリアスは次のとおりです。

rscp='rsync -ax --inplace --sparse --no-whole-file --protect-args'

警告--append-verifyの使用に注意してくださいスキップ同じサイズ以上の宛先ファイル。

1
Tom Hale