
一度は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-verify
rsync --version
rsync
homebrew
--append
--append-verify
--append
--append-no-verify
--append
rsync
--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-verify
rsyncは同じサイズのすべてのファイルで動作するように動作します。変更や他のタイムスタンプが異なる場合は、ファイルを確認せずにターゲットをソースで上書きします。--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 は転送が失敗した場合に削除されるランダムな一時ファイル名を使用します。前述のように、--partial
rsyncを使用すると不完全なファイルを保存できます。転送が成功したように--append-verify
後で/オプションを使用して--append
追加できます。しかし、このような状況が最適ではない理由はいくつかあります。
バックアップファイルが不完全である可能性があり、リモートファイル(まだ変更されていないファイル)を確認せずに知る方法はありません。
--backup
とを使用しようとすると、--backup-dir
以前のバージョン履歴に存在しなかったファイルの新しいバージョンが追加されました。
ただし、--partial-dir
rsyncを使用すると一時的な部分ファイルを保持し、その部分ファイルを使用して次回実行するとダウンロードを続行するため、上記の問題は発生しません。
答え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
いくつかの重要なルール:
rsync
-W, --whole-file
オプションが提供されていない限り、delta-xferアルゴリズムを使用して他のチャンクを再送信するかどうかを決定します。rsync
--inplace
オプションがない場合は、データを一時ディレクトリに書き込み、完了するとターゲットに移動します。- delta-xferが有効な場合、部分的に送信されたデータブロックのチェックサム計算をスキップする
--append
オプションを追加できますが、部分的に送信されたデータのIDを直接確認する必要があります。 --append
を意味し、--inplace
それ自体は次のことを意味します。--partial
私の場合は、CPUとディスク負荷をあまり与えずにデルタファイルを送信したいと思います。コマンドは次のとおりです。
rsync -avPL --inplace --append --bwlimit 30m -e 'ssh -o StrictHostKeyChecking=no' <src> <dst>