簡単に言うと:

簡単に言うと:

一度はrsync大量のファイルをコピーしましたが、オペレーティングシステム(Ubuntu)が予期せず再起動されました。

sudo rsync -azvv /home/path/folder1/ /home/path/folder2

再起動後にrsync再実行してみましたが、ターミナル出力結果以前にコピーしたrsync内容がコピーされ続けていることを確認しました。ところが、ソースとターゲットの違いを見つけることは可能だと聞いたので、rsync違いだけをコピーすればいいです。

ソースとターゲットの両方がNTFSです。ソースは外付けHDD、ターゲットは内蔵HDDです。

rsync私の場合は、前回残りの部分を復元できるかどうか疑問に思います。

答え1

まず、質問の「復元」部分については--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新しいオプションがあります。これはおそらくあなたがいつもあなたが望む動作です。したがって、バージョンを確認してください。 Macを使用していてfromを使用していない場合(少なくともEl Capitanまで)、以前のバージョンを使用するので、代わりにそのバージョンを使用する必要があります。なぜ彼らが新しい人に名前を付けるのではなく、このような行動を続けなかったのかは、やや疑問です。いずれにしても、以前のバージョン3は最新バージョンと同じです。--append-verify--append--append-verifyrsync --versionrsynchomebrew--append--append-verify--append--append-no-verify--appendrsync--append-verify

--append-verify危険ではありません。単に同じと仮定するのではなく、常に両端のデータを読み取って比較します。これにはチェックサムを使用するため、ネットワークでは簡単ですが、宛先に加えて実際に転送を再開するには、回線の両端で共有されるデータ量を読み取る必要があります。

第二に、「rsyncがオリジナルとターゲットの違いを見つけることができるので、違いをコピーするだけだと聞きました」と言いました。

はい、増分転送と呼ばれますが、別の意味です。この機能を有効にするには-c、または--checksumスイッチを追加してください。このスイッチを使用すると、rsync は行の両端にファイルがあることを確認します。これをチャンクで行い、両端のチェックサムを比較し、異なる場合はファイルの他の部分のみを送信します。しかし、@Jonathanが以下で指摘したように、比較はファイルの両端のサイズが同じ場合にのみ実行されます。サイズが異なると、rsyncはファイル全体をアップロードして同じ名前のターゲットを上書きします。

最初は両端でいくつかの計算が必要ですが、非常に大きなファイルや通常は小さな変更を含む固定サイズのファイルを頻繁にバックアップする場合は、ネットワーク負荷を軽減するのに非常に効果的です。浮上の例には、仮想マシンまたはiSCSIターゲットに使用される仮想ハードドライブイメージファイルがあります。

--checksumまったく新しいファイル配置をターゲットシステムに転送するためにこれを使用する場合、rsyncはファイルを転送する前にソースシステムでチェックサムを計算し続けることに注意する価値があります。なぜ知らない:)

簡単に言うと:

rsync を頻繁に使用して「A から B への項目の移動」を行い、その操作をキャンセルして後で再起動するオプションが必要な場合は、いいえを使う--checksumする使用--append-verify

rsyncを頻繁に使用してアイテムをバックアップする場合は、サイズが大きくなりますが、作成後--append-verifyにほとんど変更されない大容量ファイルの送信に慣れていない限り、rsyncを使用することはおそらく大きな助けにはなりません。追加のヒントとして、スナップショット対応ストレージ(例:btrfsまたはzfs--inplace

を使用すると、--append-verifyrsyncは同じサイズのすべてのファイルで動作するように動作します。変更や他のタイムスタンプが異なる場合は、ファイルを確認せずにターゲットをソースで上書きします。--checksum同じ名前とサイズを持つ各ファイルペアの内容(チェックサム)が比較されます。

2015-09-01に更新@Alexが作成したポイントを反映するように変更されました(ありがとうございます!)

2017-07-14に更新@Jonathanが書いた点を反映するように変更されました(ありがとうございます!)

答え2

簡単に言うと:

rsyncのマニュアルページで提案されているように、ディレクトリの一部を指定してください。

--partial-dir=.rsync-partial

詳細な説明:

実際には、オプションを使用してこれを実行する組み込み関数があります。これは、and / alternative--partial-dirと比較していくつかの利点があります。--partial--append-verify--append

rsyncのマニュアルページから抜粋:

--partial-dir=DIR
      A  better way to keep partial files than the --partial option is
      to specify a DIR that will be used  to  hold  the  partial  data
      (instead  of  writing  it  out to the destination file).  On the
      next transfer, rsync will use a file found in this dir  as  data
      to  speed  up  the resumption of the transfer and then delete it
      after it has served its purpose.

      Note that if --whole-file is specified (or  implied),  any  par-
      tial-dir  file  that  is  found for a file that is being updated
      will simply be removed (since rsync  is  sending  files  without
      using rsync's delta-transfer algorithm).

      Rsync will create the DIR if it is missing (just the last dir --
      not the whole path).  This makes it easy to use a relative  path
      (such  as  "--partial-dir=.rsync-partial")  to have rsync create
      the partial-directory in the destination file's  directory  when
      needed,  and  then  remove  it  again  when  the partial file is
      deleted.

      If the partial-dir value is not an absolute path, rsync will add
      an  exclude rule at the end of all your existing excludes.  This
      will prevent the sending of any partial-dir files that may exist
      on the sending side, and will also prevent the untimely deletion
      of partial-dir items on the receiving  side.   An  example:  the
      above  --partial-dir  option would add the equivalent of "-f '-p
      .rsync-partial/'" at the end of any other filter rules.

デフォルトでは、rsync は転送が失敗した場合に削除されるランダムな一時ファイル名を使用します。前述のように、--partialrsyncを使用すると不完全なファイルを保存できます。転送が成功したように--append-verify後で/オプションを使用して--append追加できます。しかし、このような状況が最適ではない理由はいくつかあります。

  1. バックアップファイルが不完全である可能性があり、リモートファイル(まだ変更されていないファイル)を確認せずに知る方法はありません。

  2. --backupとを使用しようとすると、--backup-dir以前のバージョン履歴に存在しなかったファイルの新しいバージョンが追加されました。

ただし、--partial-dirrsyncを使用すると一時的な部分ファイルを保持し、その部分ファイルを使用して次回実行するとダウンロードを続行するため、上記の問題は発生しません。

答え3

-Pこのオプションをコマンドに追加できます。

manページから:

--partial By default, rsync will delete any partially transferred file if the transfer
         is interrupted. In some circumstances it is more desirable to keep partially
         transferred files. Using the --partial option tells rsync to keep the partial
         file which should make a subsequent transfer of the rest of the file much faster.

  -P     The -P option is equivalent to --partial --progress.   Its  pur-
         pose  is to make it much easier to specify these two options for
         a long transfer that may be interrupted.

だから代わりに:

sudo rsync -azvv /home/path/folder1/ /home/path/folder2

する:

sudo rsync -azvvP /home/path/folder1/ /home/path/folder2

もちろん、進行状況を更新したくない場合は、直接使用できます--partial。つまり、次のようになります。

sudo rsync --partial -azvv /home/path/folder1/ /home/path/folder2

答え4

いくつかの重要なルール:

  1. rsync-W, --whole-fileオプションが提供されていない限り、delta-xferアルゴリズムを使用して他のチャンクを再送信するかどうかを決定します。
  2. rsync--inplaceオプションがない場合は、データを一時ディレクトリに書き込み、完了するとターゲットに移動します。
  3. delta-xferが有効な場合、部分的に送信されたデータブロックのチェックサム計算をスキップする--appendオプションを追加できますが、部分的に送信されたデータのIDを直接確認する必要があります。
  4. --appendを意味し、--inplaceそれ自体は次のことを意味します。--partial

私の場合は、CPUとディスク負荷をあまり与えずにデルタファイルを送信したいと思います。コマンドは次のとおりです。

rsync -avPL --inplace --append --bwlimit 30m -e 'ssh -o StrictHostKeyChecking=no' <src> <dst>

関連情報