破損したコピーを続行するとき、rsyncはどの一時ファイルを使用しますか?

破損したコピーを続行するとき、rsyncはどの一時ファイルを使用しますか?

「ソース側」では、以下を実行しています。

rsync -azP file.txt username@target:/root/

一度中断し(CTRL + C)、同じコマンドを実行する必要があります。

「宛先側」で次のファイルを見ることができます。

username@target:/root> ls -lah|grep -i file.txt
-rw-r--r-- 1 username group 120G May  3 16:32 file.txt
-rw------- 1 username group 342G May  8 12:47 .file.txt.yISk8R
username@target:/root> 
  • file.txt: 私の考えでは、(?) rsync を一度中断する前に既に送信された部分のようです。

  • .file.txt.yISk8R:私の考えでは、(?)ワンタイムrsync割り込みが発生した後に送信される部分のようです。

  • SLES12でrsync-3.1.0-12.1.x86_64を使用する

キュー:ターゲット側のこれら2つのファイルは何ですか?

その後、rsyncが完了すると、「.file.txt.yISk8R」が「file.txt」に追加されますか?

それとももっと複雑ですか? :

「.file.txt.yISk8R」の先頭が元の「file.txt」と同じに見えるため、規則が異なる場合があります。

source:/root # head -1 file.txt|strings|head -1
A_.o
source:/root #

username@target:/root> head -1 .file.txt.yISk8R|strings|head -1
A_.o
username@target:/root>

username@target:/root> head -1 file.txt|strings|head -1
f/o*d
username@target:/root> 

転送中に「.file.txt.yISk8R」が大きくなるのがわかります。

でもhttps://linux.die.net/man/1/rsync

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-z, --compress              compress file data during the transfer
-P                          same as --partial --progress
->
    --partial               keep partially transferred files
    ->
        --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.

元の目的は、これらのファイルが「ターゲット」にコピーされている間、「ターゲット」から別の「ターゲット2」に渡すことです。 ".file.txt.yISk8R"ファイルのコピーを開始する必要がありますか?それでは、「file.txt」のサイズが120Gの理由は何ですか?それともどのような方法でデータが重複していますか?

2019年5月13日更新:これは、ほとんど重複しているようです... したがって、600 GBのファイルをコピーし、例:500 GBで中断すると、rsyncが「-と互換性がないため、ターゲット側に少なくとも1100 GBのストレージ容量が必要です。azP」はほとんど重複したファイル(.file.txt.xxxxxとfile.txt)を生成します。なぜ小さなブロックのハッシュを実行してから、同じハッシュがない最後のブロックに基づいて進行しないのですか?

答え1

プロセスに関するいくつかの背景情報を読むことができます。https://rsync.samba.org/how-rsync-works.html(特に「受信者」セクションで)

ターゲット側のこれら2つのファイルは何ですか?

(最近)同期を開始する前に、最初のファイルがすでに存在していました。以前に同期したことがありますか?デフォルトオプションが使用されていると仮定すると、rsync同期が完了したと見なされるまで、そのオプションはそのまま残ります。

2番目のファイルは、最新の同期中に使用された一時ファイルです。デフォルトオプションを使用すると、次回実行時にその時点で選択されます。

その後、rsyncが完了すると、「.file.txt.yISk8R」が「file.txt」に追加されますか?

習慣。既存の「file.txt」を削除し、一時ファイルの名前を新しい「file.txt」に変更します。

転送中に「.file.txt.yISk8R」が大きくなるのがわかります。

はい。ファイル転送はアトミックではありません。これが隠されたファイル名が使用される理由です。一般的な状況では、このファイルが変更または不完全になる可能性があるため、このファイルにアクセスしたくありません。

処理を続行するには、一時ファイルを無視する必要があります。 「file.txt」をコピーしてください。この文書は常に一貫して完全でなければなりません(常に最新ではありません)。

関連情報