CVSを利用した共有ファイルのバックアップ

ファイルのバックアップの目的は、「機器の故障からの回復」、「人為的に消去・破壊してしまったファイルの回復」の2つに大別される。

機器の故障については、最近のバックアップから回復させればよいので、バックアップは1世代あればよい。RAIDによるドライブの二重化は、リアルタイムのバックアップと考えることができる。

人為的な消去・破壊については、事象が発生してから気づくまでにタイムラグがあり、破壊された状態でバックアップが取得されてしまう。この為、バックアップは複数世代必要である。

ここでは、sambaによる共有ファイルのバックアップファイルをCVSを利用して管理する方法を記述する。


目的

「機器の故障からの回復」の為のフルバックアップを取得する。

「人為的に消去・破壊してしまったファイルの回復」の為の差分バックアップを取得する。


構成

ハードウエア・ネットワーク構成

ディスクだけ2重化してもPC本体がいかれてしまっては困るので、交替用のPCを1台追加する。交替用のPCに定期的に共有ファイルのバックアップを取得する。

ネットワーク越しのRAIDにする手もあるが、共有ファイル用PCには出来るだけ手を入れたくないので、ここでは採用しない。

共有ファイル用PCと交替用(バックアップ用)PCは、100BASE/TXのイーサネットとし、クロスケーブルで直結する。プライベートIPアドレスを使用する。ここには高速のLANを使用したい。

共有ファイルを利用するクライアントPCが存在するネットワークと接続する為のインタフェースは、バックアップ用PCにも用意しておく。共有ファイル用PCが使用不能になった場合、ここに共有ファイル用PCに接続していたLANケーブルを繋ぐ運用にすることで、バックアップ用PC用にIPアドレスを確保する必要が無くなる。

最初から両PCをクライアントPCが存在するネットワークと接続した方が切替運用の手間は省けるが、バックアップ側のファイルを通常時に更新されてはバックアップの意味がないので、普段は切り離しておいた方が良い。

ソフトウエア構成

バックアップの流れ

共有ファイルPCの各共有(下図/ex/kyouyuu1)は、1つのディレクトリ(下図/ex)下に配置する。バックアップ用PCは、このディレクトリ全体をコピーする(下図では、/ex以下を/ex/bkup-cvsworkにコピー)。

このコピーは単純なコピーでは無く、コピー元とコピー先を同じ状態に保つ為、コピー元から削除されたファイルをコピー先から削除している。但し、コピー先はCVSの作業スペースであるので、CVSの管理ディレクトリ"CVS"及び"CVS"下のファイルは削除対象にしない。"CVS"ディレクトリは、CVS作業スペース中のすべてのディレクトリ下に存在する為、全てのディレクトリは削除対象外とする必要がある。

CVS作業スペースにコピーしたディレクトリ及びファイルは、CVSリポジトリに登録する。ここでは、前回登録時以降、追加 更新 削除されたもののみ反映する(削除は、記録のみ)。ファイルの削除によって"CVS"ディレクトリだけになってしまったディレクトリは、この段階でCVSの機能を使用して削除する。

/ex/kyouyuu1  (共有ファイルPCに保有) 
     ↓
     コピー&削除  (バックアップPCで実行)
     ↓
/ex/bkup-cvswork/kyouyuu1  (CVS作業スペース:バックアップPCに保有)
     ↓
     CVSリポジトリ登録  (バックアップPCで実行)
     ↓
/ex/cvsrepos/kyouyuu1  (CVSリポジトリ:バックアップPCに保有)

バックアップの設定

共有ファイル用PCの設定

NFSの設定

バックアップサーバからのNFSマウントを読込専用として許可する(linuxconfを使用)。

sambaの設定

後続の処理はlinuxでの処理となる為、linux上のファイル名の日本語コードは、EUCとすること。バックアップログの照会では共有名は表示出来ない為、ディレクトリ名と共有名は同じにしておいた方が、操作する人には分かりやすい。

念の為、"CVS"というファイル・ディレクトリを作成出来ない様に設定しておく。

ここでは、例として ディレクトリ "kyouyuu1"," kyouyuu2"を含む"/ex" をマウントポイントとしている。ディレクトリ構造は次のとおり。

/ex
  |
  *- kyouyuu1 (共有名:kyouyuu1)
  |
  *- kyouyuu2 (共有名:kyouyuu2)

バックアップ用PCの設定

バックアップ用シェルを用意し、CRONで定期的に実行するようにする(linuxconfを使用)。

用意するシェル及びシェルから呼び出すPerlスクリプトを以下に示す。

バックアップ用シェル起動シェル

root権限でCRONから自動起動させる。共有ファイルサーバのNFSマウントを行い、バックアップ用シェルを一般ユーザ権限で起動する。CRONTABに登録するのは、このシェルのみ(linuxconfを使用)。

ここでは、例として 共有ファイル用PC(ppc101)の"/ex" をバックアップ用PCの"/master"にマウントしている。

#!/bin/sh

#共有ファイルのマウント
mount -r -t nfs ppc101:/ex /master
NFSRCD=$?
echo "NFS mount.rcd=$NFSRCD"
if [ $NFSRCD -ne 0 ]
then
 exit
fi

#バックアップ用シェルを起動
su -c"/home/yogawa/bin/synccopy.sh" yogawa

#共有ファイルのマウント解除
umount /master

バックアップ用シェル

上記、synccopy.shの内容を次に示す。

#!/bin/sh

#同期バックアップ用Perlスクリプト実行
/usr/bin/perl /home/yogawa/bin/synccopy.pl F /master  /ex/bkup-cvswork

#CVS登録用Perlスクリプト実行
cd /home/yogawa
/usr/bin/perl /home/yogawa/bin/synccvs.pl F /ex/cvsrepos /ex/bkup-cvswork/kyouyuu1
/usr/bin/perl /home/yogawa/bin/synccvs.pl F /ex/cvsrepos /ex/bkup-cvswork/kyouyuu2

同期バックアップ用Perlスクリプト(synccopy.pl)

synccopy.pl  F  コピー元パス  コピー先パス

ソースリスト (EUC)

CVS登録用Perlスクリプト(synccvs.pl)

synccvs.pl  F  CVSリポジトリ  CVS作業スペース

CVSリポジトリをバックアップ専用に使っていることを前提として、CVS作業スペース内の状態を判断し、次の処理を行う。

ソースリスト (EUC)

CVSリポジトリ及びCVS作業スペースの作成

上記シェルを実行する前に、CVSリポジトリの初期化及びプロジェクトを登録しておく必要がある。以下の作業は、上記シェルで指定した一般ユーザで作業する。

"cvsrepos"ディレクトリを作成し、CVSリポジトリを初期化する。

# mkdir /ex/cvsrepos
# cvs -d /ex/cvsrepos init

改行コードやキーワード変換を抑止する為、CVSリポジトリに登録するすべてのファイルをバイナリファイルとして扱うように設定する。

"/ex/cvsrepos/CVSROOT/cvswrappers"を次のように設定する。

*.* -k 'b'

空のディレクトリ下に移動し、プロジェクトを登録する。空であればどこでもよい。

# ls -l /ex/bkup-cvswork
合計 0
# cd /ex/bkup-cvswork
# cvs -d /ex/cvsrepos import kyouyuu1 yogawa cvsstart
# cvs -d /ex/cvsrepos import kyouyuu2 yogawa cvsstart

CVS作業スペースを作成する。コピー先ディレクトリ下に作成する。

# cd /ex/bkup-cvswork
# cvs -d /ex/cvsrepos checkout kyouyuu1
# cvs -d /ex/cvsrepos checkout kyouyuu2
# ls
kyouyuu1     kyouyuu2

バックアップPCの照会設定

共有ファイルPCを介してバックアップPCのCVSリポジトリを照会する設定を以下に示す。

以下の設定例の前提は次の通り。

共有ファイルPCのWEB設定

apacheのhttpd.confにProxyPathを設定する。

"/backup/"へのアクセス要求を"http://192.168.0.101/backup/"に振り分ける。

"/backupcss/"へのアクセス要求を"http://192.168.0.101/backupcss/"に振り分ける。

バックアップPCのWEB設定

apacheのhttpd.confにScriptAliasを設定する。

"/backup/"へのアクセス要求を CVS照会CGI 格納ディレクトリに割り当てる。

apacheのhttpd.confにAliasを設定する。

"/backupcss/"へのアクセス要求を CVS照会CGI用CSS 格納ディレクトリに割り当てる。

CVS照会CGI

上記の環境におけるCGIの設定内容を次に示します。

CVS照会CGI(bkuplog.cgi)の設定

CVS照会CGI 格納ディレクトリにCVS照会用CGIを格納する。

CVS照会CGI 格納ディレクトリに、jcode.plを格納する。

CVS照会用CGIの先頭部分にある環境定義ステップを修正する。上から、CVS作業スペースの上位ディレクトリ、CVSリポジトリ、mimeタイプ定義ファイル、CVS照会CGI用CSS 参照URL。

###############################################
###  Configuration parameter  #################
###############################################
$workpath   = '/ex/bkup-cvswork'  ;
$repopath   = '/ex/cvsrepos' ;
$mime_types = '/etc/mime.types';
$cssurl     = '/backupcss/bkuplog.css';

CVS照会CGI(bkuplog.cgi)のソースリスト

CVS照会CGI用CSS(bkuplog.css)の設定

CVS照会CGI用CSS 格納ディレクトリにCVS照会CGI用CSSを格納する。

CVS照会CGI用CSS(bkuplog.css)のソースリスト

CVS照会CGI(bkuplog.cgi)の機能と表示例

CVS照会CGI(bkuplog.cgi)の機能と表示例