15.4. RAID

15.4.1. ソフトウェア RAID

15.4.1.1. Concatenated Disk Driver (CCD) の設定

原作: Christopher Shumway. 改訂: Jim Brown.

大容量記録に関する解決法を選択する際にもっとも重視すべき要素は、 速度、信頼性、そして費用です。 三つを同時にバランスよく実現することは稀です。 通常、速くて信頼性のある大容量記録装置は高価であり、 費用を抑えようとすると速度または信頼性のどちらかが犠牲になります。

ここで例にあげるシステムの設計においては、 費用が最も重要な要素として、次に速度、最後に信頼性が選択されています。 このシステムでのデータ転送速度は結局のところネットワークによって制限されます。 信頼性は大変重要です。ただし、以下で説明する CCD ドライブは、 データ自体はすでに CD-R に完全にバックアップしてあるもの (したがって交換は簡単にできます) の、オンラインデータの役割をさせています。

あなた自身の要求事項を決定することは、 大容量記録に関する解決法を選択することの最初の段階です。 もしあなたの要求事項が費用より速度または信頼性を優先するなら、 解決法はこのシステムとは違うものになるでしょう。

15.4.1.1.1. ハードウェアのインストール

IDE システムディスクに加えて、Western Digital 製の 30GB, 5400RPM の IDE ディスク三台を使って、 以下に説明されているような約 90GB のオンラインストレージとなる CCD ディスクを作成しました。各 IDE ディスクがそれぞれの IDE コントローラとケーブルをもっていることが理想的ですが、 費用を最低限にするために、 IDE コントローラを追加していません。その代わり、それぞれの IDE コントローラがマスタデバイスを一つ、 スレーブデバイスを一つ持つように、 ディスクはジャンパを使って設定されています。

再起動の際に、システム BIOS が接続されたディスクを自動的に検出するように設定されました。 より重要なことは、FreeBSD が再起動の際にそれらを検出することです。

ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33

Note: FreeBSD がディスクをすべて検出しないときは、 ジャンパを正しく設定してあるか確認してください。多くの IDE ドライブは “ケーブルセレクト” ジャンパを持っています。 これはマスタ/スレーブの関係を設定するジャンパでは ありません。ドライブの文書を参照して、 正しいジャンパ設定を見つけてください。

次に、ファイルシステムの一部分として、 それらをどのように接続するのかを考慮します。vinum(8) および ccd(4) の両方を検討すべきでしょう。この設定では、ccd(4) を選択しました。

15.4.1.1.2. CCD の設定

ccd(4) ドライバは、いくつかの同じディスクを使って、 一つの論理的ファイルシステムに連結することができます。 ccd(4) を使用するためには、カーネルが ccd(4) に対応している必要があります。 次の行をカーネルコンフィギュレーションファイルに追加して、 カーネルを再構築し、再インストールしてください。

pseudo-device   ccd     4

5.X システムでは、 上記の代わりに次の行を追加しなければなりません。

device   ccd

Note: FreeBSD 5.X では ccd(4) デバイスの数を指定する必要はありません。ccd(4) デバイスドライバは自己複製するようになりました -- 新しいデバイスインスタンスは、 必要に応じてその都度自動的に作成されます。

FreeBSD 3.0 以降では、 カーネルモジュールを読み込んで ccd(4) に対応することもできます。

ccd(4) を設定するために、まず disklabel(8) を使用してディスクにラベルを書き込まなくてはなりません。

disklabel -r -w ad1 auto
disklabel -r -w ad2 auto
disklabel -r -w ad3 auto

このコマンドはディスク全体を示す ad1c, ad2c および ad3c に対するディスクラベルを作成します。

Note: FreeBSD 5.1-RELEASE から、従来の disklabel(8) プログラムは bsdlabel(8) ユーティリティに置き換えられました。bsdlabel(8) では、 使用されていない数多くのオプションやパラメタが削除されました。 たとえば -r オプションは bsdlabel(8) では取り除かれました。詳細については bsdlabel(8) のマニュアルページを参照してください。

次に、ディスクラベルのタイプを変更します。 disklabel(8) を使用してディスクラベルを編集してください。

disklabel -e ad1
disklabel -e ad2
disklabel -e ad3

このコマンドは EDITOR 環境変数に設定されているエディタ (一般的には vi(1)) でそれぞれのディスクの現在のディスクラベルを開きます。

変更されていないディスクラベルは以下のようになります。

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)

ccd(4) で使用する e パーティションを作成します。通常では c パーティションの行をコピーすれば良いでしょう。しかし、 fstype4.2BSD でなければ なりません。 ディスクラベルは以下のようになるでしょう。

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)
  e: 60074784        0    4.2BSD        0     0     0   # (Cyl.    0 - 59597)

15.4.1.1.3. ファイルシステムの構築

ccd0c デバイスノードはまだ存在していないかも知れません。 そのときは、次のコマンドを実行して作成してください。

cd /dev
sh MAKEDEV ccd0

Note: FreeBSD 5.0 では devfs(5)/dev 以下のデバイスノードを自動的に管理するので、 MAKEDEVを使用する必要はありません。

すべてのディスクにラベルを書き込んだので、 ccd(4) を構築してください。 これを行うためには、以下のようなオプションで ccdconfig(8) を使います。

ccdconfig ccd0(1) 32(2) 0(3) /dev/ad1e(4) /dev/ad2e /dev/ad3e

各オプションの使用法と意味は以下の通りです。

(1)
一番目の引数は設定するデバイスです。この例の場合は /dev/ccd0c です。 /dev/ の部分はオプションです。
(2)
ファイルシステムに対するインタリーブです。インタリーブは、 ディスクブロック内のストライプサイズを定義します。 ディスクブロックは通常 512 バイトです。したがって 32 インタリーブは 16,384 バイトとなります。
(3)
これは ccdconfig(8) に対するフラグです。 ドライブミラーリングを有効にしたい場合、 ここにフラグを指定します。 この設定では ccd(4) に対するミラーリングは提供しませんので、 0 (ゼロ) を指定しています。
(4)
この ccdconfig(8) に対する最後の引数は、 アレイ内に置くデバイスです。 それぞれのデバイスに対する完全なパス名を使用します。

ccdconfig(8) を実行すると ccd(4) が設定されます。 これでファイルシステムをインストールすることが可能です。 オプションについて newfs(8) を参照するか、 次のように実行してください。

newfs /dev/ccd0c

15.4.1.1.4. 自動的に設定する

一般的に、再起動するたびに ccd(4) をマウントしたいと思うでしょう。これを行うために、 まず設定をしなければなりません。次のコマンドを用いて、 現在の設定を /etc/ccd.conf に書き出します。

ccdconfig -g > /etc/ccd.conf

/etc/ccd.conf が存在すると、 再起動の際に /etc/rc スクリプトが ccdconfig -C を実行します。これにより、 ccd(4) は自動的に設定された後、マウントされます。

Note: シングルユーザモードで起動している場合には、 ccd(4)mount(8) する前に、 アレイを設定するために次のコマンドを実行する必要があります。

ccdconfig -C

自動的に ccd(4) をマウントするには、 /etc/fstabccd(4) のエントリ追加します。このように設定すると起動時にマウントされます。

/dev/ccd0c              /media       ufs     rw      2       2

15.4.1.2. Vinum ボリュームマネージャ

Vinum ボリュームマネージャは、 仮想ディスクドライブを実装したブロックデバイスドライバです。 Vinum は、ディスクハードウェアをブロックデバイスインタフェースから 分離し、データを配置します。 その結果、ディスク記憶装置を従来のスライスで扱うのと比較して、 柔軟性、性能および信頼性が向上しています。 vinum(8) は RAID-0, RAID-1 および RAID-5 モデル、 そしてそれぞれの組合せを実装しています。

vinum(8) の詳細については Vinum ボリュームマネジャ を参照してください。

15.4.2. ハードウェア RAID

FreeBSD は、さまざまなハードウェア RAID コントローラにも対応しています。これらのデバイスはアレイを制御するための 特別なソフトウェアを FreeBSD で必要することなく、 RAID サブシステムを制御します。

カード上の BIOS を使用して、 カードはそれ自身でディスク操作のほとんどを制御します。以下は Promise IDE RAID コントローラを使用した設定の簡単な説明です。 このカードがインストールされ、システムが起動したときには、 情報の入力を促すプロンプトを表示します。 指示にしたがってカードの設定画面に進んでください。 接続されたドライブを組み合わせるように設定することができます。 設定後、ディスクは FreeBSD に対して単一のドライブのように見えます。 他の RAID レベルは適宜設定できます。

15.4.3. ATA RAID1 アレイの再構築

FreeBSD はアレイ内の障害ディスクを動作中に交換できます。 ただし、再起動前にそれを検知していることが必要です。

/var/log/messages または dmesg(8) の出力に次のような行があるでしょう。

ad6 on monster1 suffered a hard error.
ad6: READ command timeout tag=0 serv=0 - resetting
ad6: trying fallback to PIO mode
ata3: resetting devices .. done
ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11) status=59 error=40
ar0: WARNING - mirror lost

atacontrol(8) を使用して詳細を調べてください。

# atacontrol list
ATA channel 0:
    Master:      no device present
    Slave:   acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0

ATA channel 1:
    Master:      no device present
    Slave:       no device present

ATA channel 2:
    Master:  ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:       no device present

ATA channel 3:
    Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:       no device present

# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED
  1. ディスクを安全に取り外すために、 まずアレイから切り離します。

    # atacontrol detach 3
    
  2. ディスクを取り外します。

  3. スペアのディスクを取り付けます。

    # atacontrol attach 3
    Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:   no device present
    
  4. アレイを再構築します。

    # atacontrol rebuild ar0
    
  5. 再構築コマンドは完了するまで他の操作を受け付けません。しかし、 もう一つ別のターミナルを (Alt+Fn を押して) 開き、 次のコマンドを実行すると進行状態を確認することができます。

    # dmesg | tail -10
    [output removed]
    ad6: removed from configuration
    ad6: deleted from ar0 disk1
    ad6: inserted into ar0 disk1 as spare
    
    # atacontrol status ar0
    ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed
    
  6. 操作が完了するまでお待ちください。