正確なコピーの冗長転送を防ぐためのrsync

正確なコピーの冗長転送を防ぐためのrsync

まず、ローカルコンピュータに構築され、次にターゲットコンピュータに同期して起動されたマイクロサービスが100を超えます。

すべてのマイクロサービスは共有fat.jarファイルを使用し、名前を変更して配布フォルダに保存します。

/serviceA
  /a.jar
/serviceB
  /b.jar
...

サーバーにrsyncすると、rsyncはすべてのjarファイル(フルデプロイの99%)がまったく同じfat.jarであることを確認できません。したがって、rsyncがより賢い場合は、実際には1つのa.jarのみを送信して他のすべてのファイルにコピーできます(サイズとハッシュがまったく同じであるため)。

これはrsyncに関連している可能性がありますか?それとも別の解決策を見つける必要がありますか?特にインターネット接続が良くない場合、配信速度が大幅に遅くなります!

答え1

fat.jar各サーバーの元のファイル名を変更しないでください。

別の名前でファイルにアクセスする必要がある場合は、ファイルへのシンボリックリンクを作成します。

のためserviceA

ln -s fat.jar a.jar

のためserviceB

ln -s fat.jar b.jar

答え2

いくつかあります重複排除これを行うことができるツールです。インストールするとサポート、ローカルシステムとリモートシステムの両方でシステム用のパッケージとして使用できますtar

名前の変更、ハードリンク、またはソフトリンクを介してソースをまったく変更する必要はありません。以下は、大容量ファイルを作成してA、B、Cの3つのディレクトリにコピーするサンプルスクリプトです。その後、圧縮されていないディレクトリはzbackupリポジトリ、そして伝統的な圧縮tarが何であるかを見てください。通常、この段階でリポジトリはリモートでコピーされ、そこから解凍されますが、スクリプトはtarを介して新しいディレクトリに解凍して元のディレクトリと比較することができます。

ZB=/tmp/zrepo
cd /tmp/; mkdir try; cd try
dd count=5000 if=/dev/urandom of=file
for dir in A B C
do  mkdir $dir
    date >$dir/a
    cp file $dir/b$dir
done
ls -l /tmp/try/*/*
zbackup init --non-encrypted $ZB
tar cf - A B C  | zbackup backup --non-encrypted $ZB/backups/x
du -bs $ZB
tar czf - A B C | wc -c
cd /tmp; mkdir copy; cd copy
zbackup restore --non-encrypted $ZB/backups/x | tar xf -
ls -l /tmp/copy/*/*

以下はいくつかの結果です。ご覧のとおり、リポジトリは2632045バイトのみを占め、圧縮されたtarは7682010バイトを占めます。これは、大容量ファイルの3つのコピーが1つのコピーとして削除されたことを示します。

-rw-r--r-- 1 meuh      30 Jun  2 12:35 /tmp/try/A/a
-rw-r--r-- 1 meuh 2560000 Jun  2 12:35 /tmp/try/A/bA
-rw-r--r-- 1 meuh      30 Jun  2 12:35 /tmp/try/B/a
-rw-r--r-- 1 meuh 2560000 Jun  2 12:35 /tmp/try/B/bB
-rw-r--r-- 1 meuh      30 Jun  2 12:35 /tmp/try/C/a
-rw-r--r-- 1 meuh 2560000 Jun  2 12:35 /tmp/try/C/bC

4       /tmp/zrepo/info
4       /tmp/zrepo/index/2e0ec29dfd5742005a477525009cfa3a6677f28cffaf2ae5
4       /tmp/zrepo/backups/x
2052    /tmp/zrepo/bundles/e0/e0a14717771602304b480202e05a4f796e8346b7033c231e
2052    /tmp/zrepo/bundles/e0
520     /tmp/zrepo/bundles/3c/3cf381e405fc278c4336ae331c5ea6a9d67b3147792567bc
520     /tmp/zrepo/bundles/3c

2632045 /tmp/zrepo # du -bs of repo

7682010            # size of tar z

-rw-r--r-- 1 meuh      30 Jun  2 12:35 /tmp/copy/A/a
-rw-r--r-- 1 meuh 2560000 Jun  2 12:35 /tmp/copy/A/bA
-rw-r--r-- 1 meuh      30 Jun  2 12:35 /tmp/copy/B/a
-rw-r--r-- 1 meuh 2560000 Jun  2 12:35 /tmp/copy/B/bB
-rw-r--r-- 1 meuh      30 Jun  2 12:35 /tmp/copy/C/a
-rw-r--r-- 1 meuh 2560000 Jun  2 12:35 /tmp/copy/C/bC

答え3

はい、ファイル名を変更したため、再同期するたびにファイルが異なります。 rsyncの目的は重複を見つけることではありません。それは単に高速ファイルコピーツールです。何度もコピーされないファイルがわかっている場合は、rsyncフィルタルールを使用してファイルを除いて別の方法で処理します。

はい。 rsync -uva --filter "- a.jar" /somedir/ /otherdir/ は、a.jar を除く /somedir のすべての内容を /otherdir にコピーします。

関連情報