dmraidの苦悩(その1)
筆者が通常使用する環境にはdm(Device-mapper)やdmraidは必要としていなかったし、これらを使うような開発の仕事も無かったので、以前からこのコラムで取り上げるためだけにインストールとテストを重ねていた。しかし評価を始めて約半年以上経った今でも、このdmraidの出来は極めて悪いと言える。筆者が調査やテストにかけられる余分な時間はあまり無いので、見落としや勘違いがあるかも知れないが、最初のリリースの頃から含めてかなりの時間をかけて作業しても、dmraidはまともに動かないように見える。去年の8月以降、ここの記事が滞りがちになった理由の半分以上は、dmraidのせいかも知れない。
dmraidとは?
dmraidが何かというヒントとその登場の予言を、2003年12月のNicklas Bondessonの「ataraid in 2.6.?」と題したLKMLへのポストをきかっけに、探ってみる。
Nicklasはataraid(市販されている比較的安価なATA RAIDボード、純粋にソフトウェアだけで構築するソフトウェアRAIDと対比して、ハードウェアRAIDとも呼ばれる事がある)のサポートについて聞いた。「ataraidフレームワークは2.6に移植される予定はあるのだろうか?移植されるのであれば、それに期待してもいいのだろうか?」
Arjan van de Venが答えた。「計画では、ユーザスペースのDevice-mapperアプリケーションにそれをさせることになっている。私はまさに今、その部分を見ているのだが、ユーザスペースDevice-mapperのコードはちょっとしたミステリーである。」
Nicklasの「カーネル2.6ではどのようにしてDevice-mappingを設定するのか。またなぜDevice-mapperとataraidを別々のオプションではなく、Device-mapperを使用してataraidを組み込むのか?」という質問について、dm-cryptに寄与したChristophe Saoutは次のように答えた。
その理由は不要なコードの複製を回避することだと思う。開発者はまた、ユーザスペースの中でできるコードを、カーネルから取り除くように進めているが、Device-mapperは、そのための一般的な方法を用意している。2.7のカーネルでは、パーティション検出を取り除くプランがある。Device-mapper経由のユーザスペース・プログラムに検出とセットアップ・コードを移動させるのである。それはinitramfsに置くことができるので、ユーザは気付かないだろう。誰かがユーザスペースの中でのataraid検出とセットアップ・プログラムを書けば、initrdにそれを置くことができるということである。
Arjan van de Venは、別々のオプションを取らない理由の説明をし直した。「コードの複製を避けるというよりはむしろ、Device-mapperはataraidそのものだからである。その結果ataraidのサポートは、あらゆるRAIDを識別する全ての魔法を実行し、カーネルのDevice-mapperにそれを伝える/sbin/ataraidみたいなもので実現されるだろう。
Device-mapperとは?
dm(Device-mapper)はカーネル2.6で新しく導入された、カーネルがサポートするブロックデバイスとアプリケーションとの間に位置する層で、デバイスドライバとサポート・アプリケーションで構成される。すでにカーネル2.6に含まれているが、最新版はDevice-mapper Resource Pageでサポートされているので、詳細や最新コードの入手は、そちらを参照されたい。
カーネル2.4で実装されたLVMは、カーネル2.6では新たにdmを利用して、LVM2として実装し直された。またLVM2のほかには、動作中のデータベースを一貫性を保ったままバックアップするために必要なスナップショット(dm-snapshot)機能や、暗号化機能(dm-crypt)も、dmを利用して実装されている。dm-cryptについては「dm-cryptと2.6シリーズ・カーネルでパーティションを暗号化」の記事を参照されたい。
dmraid (Device-Mapper RAID Tool) 1.0.0-rc1 Released
2004年7月にHeinz MauelshagenがLKMLにポストした。
dmraid 1.0.0-rc1のソースとi386用rpmは次のページにある。
http://people.redhat.com/~heinzm/sw/dmraid/
dmraid (Device-Mapper Raid tool)は、カーネル2.6のDevice-mapperランタイムを使用して、ATARAIDのようなソフトウェアRAIDセットと、それに含まれるDOSパーティションを発見し、有効または無効にし、プロパティを表示するものである。
次のATARAIDタイプをLinux 2.6でサポートしている。
- Highpoint HPT37X
- Highpoint HPT45X
- Intel Software RAID
- Promise FastTrack
- Silicon Image Medley
LSI Logic MegaRAIDについては、メタデータ・フォーマット仕様書が入手できないので、基本機能のみのサポートである。
これらのメタデータ・フォーマットを完全にサポートするためには観察と注意が必要である。このソフトウェアを実行するための前提条件として必要なREADMEとCHANGELOGファイルは、tarballに含まれるので参照のこと。dmraidのインストールおよび使用についてのさらなる指示もそこにある。
dmraidの実際
この記事を見て(実際は暫くたってrc2がリリースされた8月頃からだが)テストを始めた。筆者の手元にはHPT370/HPT370A/HPT372A, FastTrack(pdc20271ほか), Silicon Image Medley(Si0680A)等があったという理由もある。カーネル2.4まではこれらのコントローラのRAIDドライバは、ハードウェア・ベンダからバイナリでしか提供されなかったため、トラブル対応やコードに手を入れる場合には問題があった。カーネル2.6からオープンソースになり、共通レイヤの上でこれらサポートされるようになれば素晴らしい事である。
ここでIntel Software RAIDというのには少し注意が必要である。dmraidでiswと呼ばれるIntel Software RAIDを使用するためには、ICH5R/ICH6R/ICH7Rのサウスブリッジに2台のSATA DISKを接続して、BIOS設定でIntel SATA RAID BIOSを有効後、起動時にControl-Iを押して、Intel RAID BIOSでRAID設定をしなくてはなくてはならない。IntelのDISKコントローラで動作する「Software RAID」という訳では無いし、一般的なR無しのICH5/ICH6/ICH7のマシンでは、例えSATA DISKを2台接続していても利用できない。筆者はいずれの手持ちのataraidボードでも安定動作させることが出来なかったので、途中でSATA DISK4台とICH5Rのマザーボード2枚を買い足したが、安定運用まではこぎつけていない。
このような実験は一発で動作しないと非常に工数のかかるものである。何種類かのマシンに、何種類かのディストリビューションを入れ、何種類かのカーネル・パッチ、コンパイルを行い、ataraidチップまたはボードを替えて、パーティションを切り、フォーマットして大容量データのコピーやtarの吸い上げと展開を繰り返してみるのである(事実、大容量データの繰り返し操作により、ハングする場合もあった)。このように様々な環境での動作でdmraidが引き起こすトラブルは、認識不良、ハング、エラーメッセージ多発、パーティションサイズの誤り等、様々で再現しない場合もあるため、もっと安定するまでは記録するのを諦めることにした。
筆者がテストした環境ではDevice-mapperを利用したLVM2やdm-cryptは問題なく動作しているように見えるので、今のところdm(Device-mapper)には、それほど問題があるとは思えない。また環境によっては、isw(ICH5R+FedoraCore3+linux-2.6.11.2+dmraid-1.0.0-rc5f)の組み合わせのように、striping(RAID-0)の運用では安定動作する場合もある。しかし現在までmirror(RAID-1)で安定運用ができないのは、致命的であるとも言える。なぜなら一般的にこれらのRAIDコントローラの多くは、mirror(RAID-1)で安定運用できることが期待されて、導入されているからである。
次回は動作報告ができる事を期待している。
(2005年4月2日 ataraidに関する曖昧な表現を訂正)