Rsync

rsync(アールシンク) は、UNIXシステムにおいて、差分符号化を使ってデータ転送量を最小化し、遠隔地間のファイルやディレクトリの同期を行うオープンソースソフトウェアのアプリケーションソフトウェアである。類似のプログラムやプロトコルにはない rsync 独自の特徴として、ミラーサイトとの転送が双方向に高々1回で済む点がある。rsync はディレクトリ内容を表示し、ディレクトリやファイルをコピーできる。オプションでデータ圧縮や再帰も指定可能。

rsync プロトコルのデーモン rsyncd がデフォルトで使うTCPポート番号は 873 である。rsync はローカルなディレクトリ間の同期にも使えるし、RSHやSSHなどのリモートシェル経由でも使える。後者の場合、rsync のクライアントプログラムはローカルとリモートの両方にインストールされている必要がある。

GNU General Public License でリリースされており、自由ソフトウェアである。

 アルゴリズム 
rsync は、転送先のコンピュータが何らかの構造体(ファイルなど)の別バージョンを既に持っている場合、その構造体を効率的に転送するアルゴリズムを使っている。このアルゴリズムは、オーストラリアのプログラマアンドリュー・トリジェルが発明した。

受信側は、そのファイルの複写を固定長のチャンク(塊)に重ならないように分割し、チャンクごとに2つのチェックサムを計算する。この分割長を  とする。チェックサムは、MD4 ハッシュ関数と弱いローリングチェックサムである。受信側は送信側に対して、それらチェックサムを送る。

送信側は、自身の持つバージョンのファイルについて、長さ  の各チャンクごとにローリングチェックサムを計算する。このときチャンクは重なるものも含めて計算する。重なりのあるチャンクについてのローリングチェックサムの計算は効率的にできる。バイト位置  から  までのローリングチェックサムが  であったとき、 から  までのローリングチェックサムは、 と  番目のバイトの内容、 番目のバイトの内容だけから計算でき、全バイトの内容を調べる必要がない。したがって、1 バイト目から 25 バイト目までのローリングチェックサムを既に計算していた場合、2 バイト目から 26 バイト目までのローリングチェックサムは、単に 1 バイト目と 26 バイト目の値がわかれば計算できる。

rsync で使われているローリングチェックサムはマーク・アドラー(Mark Adler)の adler-32 チェックサムに基づいている。adler-32 は、フレッチャーのチェックサムに基づいており、zlib でも使われている。

次に送信側は受信側が送ってきたチェックサムと一致するものがあるかを調べる。一致する場合、その位置について MD4 チェックサムを計算し、受信側が送ってきた MD4 の値と比較する。

一致が見つけられない場合、送信側は自身の持つファイルの部分にマージのための手順を付けて受信側に送信し、ファイル内容が全く同じになるようにする。

送信側と受信側のファイルの内容が多くの部分で一致する場合、同期のために転送が必要となるデータ量は少なくなる。

rsync のこのようなアルゴリズムはアプリケーションとしての rsync の中核であり、2つのコンピュータ間での TCP/IP 上の転送量を最適化するものである。rsync は他にもデータ転送やバックアップに役立つ機能を備えている。
 Zstandard, LZ4, zlib を使ったブロック単位の圧縮/伸張
 ssh や stunnel などのプロトコルをサポートし、暗号化が可能

 利用 
初期の利用形態は、UNIXシステム群のうちの1台をサーバとし、他のシステムとの間でミラーリングやバックアップを行うものであった。cronのようなスケジューリング機構を使えば、自動スケジューリングされ暗号化された複数台の同時ミラーリングが可能である。

 派生 
rdiff は、rsync のアルゴリズムを使ってファイル A からファイル B への差分ファイルを生成するものである(diff に似ているが、出力形式が異なる)。その差分ファイルをファイル A に適用すると、それをファイル B に変換できる(patch に類似)。

diff とは異なり、差分ファイル生成過程は2段階に分かれる。まず、ファイル A からより小さいシグネチャファイルを生成し、次にそのシグネチャファイルとファイル B から差分ファイルを生成する。また、diff とは異なり、rdiff はバイナリファイルにも適用可能である。

rdiff を使って、rdiff-backup というユーティリティも作られている。これはファイルやディレクトリのバックアップをネットワーク経由で保守できるものである。rdiff-backup はバックアップと共に rdiff の差分ファイル群を保持しているので、任意の時点のバックアップが可能である。

rdiff-backup からの派生として Duplicity がある。事前に各ブロックのハッシュを生成して暗号化しておき、サーバ上にそれらを格納しておく。増分バックアップに際しては、サーバ上の暗号化されたハッシュを利用する。データの残りも暗号化されて記憶される。

 歴史 
rsync は1996年6月19日に発表されたFirst release of rsync - rcp replacement 1996年6月19日。オリジナルの作者はアンドリュー・トリジェルと Paul Mackerras であった。

 関連項目 
 CVSup
 Unison
 xdelta
 Jigdo

 脚注 

 外部リンク 
 rsync 公式サイト
 rsync algorithm
 Andrew Tridgell's PHD on rsync

Category:ネットワークソフト
Category:UNIXのソフトウェア
Category:ファイル転送プロトコル
Category:1996年のソフトウェア
Category:オープンソースソフトウェア
Category:Cでプログラムされた自由ソフトウェア