« xorg7.2へ移行 | メイン | KVMスイッチ »

FreeBSDのSoftware RAID1構築

ATA RAIDカードで散々苦労した結果、「RAID1にhardwareなんて不要です。偉い人には(ry」と悟った.
たとえRAID I/Fが認識されても、Promise FastTrax TX2000とHGST HDT722525DLAT80 のように互換性問題を起こす可能性や、安いRAID I/FはほとんどSoftware RAIDと変わらないらしいので、それならFreeBSDのSoftware RAIDの方が余程信頼が置けると判断した.
ただし、RAID5/6ならハードウェアRAIDの方が良い。OSがクラッシュした際にRAIDカードが正常作動していれば、各ドライブで一貫性のあるデータを保持する事ができる。ソフトウェアでRAID5を行うと、OSクラッシュ時にドライブ間での一貫性を保つ事が困難で、被害が大きくなると予想されるため.
RAID1ではほぼ同時に2つのドライブに書き込むため、ソフトウェアRAIDでもOSクラッシュ時の影響は少ない.
そこでFreeBSDでソフトウェアRAIDを構築する方法を調べてRAID1を構築した。以下にその方法を示す.

注意点

ここで説明する方法では、boot Managerと共存する事ができず、必ず標準のStandard MBRが必要となる. サーバとして稼働させるなら問題にならないが、Desktop PCなどでOSの使い分けをしたいのなら、それなりに工夫する必要がある。
【追記】ここでfdisk partitionは1つしか作ってはならない。Standard MBRはmulti partitionを扱う事が出来ず、ブート時にInvalid partitionというエラーを出して止まってしまう。
disk0(ad0)にboot Managerと他のOS(Linux, Win*等)をインストールした後に、残りのATA/SATA diskにFreeBSDとMBRをインストールすれば可能ではないかと思われるが、確かめていないので保証はできない。
またすでにFreeBSDをboot managerとインストールしてしまった場合には、後に述べる方法でStandard MBRをインストールする事で可能になる。
またATA100/133の場合、ATA I/Fを2つも使ってしまうので光学ドライブ(CD-ROM, CD-R, DVD, DVD-R等のドライブ)が使えなくなる。 新しくHDDを買って構築するなら、SATA HDDをお勧めする。
( 光学ドライブはそれなりに電力を消費するので、サーバでは外しておく方が望ましい )

GEOMとは

GEOMとは、FreeBSD5.0から取り入れられたディスクのモジュール式フレームワークである。このフレームワークはディスクを操作するプログラムの為に作られている.今回作成するsoftware RAID1も、このGEOMフレームワークで実現されている.
[6/1/2007追記] なお、FreeBSD amd64 6-STABLEでもこの方法でSofware RAIDを作れる事を確認した。

作業手順

1. ハードウェアの用意

同じHDDを2台準備し、それぞれ別のATAバスにつなぐ.(SATAは必ずそうなるので、心配無用)
ここでは、ad0 と ad2 につなげたとする。

2. 片方のディスク(ad0)に、普通にFreeBSDをインストールする。

boot managerをインストールしないように注意.

3. ad0からブートさせてみる.

ここでRAID以外の問題を解決しておく.自信があれば、このステップを飛ばしても良い.

4. mirror deviceを作成する

インストーラからは、Alt-F4でシェルのコマンドラインに出る。すでにブートしていれば、そのまま作業して良い.

[ 3/12/07 追加 ]
インストーラからAlt-F4shが使えるのは、FreeBSDのインストールが終わり、インストーラのメニュー画面まで戻ってきた後である。リブートは必要ない。

以下はすべてrootで作業する.
 % su
Password:
# sysctl kern.geom.debugflags=16
 kern.geom.debugflags: 0 -> 16
      ... これでGEOM関連の操作が可能になる.
# gmirror label -v -b round-robin gm0 /dev/ad0
Metadata value stored on /dev/ad0
Done.
     ....ミラーディスクgm0が作成され、ad0が加わった.
# echo 'geom_mirror_load="YES"' >> /boot/loader.conf
    ....これで起動時にGEOMのミラーデバイスが認識される。

5. /etc/fstabを書き換える

gmirrorによって、/dev/ad0s1* → /dev/mirror/gm0s1* と置き換わるので、/etc/fstabを 修正する必要がある。viを使って書き直せば良いのだが、sedでの書き換え方法を以下に示す.
# cd /etc
# cat fstab  ...... 元のfstabの内容は以下の通り
# Device        Mountpoint      FStype  Options         Dump    Pass#
/dev/ad0s1b     none            swap    sw              0       0
/dev/ad0s1a     /               ufs     rw              1       1
/dev/ad0s1g     /home           ufs     rw              2       2
/dev/ad0s1d     /usr            ufs     rw              2       2
/dev/ad0s1f     /usr/obj        ufs     rw,async        0       0
/dev/ad0s1e     /var            ufs     rw              2       2
/dev/acd0       /cdrom          cd9660  ro,noauto       0       0
md              /tmp            mfs     rw,-s128m       0       0
# mv fstab fstab.bak  ......... 以前のfstabをとっておく
# sed  "s/ad0/mirror\/gm0/g" < fstab.bak > fstab 
.  ....."ad0"と"mirror/gm0"を置き換える事で、新しいfstabを作成する.
# cat fstab ...... 確認のため表示(見やすいように列を揃えている)
# Device           Mountpoint     FStype  Options    Dump    Pass#
/dev/mirror/gm0s1b  none            swap    sw          0       0
/dev/mirror/gm0s1a  /               ufs     rw          1       1
/dev/mirror/gm0s1g  /home           ufs     rw          2       2
/dev/mirror/gm0s1d  /usr            ufs     rw          2       2
/dev/mirror/gm0s1f  /usr/obj        ufs     rw,async    0       0
/dev/mirror/gm0s1e  /var            ufs     rw          2       2
/dev/acd0           /cdrom          cd9660  ro,noauto   0       0
md                  /tmp            mfs     rw,-s128m   0       0
#
この方法はシステムが壊れかけたときに有効であった.vi, ex, edなどエディタ全てが使えなくなったのだが、sedだけは利用可能で復旧できた.サーバトラブルでこんな事が起きる可能性は十分にある。必要なくともこういう方法がある事を覚えておいた方が良い.
元々400SCで使うために作ったHDDを、古いPentium2のPCで起動させようとしたところ、"Illegal instruction"などのエラーが多発して、どうにもならなくなった事があった。問題はそのHDDにインストールされていたFreeBSDがPentium4用(/etc/make.confで設定する) にコンパイルされていた物だったので、Pentium2には無い命令が 使われていたようである。このときviを起動しようとしても、"Illegal instruction"で落ちてしまう。最後の手段としてsedを使ったら、これは運良くPentium4の命令を使っておらず、なんとか復旧させる事に成功した。

6. リブート

問題なければ、起動時に以下のようなブートメッセージを見る事ができる。
GEOM_MIRROR: Device gm0 created (id=xxxxxxxxxxxx).
GEOM_MIRROR: Device gm0: provider ad0 detected.
GEOM_MIRROR: Device gm0: provider ad0 activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
GEOM_MIRROR: Device gm0 already configured.
Mounting root from ufs:/dev/mirror/gm0s1a

7. ディスクの追加、RAID-1の完成

起動したら、正しく動作しているか確認する.
% df -m
Filesystem         1M-blocks  Used Avail Capacity  Mounted on
/dev/mirror/gm0s1a       495    86   369    19%    /
devfs                      0     0     0   100%    /dev
/dev/mirror/gm0s1g    107477 32461 66417    33%    /home
/dev/mirror/gm0s1d     59503  4748 49994     9%    /usr
/dev/mirror/gm0s1f       989   285   624    31%    /usr/obj
/dev/mirror/gm0s1e     59503  6599 48143    12%    /var
/dev/md0                 123     1   111     2%    /tmp
devfs                      0     0     0   100%    /var/named/dev
swapは、swapinfoで確認できる。
% swapinfo
Device          1K-blocks     Used    Avail Capacity
/dev/mirror/gm0s1b   3145728      120  3145608     0%
次に、ミラーディスクである/dev/ad2を追加する.
# gmirror insert gm0 /dev/ad2
GEOM_MIRROR: Device gm0: provider ad2 detected.
GEOM_MIRROR: Device gm0: rebuilding provider ad2.
これでad2がgm0に追加され、自動的にミラーリングが行われる.進捗状況は、# gmirror statusで見る事ができる。このまま数時間動作させているとミラーリングが終了する。その間、リブートや電源断が必要でない作業はそのまま行えるので、必要に応じて作業して構わない.


トラブルへの対処

1. Boot managerをインストールしてしまった。

FTNSも良くやってしまうのだが、必要も無いのにBoot managerをインストールしてしまう事がある.これはインストーラのfdiskの後でbootする方法を選択する際に、Boot managerの上にカーソルが乗っているのでついついRETURNを押してしまうためである.
この状況をなんとかする方法は2つある:

1-1. fdiskを使う方法

この方法は大変危険な方法なので、以下の文章を読んで不安を感じるなら、次の方法(インストーラを使う方法)をお勧めする。

standard MBRは /boot/mbr である。よってfdiskで書き込んでやれば良い。具体的には
# fdisk -B -b /boot/mbr /dev/ad0
で良い。single user modeでないとエラーになる。また、fdiskが聞いてくる選択肢を誤って答えてしまうと、ディスクの中身を消してしまうので厳重注意。

1-2 インストーラを再度使う方法

インストーラから抜けてしまっていたら、rootで/usr/sbin/sysinstallを実行すればインストーラを使う事ができる。(以前のバージョンでは、/stand/sysinstallであった)
またOSがマトモに立ち上がらず手も足も出なくなったら、インストールCDからブートすればそのままインストーラが起動する。

(なお、以下の画面ダンプはクリックすれば拡大表示される)
conf-s.png
インストーラが立ち上がると、この画面が表示される。
ここの、Configure Do post-install configuration of FreeBSD を選択し、[ Select ]を押す。

conf-s.png
この画面では、インストール後に各種設定などを行うことができる。
Fdisk The disk Slice (PC-style partition) Editorを選択して[ OK ]を押す。

conf-s.png
ここでは、fdiskで操作するドライブを指定する。
なおStandard MBRにするのはFreeBSDをインストールしたディスクのみで良い.。他方のディスクには 後のミラーリングでMBR(Master Boot bRock)領域もコピーされるためである。
ここでは、ad0にFreeBSDがインストールされているとするので、[ ad0 ]を選択し、 [ OK ]を押す。

conf-s.png
ここではパーティション関連の操作を行う事ができるが、ここは"W"を押すだけである.

注意:余計な操作をすると、ディスク上のデータを失うことがある。

conf-s.png
前の画面でWを押すと、Boot managerをインストールするか否かを聞いてくるので、
Standard Install a standard MBR (no boot manager)
を選択し、[ OK ]を押すと、Standard MBRがインストールされる。
ここでうっかり間違えてBootMgrを押してしまったら、最初からやり直せばよい。



2. ミラーを作成した後に、ブートが失敗する。

ブートが失敗する要因は、以下の2つである。
  1. standard MBRが無いため、/dev/mirror/gm0 が存在しない
  2. /etc/fstab が間違っている
  3. /boot/loader.confが正しくない
よって、起こっている現象を観察して、上記の問題を解決する方法を探す事になる。
以下では、実際に起こるブート失敗画面の説明と対処法を述べる。
Mounting root from ufs:/dev/gm0s1a
setrootbyname failed
ffs_mountroot: can't find rootvp
Root mount failed: 6

Manual root filesystem specification:
  :  Mount  using filesystem 
            e.g. ufs:da0s1a
  ?             List valid disk boot devices
         Abort manual input

mountroot>
これはブートしようとしたパーティションが見つからない事によって起きる。 ここで ? を押すと、GEOMが把握しているパーティションが表示されるので、適切なルートパーティションを選択して、ブートさせる。なお通常rootパーティションは"a" パーティションであるから、/dev/ad0s1a, /dev/mirror/gm0s1aなどが該当のパーティションである。
mountroot> ?

List of GEOM managed disk devices:
  mirror/gm0s1f mirror/gm0s1e mirror/gm0s1d mirror/gm0s1c mirror/gm0s1b 
mirror/gm0s1a mirror/gm0s1 ad2s1 mirror/gm0 ad0s1 ad2 acd0 ad0 fd0

mountroot> ufs:/dev/mirror/gm0s1a
なお上記の画面ではRAID1パーティションであるmirror/gm0s1aなどが表示されているが、ここで表示されない場合はStandard MBRがインストールされていないか、gmirrorを使った設定に誤りがあるたか、/boot/loader.confが間違っているためである。

次に起こり得るブート失敗は、ルートパーティションのマウントには成功した物の、その後で/etc/fstabにあるパーティションがマウントできないという場合である。
(様々なエラーが大量に出る.)
Automatic file check failed; help!
Dec 12 23:08:24 init: /bin/sh on /etc/rc terminated abnormally, going to single
user mode.
Please enter full pathname of shell or RETURN for /bin/sh : 
(なお、上記メッセージは記憶に頼って書いているので、実際とは多少異なる。) ここで shellを起動すると、シングルユーザモードで作業ができる。この場合/etc/fstabに間違いがあるためなので、viなどで修正すれば良い。ただし、root以外はマウントされていないので、mountを使って手動で/usrや/varなどをマウントしないとviは使えない。どのパーティションに何が入っているかわからなくなったら、/etc/fstabや、そのバックアップを参考にする。

3. 以前sofware RAIDで使っていたHDDで再度RAIDが作れない

パーティションサイズを間違えたなどの理由で再インストールする際、 そのままだとRAIDが作れず、ブートしようとしても様々な現象が起こる事がある。

これは、HDDにRAIDのメタ情報が残っているためである。よって、以下のコマンドで メタ情報をすべてのディスクから消去すればよい。
# gmirror clear /dev/ad0
# gmirror clear /dev/ad2

トラックバック

このエントリーのトラックバックURL:
http://admin.homev6.jp/mt/mt-tb.cgi/22

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)