rsync で 自動バックアップ

ここでは、クライアントマシン(Windows)からサーバーマシン(Linux)のファイルをバックアップする運用をrsyncで構築してみます。
以下の環境で構築しました。

  • サーバーマシン
    • OS: openSUSE10.3
    • IP: 172.19.50.201(仮)
    • USER: remote(仮)
    • ホスト名: server(仮)
  • クライアントマシン
    • OS: Windows Vista SP1
    • IP: 172.19.50.202(仮)
    • ユーザー: user1(仮)
    • マシン名: win-client-PC

Windowsにrsyncをインストール

cygwinをC:\cygwinにインストールして、以下のディレクトリをWindowsの環境変数PATHに追加しましょう。
パッケージはrsync・opensshを追加。

C:\cygwin\bin

SSH鍵ペアの作成

Windowsマシンより、鍵ペアを作成します。

c:\>ssh-keygen -t rsa -N ""  <- パスフレーズなし鍵ペア作成
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
94:f4:1d:15:97:33:19:f2:f5:05:14:f0:cc:06:cc:e0 user1@win-client-PC

公開鍵のセットアップ

先ほど作成した、公開鍵(c:\cygwin\home\user1\.ssh\id_rsa.pub)をリモートサーバー(Linux)へセットアップします。
これにより、パスフレーズなしでログイン可能になります。
リモートサーバー側の.ssh/authorized_keysに公開鍵を追加します。

remote@server:~> cd .ssh
remote@server:~/.ssh> cat id_rsa.pub >> authorized_keys

それから、パスフレーズなしの公開鍵の先頭にログインを許可するIPアドレスを指定しとく。

remote@server:~/.ssh> vi authorized_keys
from="172.19.50.202" ssh-rsa XYZXYZ…

バックアップ処理

リモート側のファイルをクライアント機(Windows)へバックアップします。

C:\>rsync -ave ssh --delete remote@server:public_html/ \
/home/user1/public_html/

次にrsyncでクライアントPC側のファイルをリモートへバックアップする設定をします。
Windows(Vista)の「ピクチャ」フォルダを丸ごとサーバー側と同期させます。

C:\>rsync -ave ssh --delete /cygdrive/c/Users/user1/Pictures/ \
remote@server:WindowsVista/Pictures/


クライアント機は、常に起動しているわけではないので、起動時にバックアップを取得してくる設定をしておきます。

rsyncコマンドについて

rsyncは便利なんだけど、知らずに間違った設定をするとバックアップするつもりが、全部のファイルが消失してしまったということにもなりかねないので、注意が必要である。

オプション説明
-a,—archiveアーカイブモード(-rlptgoDオプションと同義)
-v,—verbose転送情報を詳しく表示
-e sshrshの代替としてSSHを指定
-zデータを圧縮して転送
—deleteコピー元で削除されたファイルをコピー先でも削除
—exclude=PTNパターン(PTN)に一致するファイルを除外する
-n,—dry-run実行時の動作だけ表示

サンプル

Subversionリポジトリから最新のドキュメントをチェックアウトして、複数のWebサーバーと同期を行うサンプル。

#!/bin/sh
if [ $# -eq 0 ]; then
  echo "=================================================================="
  echo "USAGE:"
  echo "    sh $0 <your svn account name>"
  echo "=================================================================="
  exit 1
fi

## Constant
SVN_ACCOUNT=$1
CHECK_OUT_DIR=_____
SVN_URL=_____
USER_NAME=_____

## SVN
cd ${CHECK_OUT_DIR}
svn checkout ${SVN_URL}/public_html --username ${SVN_ACCOUNT}
if [ $? -ne 0 ]; then
  exit 1
fi

## BUILD
for IP in 192.168.0.201 192.168.0.202
do
  rsync -avze ssh --exclude ".svn/" --exclude ".svn/*" --delete \
    ${CHECK_OUT_DIR}/public_html/* \
    ${USER_NAME}@${IP}:/home/${USER_NAME}/public_html
done

参考リンク

homeserver/rsync.txt · 最終更新: 2008/04/16 13:23 by whiteapple
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 openSUSE