rsyncによるデータ転送

rsync はネットワーク経由でファイルの同期を取るプログラムです。rsync は独特のアルゴリズムにより、遠隔にあるファイルとの同期を最速で実現する方法を使っています。rcpやscpが必ずファイルやディレクトリ全体を扱うのに対して、rsyncではファイルやディレクトリの差分だけを扱うことができるため、効率よく同期を取ることができます。そのため、ファイルやディレクトリのバックアップや、複数のサーバ間でのデータの同期など、広い用途で使われています。rsyncはTCP873番ポートを使用して独自プロトコルで通信を行いますが、sshやrshなどのセッション上で動作させることも可能です。
RHEL3ではrsyncがデフォルトでインストールされています。
バージョン

  • rsync-2.5.7-1 (RHEL3のデフォルトRPM)

接続先サーバA(192.168.0.10)から接続元クライアントB(192.168.0.20)に標準のWEBディレクトリを同期転送することを仮定して設定方法を説明します。
1. 設定ファイル作成
接続先サーバAに /etc/rsyncd.conf ファイルを作成します。

#
# Global
#
uid = apache — (1)
gid = apache
#
# www file modules
#
[wwwfiles] — (2)
path = /var/www/html — (3)
comment = “Web server contents” — (4)
read only = yes — (5)
hosts allow = 192.168.0.20 — (6)

(1) rsyncサーバ全体に対するグローバル設定と呼ばれる部分です。ここでは、サーバ全体に対してapacheの実行権限と同じ権限で動作するように指定しています。ユーザ権限の設定は以下の各モジュール内で行うこともできます。
(2) “[]”で囲まれた名称をモジュール名と呼び、それ以下にモジュールごとの設定を行います。
(3) 同期対象のディレクトリを指定します。
(4) クライアントがモジュールの一覧を表示したときに指定部分が表示されます。
(5) ここでは、サーバのデータをクライアントに同期しますので、サーバ側へのデータの書き込みを禁止しています。
(6) 指定のIPアドレスのホストからの接続のみを許可しています。ただし、アクセス制御はスーパーサーバで行うほうが望ましいです。
2. 接続先サーバAとネットワーク側のファイアウォール設定
rsyncはTCP873番ポートを使用しますので、接続先サーバAまたはネットワーク側でファイアウォールが存在している場合には、適切な設定変更を行い、クライアントBからサーバAのTCP873番ポートに対するアクセスを可能な状態にします。
3. 接続
rsyncのコマンド使用法です。

rsync [オプション] [ユーザ名@] ホスト名::モジュール名 転送先 (Aからダウンロードの場合)
rsync [オプション] 転送元 [ユーザ名@] ホスト名::モジュール名 (Aにアップロードの場合)

オプション(一部)

-a, –archive: アーカイブモードで転送を行います。ファイルのパーミッションや所有者情報、タイムスタンプなどが保存されます。
-v, -verbose: 転送中の情報を詳しく表示します。
–delete: コピー元に存在しないファイルは削除します。

サーバAからWEBコンテンツをクライアントBのhtml_contentsディレクトリに同期転送します。ここでは、本記事の差分だけ同期転送されます。

# rsync -av –delete 192.168.0.10::wwwfiles ./html_contents/
receiving file list … done
./
mtdata/senyo/
mtdata/senyo/2006/02/
mtdata/senyo/2006/02/rsync.html
mtdata/senyo/atom.xml
mtdata/senyo/index.html
mtdata/senyo/index.xml
wrote 1328 bytes read 70492 bytes 143640.00 bytes/sec
total size is 16158584 speedup is 224.99