本節では運用中の Linux 機にあるかもしれない非 OS のディスクに、 Linux 本来の ATA RAID をインストールする方法を説明します。 ちなみに、非 OS ディスクというのは、 /, /usr, /var, /boot といった、Linux OS のパーティションが何も含まれていないディスクのことです。 言い換えれば、自由に使えるディスクが 2 台付いた、動作中の Linux 機があり、 その 2 台のディスクに ATA RAID ミラー (RAID 1)を設定したいわけです。 大切なデータをミラーデバイスに保存すれば、 そのデータは保護されます。 もちろん、他の RAID 1 同様、 データの読み込み中は、読み込み速度が改善しているのがわかるし、 ミラーデバイス上のデータを修正したり、そこに新しいデータを追加すれば、 書き込み速度が若干低下するのもわかります。 ですから、データディスクに対して、 書き込みよりも読み取りを頻繁に行なう場合は、 データディスクに RAID 1 を使うことをお勧めします。 サイトを滅多に変えないウェブサーバーのホスティングが良い例です。 そこでは、ウェブのコンテンツは滅多に修正されませんが、 かなり頻繁にユーザーのアクセスがあります。
以下は、お使いの RAID チップが Promise Technology 社製の場合に、 ATA RAID を非 OS ディスクにインストールする手順です。
お使いの Promise RAID チップ/カードの、 IO アドレス番号と IRQ 番号を見つけて下さい。
次に、/etc/lilo.conf を修正して、 適切な Append 行 を追加します。
そして、ataraid サポートを有効にします。 これは、Linux 機のスタートアップ時に ataraid モジュールを自動的にロードするか、 あるいはカーネルに ataraid サポートを組み込んでしまうか、 このいずれかで行ないます。
Promise FastTrack RAID も含めて、 アップグレードや障害復旧といったような、様々な作業を理解するため、 新たに Append 行 というものを導入します。
ブート時に LILO の boot: でわたす ide オプションはすべて、 文字列として一つにまとまると、 Append 行 を構成します。 /etc/lilo.conf の append= キーワード以降にある、 二重引用符で囲まれた ide オプションもすべて、 Append 行 を構成するものです。
例えば、Linux コンピュータのブート時に、boot: プロンプトで、
linux-new ide2=0x0001,0x0009,9 ide3=0x2000,0x2009,10 ide4=none nousb expert root=/dev/hda3
とタイプすると、Append 行 は次のような文字列になります。
ide2=0x0001,0x0009,9 ide3=0x2000,0x2009,10 ide4=none.
同様に、/etc/lilo.conf に次のようなセクションがあれば、
image=/boot/vmlinuz-2.4.9-10 label=linuxold read-only root=/dev/hde9 append="nousb ide2=0x9400,0x9002 ide3=0x8800,0x8402" initrd="initrd.img" |
Append 行 は以下のようになります。
ide2=0x9400,0x9002 ide3=0x8800,0x8402.
RAID を使った Linux 機のブートに関する問題に遭遇する場合、 適切な Append 行 を使わざるを得ない場合があります。 ですから、Append 行 がどういうものかを決定し、 それを書き留めておくことが大事なことになります。 こうしておけば、後に障害復旧の際に役立つし、 カーネルを簡単にアップグレードしたり、 ハードディスクの追加/撤去を行なう時にも助かります。
正しい Append 行 を決めるには、 まず最初に、すべての ide デバイスがどういうふうに接続されているのかを知っておく必要があります。 IDE デバイスは、ハードディスクでもいいし、ATAPI CDROM や その他のデバイス でもかまいません いったん Append 行 を決めてしまえば、 (ブート時の)boot: オプションに追加できるし、 あるいは /etc/lilo.conf の append パラメータに、文字列として割り当てることもできます。 この込み入った boot: オプションを覚えておいて、 毎回ブート時にそれをタイプするのが大好きなら別ですけど、 そうでなければ、二番目のやり方の方がいいでしょうね。 つまり、 /etc/lilo.conf にそのオプションを書いておきます。 append="自分の Append 行をここに書く" を追加して、そのファイルを保存し、それから /sbin/lilo コマンドを実行して、 新しい /etc/lilo.conf を有効にします。
理解を深めるため、 ide デバイスが次のようになっているとしましょう。
ide0: hda , hdb(ハードディスク)
ide1: hdc , hdd (ハードディスク、あるいは CDROM のような他のデバイス)
ide2: hde (最初の空きディスク)
ide3: hdg (二番目の空きディスク)
上記 2 台の空きディスク (hde と hdg) は、RAID 1 にしたいと思っているディスクで、 そこに、/dev/ataraid/d0 という raid デバイスを作ります。 ここで hdf も hdh も 無いことに注意して下さい。 これが Promise チップ上で IDE/RAID ポートを使うやり方だからです。 2 台のハードディスクを同一の Promise コントローラの IDE ポートに接続するのは、 賢いやりかたじゃないですね。 上記の例で言えば、Promise Technology 社のカード上で、 プライマリマスターとセカンダリマスターに接続して使用しました。
自分のコンピュータにつながっている ide がどれほど多種多様なのか知らなければ、 /proc/devices や /proc/ide/* に目を通してみて下さい。 ブートログファイル /var/log/bootlog を念入りに調べるのも良いでしょう (あるいは、Linux システムのブート直後に、 dmesg | more とタイプしてもかまいません)。 こうすれば、使っている ide がわかります。 では、less /proc/pci とタイプして、 Promise Technology に関する適当な情報を見つけましょう。 less /proc/pci の出力だと、 Promise チップに関する以下のような情報がどこかにあります。
Bus 0, device 17, function 0: Unknown mass storage controller: Promise Technology Unknown device (rev 2). Vendor id=105a. Device id=d30. Medium devsel. IRQ 10. Master Capable. Latency=32. I/O at 0x9400 [0x9401]. I/O at 0x9000 [0x9001]. I/O at 0x8800 [0x8801]. I/O at 0x8400 [0x8401]. I/O at 0x8000 [0x8001]. Non-prefetchable 32 bit memory at 0xd5800000 [0xd5800000]. |
この出力から分かるのは、 Promise Technology カードが両方の ide ポート (ide2 と ide3) で IRQ 10 を使っているということです。 カーネルが PCI の IRQ 共有をサポートしている限り、 同じ IRQ を使ってもまったく大丈夫です。 Linux カーネルは、 デフォルトで PCI IRQ 共有をサポートするように設定されているんです。 また、このカードがいろんな IO アドレスを使っていることも分かります。 ブート時に Promise Technology 社製のディスクを正しく識別するために必要なのは、 IRQ 番号と、[ ] の外にある IO アドレス番号だけです。 この情報を紙に書いておいて下さい。 上記の出力の場合に書いておくのは、次の事柄です。
IRQ1 = 10 IRQ2 = 10 IO1 = 0x9400 IO2 = 0x9000 IO3 = 0x8800 IO4 = 0x8400 |
さて、今度は以下の情報を評価して、 正しい Append 行 が得られるようにしなければなりません。 その後でこのAppend 行をブート時に指定するか、 lilo の設定ファイルに明記しましょう。
ideX=IO1,IO2+0x0002,IRQ1 ideY=IO3,IO4+0x0002,IRQ2 ここで、ideX と ideY というのは、 空きディスクが使っている、 Promise カードの二つの IDE ポートです。 |
この例では、上記の Append 行 は次のようになります。
ide2=0x9400,0x9002,10 ide3=0x8800,0x8402,10
例えば、/etc/lilo.conf に従って linux というラベルが付いた、 バージョン 2.4.18 のカーネルをブートしたければ、 次の二つの方法のいずれかで、Append 行 を指定します。
ブート時に指定する場合
boot: linux ide2=0x9400,0x9002,10 ide3=0x8800,0x8402,10 |
/etc/lilo.conf に明記する場合
image=/boot/vmlinuz-2.2.18 label=linux read-only root=/dev/hda1 append="ide2=0x9400,0x9002,10 ide3=0x8800,0x8402,10" |
Promise Technology 社製の専用ドライバ (ft.o) を使って RAID 1 を構築したい場合は、 Promise ドライバ (ft.o) を /lib/modules/カーネルバージョン にダウンロードし、 modprobe -k ft とタイプすればモジュールがロードできます。 そうすれば、 /dev/sdc とかそういったもので、新しい raid デバイスにアクセスできるはずです。 でも、これがうまくいかない場合は、 Append Line の内容を決めて、 /etc/lilo.conf に追加して下さい。 でも、RAID を既存の Linux システムに構築し、 Promise Technology 社の ft ドライバか、 Linux 本来の ataraid ドライバのいずれかを使うつもりなら、 /etc/lilo.conf で Append Line を使うことを強くお勧めします。 お使いのカーネルに ataraid サポートを組み込んでいる場合は、 ataraid モジュールをロードする必要はありませんが、 それ以外の場合は、 Append Line が入っている 新しい /etc/lilo.conf でいったんリブートすれば、 どちらかのドライバ(Promise Technology 社製のドライバ ft.o か、Linux 本来の RAID モジュール) をロードして、RAID を有効にできます。
お勧めは Linux 本来の RAID なので、これを詳細に見ていきましょう。 既存の Linux 機で Linux 本来の RAID を構築するには、 先に説明したように、/etc/lilo.conf に Append 行 を追加します。 では、/sbin/lilo とタイプして、変更内容を有効にして下さい。 続いてコンピュータをリブートします。 カーネルに ataraid サポートを組み込んでいなかったり、 ataraid.o モジュールが何らかに理由でロードに失敗した場合は、 リブート後、手作業で ataraid モジュールをロードしてください。 ataraid サポートをカーネル組み込みでコンパイルした場合 (この場合、ataraid はモジュールではありません)は、 すぐにフォーマットにかかって、ミラーディスク /dev/ataraid/d0 を使いだせます。
でも、ataraid をモジュールとして別にコンパイルしている場合は、 lsmod とタイプして、 ataraid が表示されるのを確認して下さい。 表示されない場合は、 modprobe -k ataraid とタイプして、 手作業でそのモジュールをロードして下さい。 何もエラーが無ければ、 すぐにミラーディスク /dev/ataraid/d0 を使い始めてかまいません。 いつもやっているように、フォーマットし、マウントしてから、使って下さい。
/dev/ataraid/d0 が使えるということは、 やるべきことをうまくやり遂げたということになります。 ですから、 /dev/hde や /dev/hdg、それに 他のパーティションには、どうか直接アクセスしないで下さい。 Linux 自体ではできますが、それは止めて下さい。 いったん 2 台のディスクからミラーデバイスを作ったら、 直接ディスクをアクセスするのではなく、 必ずミラーディスクをアクセスするようにして下さい。