最新更新日 2001.08.25.
更新項目  細かい所をちょっと修正(^^;;。

HDD が沢山ある?じゃ ccd だべ;-)。
 すごいなぁぁ・・。4.3-RELEASE はこれで 7 項目めです。いつ以来だろう?思って調べてみたら 3.3-RELEASE 以来の快挙ですね;-)。と、言う事で、今回はやっとの事で、ccd のお話です。本当はもう少し早く書きたかったのですが、なかなか HDD が手に入らなくて・・(^^;;。今回はちょっと凄いですよ。うほほほ。

 と、言う事でマシンは今まである koro を利用します。ABIT BP6 ですが、440BX 経由の ATA33 の HDD 一個と、HPT366 経由の HDD 2 個を利用します。大体以下の様な感じですね。

	ad0: 14594MB  [29651/16/63] at ata0-master UDMA33
	ad4: 38166MB  [77545/16/63] at ata2-master UDMA66
	ad6: 38166MB  [77545/16/63] at ata3-master UDMA66
 ad0 は 440BX に付けた 20GB の HDD で ATA33 転送です。これには Windows2000、FreeBSD の / パーティション、Solaris8 がインストールされています。ad4 と ad6 は 40GB の HDD で HighPoint HPT366 ATA66 controller と言うオンボードの ATA66 コントローラに接続されています。一応 dmesg もあります。参考程度に確認してください;-)。

 全部合わせて 100GB ですが、これを ccd しましょう。構成はこんな感じで・・。

	/           / パーティションは ccd 出来ないので ad0 に置きます。
	/usr        ad4 と ad6 でミラーします。
	/home       ad4 と ad6 でミラーします。
	/var        ad4 と ad6 でミラーします。
	/export     ad4 と ad6 でストライピングします。
	swap        一応、ad4 に置きますが ad6 に領域は確保だけされています。
 では順番に見ていきましょう。まず初めにインストールに付いてですが、OS に必要な部分はミラーになるので、ad4 に対してだけ領域を確保すれば OK なのでインストールに付いては普段通りに行いましょう。上記の例だと、ccd が使えない / が ad0 で他は ad4 に確保して通常のインストールを行います。ま、単体で FreeBSD が動く。と、言う感じですね。

 後、何はなくともカーネルに ccd デバイスを追加しておきましょう。以下の一行を追加してカーネルを作成して置きます。

----------------
pseudo-device   ccd     4       # Concatenated disk driver
----------------
 そして、必要であれば、ccd のデバイスドライバを作成しておきましょう。また、新たに追加した HDD のデバイスがない場合も作成しといて上げましょう。これで ccd 導入前の準備は完了です。
----------------
# cd /dev/
# sh MAKEDEV ccd0 ccd1 ccd2 ccd3
# sh MAKEDEV ad6
----------------
ミラーの設定。
 インストールも無事に終わったみたいなので、では実際に ccd の準備をしていきましょう。まずはインストールの終わったパーティション構成を確認してみると・・。
	現在の利用状況              ミラー先のパーティション
	/dev/ad0s2a	/	→  ミラー無し
	/dev/ad4s1b     swap	→  /dev/ad6s1b
	/dev/ad4s1e     /home	→  /dev/ad6s1e
	/dev/ad4s1f     /var	→  /dev/ad6s1f
	/dev/ad4s1g     /usr	→  /dev/ad6s1g
・ディスクのコピー
 さ、ミラー先の構成も決まったのでここで一旦マシンをリブートしてシングルユーザで起動します。 ad4 の ディスクイメージを ad6 に書き込んで上げましょう。ま、40GB もある HDD なのでそれなりに時間はかかります。じっと待つことにしましょう。
----------------
# dd if=/dev/rad4 of=/dev/rad6 bs=256b
----------------
・パーティションの mount と、/etc/ccd.conf の作成
 続いて、/etc/ccd.conf を作成します。ま、以下の様な感じで良いでしょぉ。シングルユーザで起動した場合 /etc には書き込み権限がないので mount し直します。この時、ad4 の HDD では無く、ad6 の HDD をマウントする必要が有ります。
----------------
# mount /
# mount /dev/ad6s1e /home
# mount /dev/ad6s1f /var
# mount /dev/ad6s1g /usr
----------------
 さささ、この後で /etc/ccd.conf を書いて上げましょう;-)。最初はミラー先無し(ad6 を使わない)で ccd を設定します。ad6 に対してはまださいろいろな作業が残っているので ccd.conf に書いてしまうと、デバイスびじぃなどと言われて怒られてしまうためです。ま、以下の様な感じですね。
----------------
ccd0    32      none    /dev/ad4s1e
ccd1    32      none    /dev/ad4s1f
ccd2    32      none    /dev/ad4s1g
----------------
・ccdconfig の実行
 完成したら、ccd デバイスの初期化を行います。
----------------
# ccdconfig -C
----------------
・ディスクラベルの書き込みと newfs
 続いて ccd デバイスにディスクラベルを書いて上げます。それを省くことも多分出来ると思いますが、そーすると newfs した時に、「ディスクラベルついてへんで。」と言われます;-)。実行した時に、怪しいメッセージで出力されると思いますがま、気にせずに・・(^^;;。/tmp/ccd0 などしと一旦保存してから -Rr で書き込んで上げます。
----------------
# 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 の書き換え
 /etc/fstab の内容を書き換えて上げましょう。くれぐれも間違えないように・・。
----------------
/dev/ad4s1e             /home           ufs     rw              2       2
/dev/ad4s1f             /var            ufs     rw              2       2
/dev/ad4s1g             /usr            ufs     rw              2       2

                        ↓

/dev/ccd0c              /home           ufs     rw              2       2
/dev/ccd1c              /var            ufs     rw              2       2
/dev/ccd2c              /usr            ufs     rw              2       2
----------------
・データのコピー
 ccd デバイスにデータをコピーしてあげましょう。ここまで来たらあと一息です。しかし、この作業も随分と長いですね・・(^^;;。
----------------
# mount /dev/ccd0c /mnt
# cd /home
# tar cf - . | ( cd /mnt ; tar xvfp - )
# umount /mnt
# mount /dev/ccd1c /mnt
# cd /var
# tar cf - . | ( cd /mnt ; tar xvfp - )
# umount /mnt
# mount /dev/ccd2c /mnt
# cd /usr
# tar cf - . | ( cd /mnt ; tar xvfp - )
# umount /mnt
----------------
・運用用の /etc/ccd.conf の設定
 今までは「パーティションの mount と、/etc/ccd.conf の作成」の所で書いた、ミラー先無し /etc/ccd.conf でしたが、今度はホンチャン運用用の /etc/ccd.conf に書き換えます。書き換えたら一応、 ccdconfig -C しておきましょう。
----------------
ccd0    32      6       /dev/ad4s1e     /dev/ad6s1e
ccd1    32      6       /dev/ad4s1f     /dev/ad6s1f
ccd2    32      6       /dev/ad4s1g     /dev/ad6s1g
----------------
 さ、これで一連の作業が完了しました。関係するファイルの設定は終わりました。いよいよ最後のシメで、マシンをリブートしてシングルユーザで起動します。そして、最後にもう一回だけディクスの内容を dd します。
----------------
# dd if=/dev/rad4 of=/dev/rad6 bs=256b
----------------
 以上で全ての作業が完了しました。いよいよマシンをリブートしてみましょう。これで起動時に ccd を認識して mount できればグーですね。後はひたすら使い込んでみましょう。
HDD がぶっ壊れたらどないすねん?
 わらひはまだ HDD が壊れていません。なのでここに書いた事が正しいかどうかは実は解りません;-)。各自で体験してみてください;-P。

 ま、基本的には片肺運転用の /etc/ccd.conf と言うのが必要になります。今までに書いてきたところで言うと、「ミラー先無し /etc/ccd.conf 」になります。これを適当な名前(例えば /etc/ccd.conf.ad4)でイザという時の為に保存しときましょう。

----------------
ccd0    32      none    /dev/ad4s1e
ccd1    32      none    /dev/ad4s1f
ccd2    32      none    /dev/ad4s1g
----------------
・ミラー元 (ad4) が壊れた場合
 マシンを止めてからバラします;-)。壊れた HDD(ad4) を抜いた後、ミラー先の HDD(ad6) を 壊れた HDD(ad4) の付いていた所に付けます。 BIOS の設定を調整してからシングルユーザで起動します。

 そして、方肺運転用に用意しておいた /etc/ccd.conf.ad4 を /etc/ccd.conf にコピーします。その後でマルチユーザモードで起動して OK。SCSI の場合は SCSI-ID を変更してあげれば OK。簡単ですね;-)。

・ミラー先 (ad6) が壊れた場合
 壊れた HDD を抜いて、新しい HDD を付けてから起動します。手元に予備の HDD が有る場合はこれでおしまいです;-)。

 手元に HDD がない場合は片肺運転です。まずはシングルユーザで起動します(起動できるのかな?;-P)。でもって方肺運転用に用意しておいた /etc/ccd.conf.ad4 を /etc/ccd.conf にコピーします。その後でマルチユーザモードで起動して OK。

ストライピングの設定。
 ま、40GB も ある HDD なので、/home、/var、/usr に全部使わなくてもよいだろう。と、言う事で 5GB ほどとっといて、ストライピング用の領域を確保しましょう。/etc/ccd.conf は以下の様に作成しました。ミラーのと合わせて以下の形式ですね。
----------------
# raid0
ccd0    32      6       /dev/ad4s1e     /dev/ad6s1e
ccd1    32      6       /dev/ad4s1f     /dev/ad6s1f
ccd2    32      6       /dev/ad4s1g     /dev/ad6s1g
# raid1
ccd3    256     0       /dev/ad4s2e     /dev/ad6s2e   
----------------
 上記の例では、独自に ad4s2e/ad6s2e と言うスライスを切っています。スライス切りは /stand/sysinstall の fdisk でやるとらくちんです。ad4 側を /export、ad6 側を /export1 などとして一時的にマウントポイントを作成して上げます。fdisk が完了したら、sysinstall を抜けて umount /export /export1 してから、実際の利用には不要な /export1 を rmdir します。これで前準備は完了で再起動してシングルユーザモードで起動します。
 あ、ブートする時には /etc/ccd.conf にまだ ccd3 を書き込んでいたらダメですよ・・。

・パーティションの mount と、/etc/ccd.conf の作成
 シングルユーザで起動した後はミラーの時と一緒で、各パーティションを一応 mount した後、/etc/ccd.conf を作成します。あ、もし、/dev/ccd3 を作ってない様でしたら sh MAKEDEV ccd3 などとしてください。/etc/ccd.conf は上に書いた通り、

----------------
ccd3    256     0       /dev/ad4s2e     /dev/ad6s2e   
----------------
を追加します。

・ccdconfig の実行
 完成したら、やっぱり ccd デバイスの初期化を行います。

----------------
# ccdconfig -C
----------------
・ディスクラベルの書き込み
 やっぱり同様にして ccd デバイスにディスクラベルを書いて上げます。
----------------
# disklabel ccd3 > /tmp/ccd3
# disklabel -Rr ccd3 /tmp/ccd3
----------------
・newfs をします。
 やっぱり newfs します。くれぐれもデバイス名を間違えないように・・。ミラーと違ってデータのコピーが無いので比較的早く設定は終わります;-)。
----------------
# newfs ccd3c
----------------
・/etc/fstab の書き換え。
 これで一連の作業は完了でマシンをリブートして今度はマルチユーザモードで起動します。最初は自分で、手で mount していろいろテストしてみますが、安定して利用できることを確認したら /etc/fstab に書き込みます。
----------------
/dev/ccd3c              /export         ufs     rw              2       2
----------------
 これで全部出来ました。ふぅぅ。Solaris に比べて随分とらくちんでしたね;-)。しかし、実際の速度を計ってみるとあんま速くないですなぁぁ・・。ま、今はまだ使い込んでないのでおいおい様子を見ていきたいと思います。
HDD がぶっ壊れたらどないすねん?
 残念ながらストライピングの場合は、それで終わりです。バックアップをこまめに取りましょう;-)。

 この項目、これでおわり。

 と、言う事で我が家のマシンは以下の様にディスクが付いています;-)。
----------------
% df -k
Filesystem          1K-blocks     Used    Avail Capacity  Mounted on
/dev/ad0s2a            295778    57456   214660    21%    /
/dev/ccd0c            1984967    12629  1813541     1%    /home
/dev/ccd2c           12306457  2503438  8818503    22%    /usr
/dev/ccd1c             496095     5863   450545     1%    /var
/dev/ccd3c            9917819        1  9124393     0%    /export
procfs                      4        4        0   100%    /proc
----------------
 /dev/ccd3c は、5GB*2 なので、10GB として認識しています;-)。あ、そーそー、最後にですが、/ パーティションは自分で頑張ってバックアップを取りましょうね。 / が飛んだらおしまいです・・。


Copyright (c) 1997-2004 takachan@running-dog.net All Rights Reserved.