私はrsync
それがどのように動作するかを知っています。私の疑いは、rsync
ソースファイルとターゲットファイルの間の異なる部分をパッチする方法です。
異なるチャンクを計算した後、その部分をターゲットに送信します。これで、ターゲットはファイルの途中にどのように挿入されますか?ファイルの途中にバイトを挿入(追加)できないため、以降のすべてのバイトも移動しますか?
推定ソース:ABCDEFGH
目的地:ABCEFGH
rsyncがDが欠落していることを検出したと仮定すると、それをターゲットに送信します。ファイルにDを挿入する方法より。 C の後に EFGH を挿入して移動するか、他の効率的な作業を行うか。どのプログラミング言語でもファイルを変更しないと、ファイルの途中にバイトを挿入できないためです。
答え1
私はrsync
ほとんどの基本的なファイルシステムの制限内で動作するCの実装についてのみ知っています。つまり、「間にある」データは、ファイルサイズがまったく同じ場合にのみ更新できます。
しかし、それは問題ではありません。セキュリティ上の理由から、rsync
変更されたデータのコピーを作成してコピーに移動します。それが完全な場合にのみ。rsync
通常、既存のファイルを更新する試みはなく、プロセスが中断されると破損する危険性があります。
--delay-updates
アップデートプロセスはマニュアルページを確認する必要があります。このオプションを使用すると、1回の実行に変更する必要があるすべてのファイルが完了するまで名前の変更を延期してから名前を変更できます。