F.3. RAID ベース及びマルチパスのストレージを設定するのに mdadm を使用する

raidtools パッケージセットから成る他のツールと同様、mdadm コマンドは複数デバイスセットの管理に関連する必要な機能すべてを行なうために使用することができます。このセクションでは mdadm の使用方法について説明していきます。

F.3.1. mdadm で RAID デバイスを作成する

RAID デバイスを作成するには、/etc/mdadm.conf ファイルを編集して適切な DEVICEARRAY の値を定義します。

DEVICE /dev/sd[abcd]1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1

この例では、DEVICE の行は従来のファイル名 globbing を使用して次の SCSI デバイスを定義しています(詳細は glob(7) の man ページを参照)。

ARRAY の行は、DEVICE の行で定義された SCSI デバイスから構成される RAID デバイス (/dev/md0) を定義します。

RAID デバイスの作成、使用を行なう前には、/proc/mdstat ファイルはアクティブな RAID デバイスがないことを表示します。

Personalities :
read_ahead not set
Event: 0
unused devices: <none>

次に、上記の設定と mdadm コマンドを使って RAID 0 アレイを作成します。

mdadm -C /dev/md0 --level=raid0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 \
/dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

作成が完了したら、RAID デバイスはいつでも問い合わせを受けて状態情報を提供できるようになります。次の例では、mdadm --detail /dev/md0 コマンドからの出力を表示しています。

/dev/md0:
Version : 00.90.00
Creation Time : Mon Mar  1 13:49:10 2004
Raid Level : raid0
Array Size : 15621632 (14.90 GiB 15.100 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Mar  1 13:49:10 2004
State : dirty, no-errors
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
         0       8        1        0      active sync   /dev/sda1
         1       8       17        1      active sync   /dev/sdb1
         2       8       33        2      active sync   /dev/sdc1
         3       8       49        3      active sync   /dev/sdd1
           UUID : 25c0f2a1:e882dfc0:c0fe135e:6940d932
         Events : 0.1

F.3.2. mdadm でマルチパスデバイスを作成する

RAID アレイの作成の他に、mdadm は各 SCSI LUN (ディスクドライブ)に対して複数の I/O パスをサポートするハードウェアの利点を活かすのために使用することもできます。マルチパスストレージの目的はハードウェア障害や各パスが飽和状態になった場合に継続してデータが使用できるようにすることです。この設定には一般的な SCSI LUN (ディスクドライブ)への複数パスアクセス(それぞれが独立した仮想コントローラとして動作)が含まれているので、Linux カーネルは各パスを"通過する"と各共有ドライブを検出します。つまり、/dev/sda として知られる SCSI LUN (ディスクドライブ)は、固有の設定により /dev/sdb/dev/sdc、などとしてもアクセスが可能となります。

I/O パスが失敗または飽和状態になる場合でも単一のデバイスをアクセス可能のままにしておくようにするには、mdadm に追加パラメータをその ––level オプションに含ませます。このパラメータ — multipath — は I/O パスに障害が発生したときに Linux カーネル内の md レイヤーが I/O 要求をあるパスから別のパスにルートし直すように指示します。

マルチパスデバイスを作成するには、/etc/mdadm.conf ファイルを編集して DEVICEARRAY の行の値を定義してハードウェア構成に反映するようにします。

注記注記
 

前の RAID の例とは異なり (/etc/mdadm.conf で指定された各デバイスが異なる物理ディスクドライブを示さなければならない)、このファイルの各デバイスは同じ共有ディスクドライブを参照します。

マルチパスデバイスの作成に使用されるコマンドは RAID デバイスを作成するコマンドに似ています。違いは RAID レベルパラメータを multipath パラメータと入れ換えることです。

mdadm -C /dev/md0 --level=multipath --raid-devices=4 /dev/sda1 /dev/sdb1  
 /dev/sdc1 /dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

mdadm コマンドラインは長いため、記載の都合上、2 行になっています。

この例では、1 つの SCSI LUN から構成されるハードウェアが 4 つの異なる SCSI デバイスとして示され、それぞれが異なるパスで同じストレージにアクセスしています。マルチパスデバイスの /dev/md0 の作成が完了したら、/dev/md0 を参照しているすべての I/O 動作は /dev/sda1/dev/sdb1/dev/sdc1/dev/sdd1 のいずれかにダイレクトされます(現在アクティブで使用できるパスによる)。

実際にマルチパスデバイスであるかを確認するために、/dev/md0 の設定を mdadm --detail /dev/md0 コマンドを使って詳細に調べることができます。

/dev/md0:
Version : 00.90.00
Creation Time : Tue Mar  2 10:56:37 2004
Raid Level : multipath
Array Size : 3905408 (3.72 GiB 3.100 GB)
Raid Devices : 1
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Mar  2 10:56:37 2004
State : dirty, no-errors
Active Devices : 1
Working Devices : 4
Failed Devices : 0
Spare Devices : 3

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       17        1      spare   /dev/sdb1
       2       8       33        2      spare   /dev/sdc1
       3       8        1        3      spare   /dev/sda1
           UUID : 4b564608:fa01c716:550bd8ff:735d92dc
         Events : 0.1

mdadm のもうひとつの機能は、デバイスを稼働構成から削除するよう強制できることです(デバイスを RAID アレイのメンバーまたはマルチパス構成のパスにする)。次の例では、/dev/sda1 に障害が発生したとしてフラグされてから削除され、最終的に構成に戻されています。マルチパス構成の場合、これらの動作はそのときに行なわれている I/O アクティビティには影響しません。

# mdadm /dev/md0 -f /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
# mdadm /dev/md0 -r /dev/sda1
mdadm: hot removed /dev/sda1
# mdadm /dev/md0 -a /dev/sda1
mdadm: hot added /dev/sda1
#