枕草子 (My Favorite Things)

【第154回】 LinuxでRAID(1999年7月30日)

■序曲 地獄へと続く道

シミュレーションの結果生成するデータも大きくなってきたので,今年の予算ではRAIDによる大容量のハードディスクを組むことにした。RAID化する意味は,信頼性の向上とアクセス速度の向上にあるので,RAID-5で組むことにした。

問題は,どのコンピュータに組み込むかである。まず,ローカルのWindowsシステムに組み込むか,サーバ側に組み込むかという選択がある。自分専用のstorageにするなら,ローカルに組み込んだ方がよさそうだが,2つの理由でこれはできないのだった。第1に,WindowsをWindows2000が出たらバージョンアップするつもりだからということがある。バージョンアップしたときに(まず,ないとは思うが),RAIDのディスクが読めなくなっては困るのである。第2に(こっちの方がより本質的な理由だが),ぼくのWindowsマシンはCD-ROM, CD-RW, MO, HDD2台,フロッピーディスクドライブを内蔵していて,これ以上追加しようにもドライブベイに空きがないのだ。

というわけで,サーバにRAIDを組み込むことにした。システム選定の条件は,10 GB以上のRAID-5である。主たるシミュレーションをAlpha/Linuxマシンでやる以上,本当はこれに組み込むことが望ましいのだが,実はAlphaには既にSCSI, Ethernet, 物理乱数生成ボード(RANDOM MASTER), ディスプレイカードと4枚のカードが差してあり,PCIスロットに空きがないのだった。そこで,他のサーバマシンに組み込むことになったわけだが,sv2号機はhumecoドメインのプライマリDNSサーバであるばかりではなく,青空メーリングリストなど数多のMLのサーバとして稼働しており,設定を変更したくなかった。人類生態にはhumeco1という名のEWS4800/330マシンやyumiという名のWindows NTマシンもあるのだが,EWS-UX用のRAIDドライバなどフリーであるわけがないし,NTをサーバにするのはパフォーマンスが心配なので,sv1号機をターゲットに決めた。

ところが,sv1号のOSはFreeBSD 2.2.5なのだった。いろいろと調べた結果(ここでは詳細には触れない),安くて高速で信頼性のあるRAIDを組むには,MylexのAcceleRAID 250というカードにUltra2SCSIの9.1 GBのHDDを3台つないで内蔵すると,約25万円で17 GBの超高速storageが完成することがわかっていた。それ故,これがベストの解であると結論されたのだが,このカードはLinuxのドライバはあるものの(添付されてはいない),FreeBSDのドライバは存在しないのだった。とるべき道は,既に1つしかない。OSを入れ替えるという難事業に着手することになってしまったのである。


■RH6.0は簡単?

まずは例によって理研のftpサイトのRedHat LinuxディレクトリからRH6.0/i386のファイルをダウンロードしてCD-Rを焼く。これは簡単である。次に,rawriteによりブートイメージフロッピーを作成する。ここまではWindowsマシンでの作業であり,あっと言う間である。あとは,実際のインストール作業に入るわけだが,WEBサイトの設定などいくつかと共通設定と,/homeをバックアップするだけにして,RAIDカードを差し,ハードディスク3台を内蔵して,いきなりインストールを始めた。

マザーボードが古いため,XBDAとかなんとかいう機能がサポートされていないらしく,RAIDカードのBIOSが動かないという苦難に直面したが,どうせドライバが作動すればBIOSなんて使わないはずなので無視してインストールを続けた。インストールは順調に進み,カーネル読み込み時に,DAC960なんたらと表示され,RAIDカードはハードウェアとしては認識されたらしい。ところが,ディスクが認識されていない。fdiskでRAIDドライブにパーティションを切ろうと思っても,認識されないのでは仕方がない。原因は何なのだろうか?

ここで,ぼくは何を血迷ったか,カーネルのアップデートをしてしまった。ご存じのように,RedHat 6.0についてくるカーネルのバージョンは,2.2.5-15である。安定版の最新カーネルは2.2.10なので,このソースを/usr/srcにダウンロードしてきてtar xvzf linux-2.2.10.tar.gzと展開し,cd linuxしてmake mrpropermake configmake depmakeと順番に実行するだけで,2.2.10カーネルは簡単にできる。ブートディスクはmake bzdiskとするだけで簡単に生成する。make configのときにRAIDのドライバに関するオプションがないのが少々気にかかったが,デフォルトで組み込みなのだろうと甘く考えて実行してしまったのである。

ここには2つの間違いが存在した。1つは,RH6.0がカーネルを/usr/src/linux-2.2.5-15で構築しており,/usr/src/linuxは,そこへのシンボリックリンクなのを,見落としていたことである。2.2.10のソースが,linux-2.2.5-15に上書きされてしまったのだ。もう1つは,『2.2.10カーネルにはAcceleRAID 250のドライバが入っていない』という冷徹な事実である。何度か再起動してもRAIDカードは認識されないので,MylexのFAQのページの説明を読み直してみたら,AcceleRAID 250のドライバは,RedHat 6.0など三種の商用パッケージに組み込まれているのであって,カーネルに入っているわけではないのだった。なんという衝撃の事実であろうか? (たんに,ぼくが間抜けなだけである,ということもできるが,ここではそういう品のない表現方法はとらない)


■RAIDカードのconfiguration

打ちのめされながらも,冷静になって考えてみると,RAIDカード自体の動作モードやハードディスク構成は,やはりBIOSで設定しておく必要があるのではないか,と思うに至った。しかしマザーボードのBIOSがRAIDカードのBIOSの動作を許していない以上,このままではそれは不可能である。こういう場合,普通ならマザーボードのBIOSをアップデートするのだが,mycomp-tmcTI6NFKのBIOSダウンロードに登録されているファイルは間違っているので,それができないのである。Award BIOSの筈なのに,解凍して出てくるのはAMI BIOS用のファイルなのだ。苦肉の策として考えたのが,じゃあ,RAIDカード側のBIOSをアップデートすれば良いではないか,ということであった。Mylexのサイトにある新しいBIOSをダウンロードし,Windows98でformat /sしたフロッピー上に展開する。あとは,このフロッピーをsv1号に差してからrootでログインし,shutdown -r nowすると,DOSプロンプトが表示されるので,ezassistと入力してリターンキーを押して,画面の指示に従えばよい。驚いたことにBIOSと同等の画面がでるので,ここでハードディスク構成のコンフィグレーションをすることができた。その後,Advanced Optionsからflashを選んで4つのイメージファイルをフラッシュメモリに書き込めば,BIOSアップデート完成である。結果的には,マザーボードが駄目なせいでRAID側のBIOSを有効にすることはできなかったのだが,この操作によってハードディスク構成のコンフィグレーションができたのは大きかった。ハードディスク構成は,基本的にカードがもつべき情報なので,OS側からは見えなくてよい筈なのだ。


■RedHatのカーネルに戻せるのか?

ことここに至り,解決策は2つあることがわかった。1つは,kernelを2.2.10からRedHat版2.2.5-22にダウングレードすることである。これならMylex AcceleRAID 250のドライバは組み込み済みの筈なので,再起動するだけで認識されるだろう,と思われた。ところが,世間はそう甘くなかった(世間か?)。実行形式もソースファイルもrpmとしてダウンロードできるのだが,実行形式は,2.2.5-15とバッティングするらしく,インストールできないのである。ソースを入れようと思うと,2.2.5-15ディレクトリの中身に2.2.10のソースの一部が上書きされているせいか,やはり一発では入らないのだ。しかたないので,rpm -eで2.2.5-15をアンインストールしてから,2.2.5-22のソースを入れたのだが,make mrproperとmake config,make depまでは行くのだが,makeの途中でErrorが起きて止まってしまう。萩原君がさんざん悩んでくれたが,この方針は断念せざるを得なかったのである。


■RAIDカードのドライバを2.2.10に組み込もう

とうとう,最後の手段に追い込まれてしまった。ドライバの開発元から2.2.7用のドライバとパッチとユーティリティをダウンロードしてカーネルを再コンパイルするのである。開発者の言によれば2.2.10以上ではまだ不安定らしいのだが,背に腹は代えられないのである。まず,バージョンの混乱には疲れ果てたので,/usr/src/linuxというシンボリックリンクは消去して,最初から2.2.10カーネルソースだけを/usr/src/linuxに展開する。次にダウンロードしてきたAcceleRAID 250のドライバを展開し,パッチを新しいものと置き換えてから,README.DAC960に書かれている通りにしてカーネルにドライバを組み込み,パッチをあてる。後は定型作業である。箇条書きしてみよう。

  1. /usr/src/linuxに入ってmake configする。(注:このとき設定は.configにできるので,後でこのファイルを編集すれば,make configに失敗しても最初からやり直さなくてよい,ということを覚えておくと便利である)
  2. make depして,makeする。
  3. 起動用ディスクをいれてmake bzdiskする。
  4. shutdown -r nowする。
  5. 勝手にLinuxが起動し,BIOSのところでシステムドライブが認識されるのを確認。カーネル読み込み後にもドライバが組み込まれている旨のメッセージが表示される。
  6. rootでログインし,dmesgすると,/dev/rd/c0d0がRAIDハードディスクのデバイス名で,容量約17 GBであるという表示が出るので満足する。
  7. fdisk /dev/rd/c0d0でパーティションをとる。面倒なので基本パーティション1発にする。
  8. mkfs /dev/rd/c0d0p1で全部1つのext2としてフォーマット
  9. mkdir /workしてからchmod 777 /workして,mount /dev/rd/c0d0p1 /workする。
  10. dfでうまくいったのを確認(/workは17 GB)後,/etc/fstabも書換える。これで,sv1号にaccountをもつ人なら誰でも使える大容量で信頼性の高いstorageができた。まあ,セキュリティ上は,/workを使う人たちを同じグループに設定してchmod 775 /workとしておくのが好ましいのであろうが。

まあ,そういうわけで,紆余曲折があったが,無事にLinux上でRAIDシステムをセットアップすることに成功した。同じようなことを企画している人に,この文書が何らかの役に立てば幸いである。


前【153】(Wzエディタ礼賛(1999年7月27日) ) ▲次【155】(野尻湖とブルーベリー園と温泉と(1999年8月02日) ) ●枕草子トップへ