途中で違いが発生した場合、rsyncパッチファイルはどうなりますか?

途中で違いが発生した場合、rsyncパッチファイルはどうなりますか?

私はrsyncそれがどのように動作するかを知っています。私の疑いは、rsyncソースファイルとターゲットファイルの間の異なる部分をパッチする方法です。

異なるチャンクを計算した後、その部分をターゲットに送信します。これで、ターゲットはファイルの途中にどのように挿入されますか?ファイルの途中にバイトを挿入(追加)できないため、以降のすべてのバイトも移動しますか?

推定ソース:ABCDEFGH

目的地:ABCEFGH

rsyncがDが欠落していることを検出したと仮定すると、それをターゲットに送信します。ファイルにDを挿入する方法より。 C の後に EFGH を挿入して移動するか、他の効率的な作業を行うか。どのプログラミング言語でもファイルを変更しないと、ファイルの途中にバイトを挿入できないためです。

ベストアンサー1

私はrsyncほとんどの基本的なファイルシステムの制限内で動作するCの実装についてのみ知っています。つまり、「間にある」データは、ファイルサイズがまったく同じ場合にのみ更新できます。

しかし、それは問題ではありません。セキュリティ上の理由から、rsync変更されたデータのコピーを作成してコピーに移動します。それが完全な場合にのみrsync通常、既存のファイルを更新する試みはなく、プロセスが中断されると破損する危険性があります。

--delay-updatesアップデートプロセスはマニュアルページを確認する必要があります。このオプションを使用すると、1回の実行に変更する必要があるすべてのファイルが完了するまで名前の変更を延期してから名前を変更できます。

おすすめ記事