新しいファイルが変更された場合にのみライブラリファイルを更新する

新しいファイルが変更された場合にのみライブラリファイルを更新する

次のシナリオを考えてみましょう。 2台のLinuxコンピュータAとBが常に使用できるわけではなく、特別なハードウェアラジオリンクを介して接続されています。これは、2つのRaspberry Piで発生する可能性があります。どのコンピュータもインターネットにアクセスできません。

Linux A には 1GB の libabc.so というライブラリがあり、Linux B にはこのライブラリのソースコードがあります。 Linux Bのユーザーがソースコードの単一定数を変更し、ライブラリを再コンパイルすると仮定します。

1GBの再コンパイルされたファイル全体を送信せずにLinux BからLinux Aにアップデートを送信する方法やツールはありますか?

どういうわけか使用しようとしていましたが、gitテキスト以外のファイルに対する増分変更を保存しません。私が知っているのは、rsyncファイル全体も同期されます。どちらの場合も、ラジオリンクを介して他のコンピュータのファイルシステムに簡単にアクセスできません。したがって、どちらの場合も、1GBのデータが転送されます。別の解決策は、Linux Aでソースコードを複製して更新することです。しかし、コンパイルに時間がかかり、Linux Bのパフォーマンスがはるかに優れています。

最終的な解決策は、このような軽いツールを直接書くことでした。しかし、すでに何か利用可能なものがあると思います。

ベストアンサー1

私が知っているのは、rsyncファイル全体も同期されます。

ファイルを同期します。ただし、ネットワーク転送のデフォルトの動作は、ファイルがすでに存在する場合はデータ全体を送信するのではなく、ローリングブロックチェックサムを計算して比較することです。これにより、共通点がある場合に送信する必要があるデータ量が減ります。

~からRsyncの仕組みの実際の概要

ファイルをスキップしないと、受信側の既存のバージョンが転送用の「デフォルトファイル」になり、データソースとして使用されます。これは、送信者が送信する必要がある一致するデータを削除するのに役立ちます。データのリモートマッチングを有効にするために、ベースファイルのブロックチェックサムが生成され、ファイルインデックス番号の直後に送信者に送信されます。

...

ブロックチェックサム一致が見つかると、一致ブロックと見なされ、累積された一致しないデータが受信者に送信されます。その後、一致するブロックの受信者ファイル内のオフセットと長さ、ブロックチェックサム、およびジェネレータが送信されます。一致するブロックの後の次のバイトに進みます。

おすすめ記事