2008年2月2日土曜日

fedora 8 で四苦八苦 raid編

 raidに関する要望もありましたので記載いたします。

 fedora8に限らず、Linuxでraidを面倒なく使用するにはハードウェアRAIDボードが必要になります。
 ハードウェアRAIDボードとは、例えば次の製品です。
  Adaptec Raid 3405(ASR­-3405/JA ROHS KIT)

 私のところでも使用しているRAID対応SATAコントローラ(Sil-3114搭載RAID5対応)みたいなカードは上述のハードウェアRAIDボードとは異なります。

 このあたり、グチを含めて長短を書くと次のようになります。

 1 ハードウェアRAIDカード
  マイコンとメモリがオンボードされている
  マイコンはRAIDアレイを管理し、管理機能を提供する
  よってCPUリソースを消費しない
  Linuxはもちろんのこと、WindowsからもハードウェアRAIDとなる
  (SCSIカードとして認識させておき、RAIDはボードが管理する)
  価格が高く、約7万円以上し、数十万円するのもある
  私のほか多くのユーザーが欲しくても買えない事が多いと思う

 2 ソフトウェアRAIDカード
  販売では単に「RAID5対応」って書かれてるものが大半
  Windowsでは容易にデバドラ登録できるので意識しないようになっている
  よってソフトウェアRAIDであることを必死に隠しているとも取れる
  CPUリソースを消費し、キャッシュメモリも搭載されていない
  (SCSIカードとして認識させ、RAIDはOSが管理する)
  2万円以下なら、まず間違いなくソフトウェアRAIDカードです

 私のところで使用しているSil3114搭載RAID5対応カードも上記の2に該当する ボードです。販売や広告ではRAID5対応って書いてあり、BIOS起動中にRAIDとして構築してやることができます。この機能で構築されたRAIDはWindowsではデバドラを容易にインストールすることができるので簡単に使用することができます。
 しかし、LinuxにおけるハードウェアRAIDではありませんのでソフトウェアRAIDを構築してやる必要があります。
 fedora8のインストーラでもソフトウェアRAIDを構築できる場面があります。karnel2.4系列の頃に販売されていたPATA-RAID対応カードの多くが利用できます。これは現在のkernel2.6系列になってATARAID機能が充実されたおかげです。 しかし、SATAはこれからのものであり、ATARAID機能みたいな便利なものがありません。よってSATAではインストール時点でRAIDを組み込める可能性はありません。

 さて、前書きはこの程度にしておいて、それでもソフトウェアRAIDをSATAで構築したので記述しておきます。

 まずソフトウェアRAIDとしての長短を記載します。
  1 安価に構築できる
  2 ドライブ単位のほかパーティション単位でも構築できる
  3 /ドライブや/bootディレクトリへは制約がある(RAID1のみ対応)
  4 /usrや/dev、/etcも基本的には上記3に従うのが良い
  5 /homeや独自作成ディレクトリとして使用するのが良い

 よって、私のところでは上記5のような使い方をしています。
 つまり、/smbshareというようなディレクトリを使用しておき、そこへソフトウェアRAIDとして構築したmd0デバイスをEXT3ファイルシステムでマウントし、sambaの共有データを保存する公開用領域としています。
 それなら、玄箱(黒箱)や素箱(白箱)で十分ではないかと思われる方も居られると思いますが、これらのNAS箱はRAID5に対応していません。
 逆にNASユニットならばRAID5で構築できますが、価格が高い…。資本力のない私のところでは手が届きません(懸賞でも当れば別ですけど…)。

 このため、/smbshareにマウントしてsmb公開ディレクトリとして運用することを前提にして説明していきます。

 ドライブ構成(/用ドライブを含む)
  intel ICH5 SATA接続 - /dev/sda (/用ドライブ)
  Sil3114 SATA接続 - /dev/sdb,sdc,sdd (/dev/md0用ドライブ群)
  Sil3114 SATA接続 - /dev/sde (/のバックアップ用ドライブ)

 まずは/dev/sdaにfedora8をインストールしておきます。
 必要なドライブを接続しておいて領域として認識できる状態にしておいてfedora8を起動させます。
 次にマウント予定となる/smbshareを作成します。
  mkdir /smbshare

 続いてsamba公開用として設定しておきます。
  chcon system_u:object_r:samba_share_t:S0 /smbshare

 さらにchmodをかけて一般ユーザーからも読めるようにしておきます。
  chmod 775 /smbshare

 いよいよ/dev/md0の構築になります。
 fedora8のRAIDツールはmdadmが行います。管理もmdadmコマンドを使用します。「RAID Linux」とかでGoogle検索するとmdadmよりもraidutil系が多く出てくると思います。これは2.4系列の頃はraidutil系が多く使用されていたことによります。fedora8ではraidutil系は実装されておらず、mdadmになります。
 まずは/dev/md0を構築します(改行で見えても1行です)。

  mdadm -C /dev/md0 -a yes -l raid5 -n 3 -x 0 /dev/sdb /dev/sdc /dev/sdd(この内容を大文字小文字に注意しながら一気に入力する)

 すると「mdadm: array /dev/md0 started.」ってメッセージが表示されます。これで/dev/md0が構築開始されたことになります。
 えっ?開始?使用できるんじゃぁ~ないの?
 使用しない方がいいです。アレイを構築完了するまではジッと待ちます。
 ちなみに私のところではSATA2対応ドライブで320GBx3をRAID5した640GBの/dev/md0を構築完了するまでに要した時間は150分!!でした。気長に待ちましょう!!
 リアルタイムな経過を見ることはできませんが、ときおり次のコマンドを入力して経過を見ます。
  cat /proc/mdstat
 作成途中はRAID5でも何故か[UU_]となり、RAID4のような表示ですが完了すれば、きちんと[UUU]となります。finish=ってところを見て完了までの予定時間を確認したら他の事をした方が良いでしょう。
 500GBx3のRAID5なら3時間を越えると思いますので外出もできますねぇ。
 長い時間をかけて完了したら、/dev/md0の完成です。
 しかし、/dev/md0はいうなれば、/dev/sda1を用意したに過ぎません。
 よって、ファイルシステムを構築してやる必要があります。今回の場合はEXT3フォーマットになります。
  mkfs.ext3 -L raid5 /dev/md0

 -LオプションでLABELを埋め込んでおきます。
 ここでtune2fsで/dev/sda1と同じになるように設定しておきます。
 まずは、/dev/sda1を見ます。
  tune2fs -l /dev/sda1

 表示されたうち、Maximum mount countとCheck intervalに注目してください。fedora8のインストーラが作成した状態ではシステムドライブであってもMaxium mount countは-1、Check intervalが0となっています。
 よって、今回作成した/dev/md0も同じにしておきます。
  tune2fs -c "-1" -i 0 /dev/md0

 -1のところは-cの引数であることを強調します。
 本来ならば-iのところを180dとして半年に1度程度は再起動させたときにfsck.ext3を走らせたいところですが、任意に行ってください。場合によってはcrondに設定しておくのも管理上のポイントです。
 ここまで来たら、再起動~←してはいけません!!
 せっかくの/dev/md0を再起動時に自動認識してくれません。
 私の初回はこれで無駄な時間を過ごしました。
 再起動しても自動認識する設定を施しておきます。
 方法は/etc/mdadm.confを作成し、定義しておくことです。
 作成方法は任意ですが、私の場合は次のようになります。
  kedit /etc/mdadm.conf &

 KDEですのでkeditで編集画面を開いておきます。
 次の定義内容を埋めてやるのにUUIDパラメータ必要になりますのでコンソールで確認します。
  mdadm --misc --detail --brief /dev/md0

 これで表示されたUUID=ってのが重要なパラメータの1つです。

 これで再起動しても/dev/md0を自動認識します。
 あとはマウントしてやるための設定です。
 先ほどマウント用として作成したディレクトリにマウントさせてやります。
  mount /dev/md0 /smbshare

 無事にマウントできると思います。できない場合はSELinuxのコンテキストが修正できていなかったり、chownやchmodでの修正が合っていない可能性があります。
 マウントできたら'll -Z /'としてみます。
 SELinuxのコンテキストが変化していると思います。
 これはマウントした前の状態からマウントして変更されたためです。
 よって、マウントした状態でもchconしておきます。
  chcon system_u:object_r:samba_share_t:S0 /smbshare

 これでsambaの公開用として巨大な領域が確保されました。
 あとはsambaから設定やります。
 それと、/etc/fstabファイルを修正して、再起動しても自動的にマウントする
ようにしてやります。
 /etc/fstabへの追加場所としてはswapの前あたりが最適化と思い、私のサンプ
ルではそうなっています。
 ちなみにサンプルではsambaのDOS拡張が使用できるようにuser_xattrを付加し
ていることと、システムドライブとして/の1番目の後に2番目としてマウントするように設定してあります。

 これで/dev/md0の構築と運用開始までは完了です。
 あとはホットスワップのお世話にならないように適当な月数でドライブを更新したりしてください。
 万一にも/dev/sdbの障害が発生したら次のようになります。
 まずは障害を通知させ、/dev/md0に覚えこませる。
  mdadm --manage /dev/md0 -f /dev/sdb

 次にアレイから削除する。
  mdadm --manage /dev/md0 -r /dev/sdb

 念のため、/etc/mdadm.confを適当にリネームして自動認識しないようにしておく。
 ここでホットスワップでない私のような場合はサーバーを停止します。
  poweroff

 ドライブを交換し、電源を投入、サーバーを起動する。
 その後、アレイへの追加をする。
  mdadm -A /dev/md0 /dev/sdc /dev/sdd
  mdadm --manage /dev/md0 --re-add /dev/sdb

 進行をチェックし、完了すれば修復終了です。
  cat /proc/mdstat

 リネームした定義ファイルを/etc/mdadm.confへ戻す。