FreeBSDのSoftware RAID1構築
ATA RAIDカードで散々苦労した結果、「RAID1にhardwareなんて不要です。偉い人には(ry」と悟った.
たとえRAID I/Fが認識されても、Promise FastTrax TX2000とHGST HDT722525DLAT80 のように互換性問題を起こす可能性や、安いRAID I/FはほとんどSoftware RAIDと変わらないらしいので、それならFreeBSDのSoftware RAIDの方が余程信頼が置けると判断した.
【追記】ここでfdisk partitionは1つしか作ってはならない。Standard MBRはmulti partitionを扱う事が出来ず、ブート時にInvalid partitionというエラーを出して止まってしまう。
またATA100/133の場合、ATA I/Fを2つも使ってしまうので光学ドライブ(CD-ROM, CD-R, DVD, DVD-R等のドライブ)が使えなくなる。 新しくHDDを買って構築するなら、SATA HDDをお勧めする。
( 光学ドライブはそれなりに電力を消費するので、サーバでは外しておく方が望ましい )
[6/1/2007追記] なお、FreeBSD amd64 6-STABLEでもこの方法でSofware RAIDを作れる事を確認した。
たとえRAID I/Fが認識されても、Promise FastTrax TX2000とHGST HDT722525DLAT80 のように互換性問題を起こす可能性や、安いRAID I/FはほとんどSoftware RAIDと変わらないらしいので、それならFreeBSDのSoftware RAIDの方が余程信頼が置けると判断した.
ただし、RAID5/6ならハードウェアRAIDの方が良い。OSがクラッシュした際にRAIDカードが正常作動していれば、各ドライブで一貫性のあるデータを保持する事ができる。ソフトウェアでRAID5を行うと、OSクラッシュ時にドライブ間での一貫性を保つ事が困難で、被害が大きくなると予想されるため.そこでFreeBSDでソフトウェアRAIDを構築する方法を調べてRAID1を構築した。以下にその方法を示す.
RAID1ではほぼ同時に2つのドライブに書き込むため、ソフトウェアRAIDでもOSクラッシュ時の影響は少ない.
注意点
ここで説明する方法では、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-F4でshが使えるのは、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での書き換え方法を以下に示す.この方法はシステムが壊れかけたときに有効であった.vi, ex, edなどエディタ全てが使えなくなったのだが、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 #
元々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の完成
起動したら、正しく動作しているか確認する.次に、ミラーディスクである/dev/ad2を追加する.% 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/devswapは、swapinfoで確認できる。% swapinfo Device 1K-blocks Used Avail Capacity /dev/mirror/gm0s1b 3145728 120 3145608 0%
これでad2がgm0に追加され、自動的にミラーリングが行われる.進捗状況は、# gmirror statusで見る事ができる。このまま数時間動作させているとミラーリングが終了する。その間、リブートや電源断が必要でない作業はそのまま行えるので、必要に応じて作業して構わない.# gmirror insert gm0 /dev/ad2 GEOM_MIRROR: Device gm0: provider ad2 detected. GEOM_MIRROR: Device gm0: rebuilding provider ad2.
トラブルへの対処
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からブートすればそのままインストーラが起動する。
(なお、以下の画面ダンプはクリックすれば拡大表示される)
インストーラが立ち上がると、この画面が表示される。
ここの、Configure Do post-install configuration of FreeBSD を選択し、[ Select ]を押す。
ここの、Configure Do post-install configuration of FreeBSD を選択し、[ Select ]を押す。
この画面では、インストール後に各種設定などを行うことができる。
Fdisk The disk Slice (PC-style partition) Editorを選択して[ OK ]を押す。
Fdisk The disk Slice (PC-style partition) Editorを選択して[ OK ]を押す。
ここでは、fdiskで操作するドライブを指定する。
なおStandard MBRにするのはFreeBSDをインストールしたディスクのみで良い.。他方のディスクには 後のミラーリングでMBR(Master Boot bRock)領域もコピーされるためである。
ここでは、ad0にFreeBSDがインストールされているとするので、[ ad0 ]を選択し、 [ OK ]を押す。
なおStandard MBRにするのはFreeBSDをインストールしたディスクのみで良い.。他方のディスクには 後のミラーリングでMBR(Master Boot bRock)領域もコピーされるためである。
ここでは、ad0にFreeBSDがインストールされているとするので、[ ad0 ]を選択し、 [ OK ]を押す。
ここではパーティション関連の操作を行う事ができるが、ここは"W"を押すだけである.
注意:余計な操作をすると、ディスク上のデータを失うことがある。
注意:余計な操作をすると、ディスク上のデータを失うことがある。
前の画面でWを押すと、Boot managerをインストールするか否かを聞いてくるので、
Standard Install a standard MBR (no boot manager)
を選択し、[ OK ]を押すと、Standard MBRがインストールされる。
ここでうっかり間違えてBootMgrを押してしまったら、最初からやり直せばよい。
Standard Install a standard MBR (no boot manager)
を選択し、[ OK ]を押すと、Standard MBRがインストールされる。
ここでうっかり間違えてBootMgrを押してしまったら、最初からやり直せばよい。
2. ミラーを作成した後に、ブートが失敗する。
ブートが失敗する要因は、以下の2つである。- standard MBRが無いため、/dev/mirror/gm0 が存在しない
- /etc/fstab が間違っている
- /boot/loader.confが正しくない
以下では、実際に起こるブート失敗画面の説明と対処法を述べる。
これはブートしようとしたパーティションが見つからない事によって起きる。 ここで ? を押すと、GEOMが把握しているパーティションが表示されるので、適切なルートパーティションを選択して、ブートさせる。なお通常rootパーティションは"a" パーティションであるから、/dev/ad0s1a, /dev/mirror/gm0s1aなどが該当のパーティションである。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>
なお上記の画面ではRAID1パーティションであるmirror/gm0s1aなどが表示されているが、ここで表示されない場合はStandard MBRがインストールされていないか、gmirrorを使った設定に誤りがあるたか、/boot/loader.confが間違っているためである。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
次に起こり得るブート失敗は、ルートパーティションのマウントには成功した物の、その後で/etc/fstabにあるパーティションがマウントできないという場合である。
(なお、上記メッセージは記憶に頼って書いているので、実際とは多少異なる。) ここで shellを起動すると、シングルユーザモードで作業ができる。この場合/etc/fstabに間違いがあるためなので、viなどで修正すれば良い。ただし、root以外はマウントされていないので、mountを使って手動で/usrや/varなどをマウントしないとviは使えない。どのパーティションに何が入っているかわからなくなったら、/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 :
3. 以前sofware RAIDで使っていたHDDで再度RAIDが作れない
パーティションサイズを間違えたなどの理由で再インストールする際、 そのままだとRAIDが作れず、ブートしようとしても様々な現象が起こる事がある。これは、HDDにRAIDのメタ情報が残っているためである。よって、以下のコマンドで メタ情報をすべてのディスクから消去すればよい。
# gmirror clear /dev/ad0 # gmirror clear /dev/ad2