|
|
|
|
|
|
|
CCDでソフトウェアミラー by FreeBSD 4.8 Release |
|
|
FreeBSDでソフトウェアミラー構成を作成します。
今回は、ちと長丁場です。
ちなみにマシン構成は、以下の通り。
OS FreeBSD 4.8 Release
HD PrimaryIDE Master=HD
Slave=HD
SeconderyIDE Master=CD-ROM
Slave=HD
とりあえず、プライマリIDEには、同サイズのHDが搭載されているとします。また、セカンダリIDEのスレーブにもう一台HDをつけてあります。
こちらのHDでは、Dumpによるバックアップを実施します。
今後、各デバイスは以下の通り表記します。
PrimaryIDE MasterHD=ad0
SlaveHD=ad1
SeconderyIDE SlaveHD=ad3
*FreeBSDのCCDでは、"/"パーティションはミラー出来ません。とりあえずの逃げかたは記載してあります。
1.FreeBSDインストール時のパーティション構成。
まずはFreeBSDをインストールします。
ad0のパーティション構成は以下の通り。
/ 150M
swap 800M
/usr 2400M
/home 4500M
/var 残りM
*Installはkernel-developerで!
2.ccdミラー用カーネルの作成
ccdを組み込んだカーネルを作成します。
#cd /usr/src/sys/i386/conf
#cp GENERIC CCDKERNEL
ここで、コピーしたCCDKERNELを編集します。
編集するのは以下の通り。
CPUを使用しているものにあわせます。
*いらないものをコメントアウト。
machine i386
#cpu I386_CPU
#cpu I486_CPU
#cpu I586_CPU
cpu I686_CPU
identの編集
#ident
GENERIC
ident CCDKERNEL
CCDの組み込み
*最下行に以下を追加、(3=ミラーするスライス数)
pseudo-device ccd 3
カーネルファイルの配置
#/usr/sbin/config CCDKERNEL
コンパイルとインストール
#cd ../../compile/CCDKERNEL
#make depend
#make
#make install
新しいカーネルで立ち上げます。
#sync;sync;sync
#shutdown -r now
無事に立ち上がれば、カーネルの再構築は終了。
CCDの設定に移ります。
3.ccdの設定
無事に立ち上がれば、カーネルの再構築は終了。
CCDの設定に移ります。
CCDデバイスの作成
#cd /dev
#sh MAKEDEV ccd0
#sh MAKEDEV ccd1
#sh MAKEDEV ccd2
もう一度再起動、今度はsingleモードで、
#shutdown -r now
まずはad1のディスクにFreeBSD領域FDISKで作成します。
#/stand/sysinstall
Configure
Fdisk
で可能です。
ad0の内容をad1に複製します。
#dd if=/dev/rad0 of=/dev/rad1 bs=256b
ファイルシステムをマウントします。
/以外はad1をマウントしてください。
#mount /
#mount /dev/ad1s1e /usr
#mount /dev/ad1s1f /home
#mount /dev/ad1s1g /var
CCDの設定ファイルを作成。
/etc/ccd.confを作成、内容は以下の通り。この時点では、ad0をミラーなしで書く
ccd0 32 none
/dev/ad0s1e
ccd1 32 none /dev/ad0s1f
ccd2 32 none /dev/ad0s1g
設定を読み込ませます。
#ccdconfig -C
ccdデバイスにディスクラベルを書き込みます。
#disklabel ccd0 > /tmp/ccd0
#disklabel ccd1 > /tmp/ccd1
#disklabel ccd2 > /tmp/ccd2
#disklabel -Rr ccd0 /tmp/ccd0
#disklabel -Rr ccd1 /tmp/ccd1
#disklabel -Rr ccd2 /tmp/ccd2
newfsします
#newfs ccd0c
#newfs ccd1c
#newfs ccd2c
/etc/fstabの書き換え
ミラーする、/usr,/home/varをccdを使用するように書き換えます。
#/dev/ad0s1e
/usr ufs rw 2 2
#/dev/ad0s1f /home ufs rw
2 2
#/dev/ad0s1g /var ufs rw
2 2
/dev/ccd0c /usr ufs
rw 2 2
/dev/ccd1c /home ufs rw
2 2
/dev/ccd2c /var ufs
rw 2 2
ccdデバイスにデータをコピーします。
*/usrをコピー
#mount /dev/ccd0c /mnt
#cd /usr
#tar cf - . | (cd /mnt; tar xvf -)
#umount /mnt
*/homeをコピー
#mount /dev/ccd1c /mnt
#cd /home
#tar cf - . | (cd /mnt; tar xvf -)
#umount /mnt
*/varをコピー
#mount /dev/ccd2c /mnt
#cd /var
#tar cf - . | (cd /mnt; tar xvf -)
#umount /mnt
ミラー用ccd.confの作成。
今使っている/etc/ccd.confは片肺運転時に使用しますので、コピーしておきます。
#cp /etc/ccd.conf /etc/ccd.conf.single
で、/etc/ccd.confを編集します。
ccd0 32 6
/dev/ad0s1e /dev/ad1s1e
ccd1 32 6 /dev/ad0s1f /dev/ad1s1f
ccd2 32 6 /dev/ad0s1g /dev/ad1s1g
これで一応設定は終了しました。
マシンをシングルユーザーモードで再起動します。
sync;sync;sync
shutdown -r now
起動したら、もう一回ディスク内容を複製しておきます。
#dd if=/dev/rad0 of=/dev/rad1 bs=256b
で、再起動、今度はマルチユーザーモードで、
ccdがうまくマウントできたらOK!
#sync;sync;sync
#shutdown -r now
*この状態で、ad0とad1のミラーは完成しました。
ソフトのインストール、ユーザーの追加などとりあえず使用する環境を構築します。
4.運用に対する注意点
まず、”/”はミラーしていないことに注意してください。
すなわち、/etcなどを書き換えると、もう一方のデスクには反映されません。
で、どうするか。
"/"に含まれるところを変更したら、シングルモードで立ち上げて、ddでもう一方のディスクに流し込みます。
#dd if=/dev/rad0s1a of=/dev/rad1s1a
bs=256b
5.障害復旧手順
1.ad0(Masterディスク)が死んだら
A.ad1(Slave)をMasterに差し替えます。
ジャンパースイッチの切り替えも忘れずに!
B.シングルユーザーモードで立ち上げ。
C./を書き込みできるようにマウント。
#mount /
D./etc/ccd.conf.singleを/etc/ccd.confとしてコピーします。
*元のccd.confはリネームしてとっておいてください。
#mv /etc/ccd.conf
/etc/ccd.conf_back
#cp /etc/ccd.conf.single /etc/ccd.conf
E.再起動して、マルチユーザーで立ち上げ。
#sync;sync;sync
#shutdown -r now
2.ad1(Slaveディスク)が死んだら
A.シングルユーザーモードで立ち上げ。
B./を書き込みできるようにマウント。
#mount /
C./etc/ccd.conf.singleを/etc/ccd.confとしてコピーします。
*元のccd.confはリネームしてとっておいてください。
#mv /etc/ccd.conf
/etc/ccd.conf_back
#cp /etc/ccd.conf.single /etc/ccd.conf
D.再起動して、マルチユーザーで立ち上げ。
#sync;sync;sync
#shutdown -r now
3.デスクの復旧方法。
*少なくとも、ミラー元(ad0)よりミラー先(ad1)のディスクサイズは大きい物を使用してください。
A.新しいディスクをad1(Slave)に取り付けます。
B.シングルユーザーモードで立ち上げます。
C.ad1のディスクにFreeBSD領域FDISKで作成します。
#/stand/sysinstall
Configure
Fdisk
で可能です。
D.ddでディスク内容を流し込みます。
#dd if=/dev/rad0 of=/dev/rad1
bs=256b
E.ad0の/を書き込みできるようマウントします。
#mount /
F./etc/ccd.confをミラー用の物に置き換えます。
#cp /etc/ccd.conf_back
/etc/ccd.conf
G.再起動します。
#sync;sync;sync
#shutdown -r now
6.dumpによるBackupとリストア
まずはdump
dumpはシングルモードで行うのがベストですが、稼働中にdumpしてもおそらく問題はないでしょう。
ちなみに、PostgreSQL,Apache,Tomcat環境では、正常に復旧出来ました。(保証はしません(^_^))
まず、ad3のデスクを使用できるようにします。
#/stand/sysinstallから
Configure
Fdisk
で、ad3をFreeBSDファイルシステム領域として確保します。
newfsします。
#newfs /dev/ad3c
マウントは以下のようにします。
#mount /dev/ad3c /mnt
/etc/fstabに記入
/dev/ad3c /mnt
ufs rw,noauto 2 2
スケジュールは以下の通り。
日曜日夜間にフルdump、その後は毎日、日曜日からの差分をdumpします。
dump先デバイスは、ad3です。
dump時の指定オプションは以下のお通り。
0=Full_dump(レベル0ダンプ)
4=0に対する差分を取る指示(レベル4ダンプ)
u=dump日時を/etc/dumpdatesに記録、差分dumpを使用する場合に必要
f=デバイスの指定。
*dumpコマンドの例
日曜夜間のFullDump
/ dump 0uf - /dev/rad0s1a >
/mnt/root.dump
/usr dump
0uf - /dev/rccd0c > /mnt/usr.dump
/home dump 0uf -
/dev/rccd1c > /mnt/home.dump
/var dump
0uf - /dev/rccd2c > /mnt/var.dump
日曜夜間以外の差分Dump
/ dump 4uf - /dev/rad0s1a >
/mnt/root.4.dump
/usr dump
4uf - /dev/rccd0c > /mnt/usr.4.dump
/home dump 4uf -
/dev/rccd1c > /mnt/home.4.dump
/var dump
4uf - /dev/rccd2c > /mnt/var.4.dump
ちなみに、今回はCCDミラーされている物をdumpしますので、'/var','/home','/usr'はrccdデバイスよりdumpします。
dumpバックアップ用のスクリプトファイルの準備。
*ad3はdump時のみmountしています。また、CCDミラーではない状態でのバックアップスクリプトも'nonccd'として作成しておきます。
'backup0'ファイル
#!/bin/sh
/sbin/mount /mnt
/bin/sleep 3
/sbin/dump 0uf -
/dev/rad0s1a > /mnt/root.dump
/bin/sleep 60
/sbin/dump 0uf -
/dev/rccd0c > /mnt/usr.dump
/bin/sleep 600
/sbin/dump 0uf -
/dev/rccd1c > /mnt/home.dump
/bin/sleep 600
/sbin/dump 0uf -
/dev/rccd2c > /mnt/var.dump
/bin/sleep 60
/sbin/umount /mnt
'backup4'ファイル
#!/bin/sh
/sbin/mount /mnt
/bin/sleep 3
/sbin/dump 4uf -
/dev/rad0s1a > /mnt/root.4.dump
/bin/sleep 60
/sbin/dump 4uf -
/dev/rccd0c > /mnt/usr.4.dump
/bin/sleep 600
/sbin/dump 4uf -
/dev/rccd1c > /mnt/home.4.dump
/bin/sleep 600
/sbin/dump 4uf -
/dev/rccd2c > /mnt/var.4.dump
/bin/sleep 60
/sbin/umount /mnt
'backup0nonccd'ファイル
#!/bin/sh
/sbin/mount /mnt
/bin/sleep 3
/sbin/dump 0uf -
/dev/rad0s1a > /mnt/root.dump
/bin/sleep 60
/sbin/dump 0uf -
/dev/rad0s1e > /mnt/usr.dump
/bin/sleep 600
/sbin/dump 0uf -
/dev/rad0s1f > /mnt/home.dump
/bin/sleep 600
/sbin/dump 0uf -
/dev/rad0s1g > /mnt/var.dump
/bin/sleep 60
/sbin/umount /mnt
'backup4nonccd'ファイル
#!/bin/sh
/sbin/mount /mnt
/bin/sleep 3
/sbin/dump 4uf -
/dev/rad0s1a > /mnt/root.4.dump
/bin/sleep 60
/sbin/dump 4uf -
/dev/rad0s1e > /mnt/usr.4.dump
/bin/sleep 600
/sbin/dump 4uf -
/dev/rad0s1f > /mnt/home.4.dump
/bin/sleep 600
/sbin/dump 4uf -
/dev/rad0s1g > /mnt/var.4.dump
/bin/sleep 60
/sbin/umount /mnt
これを、/usr/local/binにコピーしておきます。当然ですが、実行権限を付加しておいてください。
次に、cronでスクリプトを実行するように設定します。
cronの設定はこのコマンドで。
#crontab -e
エディタが立ち上がるので、以下の内容で記入(ccd稼働時)
0 5 * * 0
/usr/local/bin/backup0
0 5 * * 1 /usr/local/bin/backup4
0 5 * * 2 /usr/local/bin/backup4
0 5 * * 3 /usr/local/bin/backup4
0 5 * * 4 /usr/local/bin/backup4
0 5 * * 5 /usr/local/bin/backup4
0 5 * * 6 /usr/local/bin/backup4
更新内容を保存すると、cronが反映されます。
*tips1.圧縮したい場合は
"/"の場合、
ダンプ----dump 0uf - /dev/rad0s1a | gzip -9 >
/mnt/root.dump.gz
リストア--gzcat /mnt/root.dump.gz | restore rf -
*tips2.dump内容の確認
#restore tf - < /mnt/usr.dump
*tips3."/"をrestoreしたファイルは、kernelが含まれています。
これを削除するためには、以下のコマンドで行ってください。
*/home/rootにrestoreした場合。
#cd /home/root
#chflags noschg kernel
#cd ../
#rm -rf root
リストア
リストアは、比較的簡単です。
この手順は、ミラーされているad0,ad1が壊れ、ccd構成は取らず、単に新しいディスクをad0としてつなげた時の手順でです。
1.まず、もとと同じバージョンのFreeBSDをインストールします。
この時、ダンプした時と同じパーティション構成にしてください。
*容量は、依然よりも少なくとも大きくすることが必要です。
2.リストアするため、シングルモードで立ち上げます。
3.dumpファイルのある、ad3をmountします。
#mount /dev/ad3c /mnt
4.”/”からリストアします。
#mount /
#cd /
#restore rf - < /mnt/root.dump
#restore rf - < /mnt/root.4.dump
5.続けて、/usr,/home,/varをリストアします。
#mount /dev/ad0s1e /usr
#cd /usr
#restore rf - < /mnt/usr.dump
#restore rf - < /mnt/usr.4.dump
#mount /dev/ad0s1f /home
#cd /home
#restore rf - < /mnt/home.dump
#resotre rf - < /mnt/home.4.dump
#mount /dev/ad0s1g /var
#cd /var
#restore rf - < /mnt/var.dump
#restore rf - < /mnt/var.4.dump
6./etc/fstabを書き換えます。
ミラーするため、ccdを使用するようになっているので、通常のデバイスを使うようにする。
/dev/ad0s1e
/usr ufs rw 2 2
/dev/ad0s1f /home ufs rw
2 2
/dev/ad0s1g /var ufs
rw 2 2
#/dev/ccd0c /usr
ufs rw 2 2
#/dev/ccd1c /home ufs
rw 2 2
#/dev/ccd2c /var
ufs rw 2 2
7.再起動します。
#sync;sync;sync
#shutdown -r now
8.Backup用crontabを書き換えます。
通常cronで仕込まれているバックアップはccd(ミラーデバイス)から行っています。
で、これをccdを使わない用のスクリプトに変更します。
cronの設定は以下の通り。
#crontab -e
エディタが起動するので、以下のように編集
0 5 * * 0
/usr/local/bin/backup0nonccd
0 5 * * 1 /usr/local/bin/backup4nonccd
0 5 * * 2 /usr/local/bin/backup4nonccd
0 5 * * 3 /usr/local/bin/backup4nonccd
0 5 * * 4 /usr/local/bin/backup4nonccd
0 5 * * 5 /usr/local/bin/backup4nonccd
0 5 * * 6 /usr/local/bin/backup4nonccd
更新内容を保存すると、cronが反映されます。
*実は、もしあなたがApacheを使用しているなら、apacheのpidファイルが残っていて、再起動時にapacheが正常に起動しません。
これは、apacheを起動したままdumpした弊害です。
で、/usr/local/apache/logs/httpd.pidを削除して、Apacheのみ起動し直します。
#rm /usr/local/apache/logs/httpd.pid
#/usr/local/apache/bin/apachectl start
いやー、久しぶりに長編を作ってしまいました。
FreeBSDでのCCDミラーやdump,restorはシンプルでよくできており、見通しが良いのでおすすめです。
CCDでは、今自分がどのディスクでなにをしているのか、その都度整理しながら構築することをおすすめします。
いろいろディスクをいじくり回してますが、やってることは非常に単純です。
これで安上がりでいながら、一人前のサーバらしい環境が出来ました。
存分にご活用ください。
|
|
|
|
|
|
|
Producted by Tomoya Sakurai
|
|
|