ファイルのバックアップの目的は、「機器の故障からの回復」、「人為的に消去・破壊してしまったファイルの回復」の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に保有)
バックアップサーバからのNFSマウントを読込専用として許可する(linuxconfを使用)。
後続の処理はlinuxでの処理となる為、linux上のファイル名の日本語コードは、EUCとすること。バックアップログの照会では共有名は表示出来ない為、ディレクトリ名と共有名は同じにしておいた方が、操作する人には分かりやすい。
念の為、"CVS"というファイル・ディレクトリを作成出来ない様に設定しておく。
ここでは、例として ディレクトリ "kyouyuu1"," kyouyuu2"を含む"/ex" をマウントポイントとしている。ディレクトリ構造は次のとおり。
/ex | *- kyouyuu1 (共有名:kyouyuu1) | *- kyouyuu2 (共有名:kyouyuu2)
バックアップ用シェルを用意し、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
synccopy.pl F コピー元パス コピー先パス
ソースリスト (EUC)
synccvs.pl F CVSリポジトリ CVS作業スペース
CVSリポジトリをバックアップ専用に使っていることを前提として、CVS作業スペース内の状態を判断し、次の処理を行う。
ソースリスト (EUC)
上記シェルを実行する前に、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のCVSリポジトリを照会する設定を以下に示す。
以下の設定例の前提は次の通り。
"/backup/"へのアクセス要求を"http://192.168.0.101/backup/"に振り分ける。
"/backupcss/"へのアクセス要求を"http://192.168.0.101/backupcss/"に振り分ける。
"/backup/"へのアクセス要求を CVS照会CGI 格納ディレクトリに割り当てる。
"/backupcss/"へのアクセス要求を CVS照会CGI用CSS 格納ディレクトリに割り当てる。
上記の環境における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用CSS 格納ディレクトリにCVS照会CGI用CSSを格納する。
CVS照会CGI用CSS(bkuplog.css)のソースリスト