ページ

2016年3月17日木曜日

SRP でストレージに接続する (SRP Initiator)

前回の SRP のストレージを作る (SRP Target) で構築したストレージに接続する側 (SRP Initiator) のセットアップを行います。
こちらも CentOS 7 で、HCA として Mellanox ConnectX-2 VPI (Single Port) を使用します。

Infiniband のセットアップ

Infiniband のドライバやユーティリティ等には以下のような選択肢がありますが、今回は Mellanox OFED (Rev 3.0-2.0.1) をインストールすることにします。
  1. rpm パッケージ
  2. OFED (Open Fabrics Enterprise Distribution)
  3. Mellanox OFED (Mellanox 版の OFED)
Rev 3.0-2.0.1 は CentOS 7 及び 7.1 をサポートしているのですが、kernel バージョンはデフォルトの 3.10.0-229.el7 が対象になっています。そのため、yum 等で kernel をアップデートしてからインストールした場合、kernel のバージョン不一致により、一部 kernel にビルトインの Infiniband モジュールの方が有効となり不整合が起きてしまいます。
Mellanox OFED には、現在の kernel バージョンに合わせて Mellanox OFED をビルドするスクリプト mlnx_add_kernel_support.sh が用意されていますので、これでアップデート後の kernel バージョンに適合するように再ビルドする必要があります。

まずは必要なパッケージのインストールです。
$ sudo yum install perl pciutils python gcc-gfortran libxml2-python tcsh
$ sudo yum install libnl.i686 libnl expat glib2 tcl libstdc++ bc tk gtk2 atk cairo numactl pkgconfig
$ sudo yum install kernel-devel python-devel redhat-rpm-config rpm-build
mlnx_add_kernel_support.sh でビルドします。
kernel は 3.10.0-229.11.1.el7 にアップデート済みです。
デフォルトでは /tmp にログとともに出力されますが、ここでは $HOME に出力することにします。
$ sudo ./mlnx_add_kernel_support.sh -m /home/user01/MLNX_OFED_LINUX-3.0-2.0.1-rhel7.1-x86_64 -t /home/user01
Note: This program will create MLNX_OFED_LINUX TGZ for rhel7.1 under /home/user01 directory.
      All Mellanox, OEM, OFED, or Distribution IB packages will be removed.
Do you want to continue?[y/N]:y
See log file /home/user01/mlnx_ofed_iso.12896.log

Building OFED RPMs. Please wait...
Created /home/user01/MLNX_OFED_LINUX-3.0-2.0.1-rhel7.1-x86_64-ext.tgz
作成された MLNX_OFED_LINUX-3.0-2.0.1-rhel7.1-x86_64-ext.tgz を展開して、現在の kernerl バージョン (3.10.0-229.11.1.el7) に対応していることを確認します。
$ tar zxf MLNX_OFED_LINUX-3.0-2.0.1-rhel7.1-x86_64-ext.tgz
$ cd MLNX_OFED_LINUX-3.0-2.0.1-rhel7.1-x86_64-ext/
$ ls
added_kernels  firmware                    mlnx_fw_updater.pl  RPM-GPG-KEY-Mellanox  supported_kernels
distro         mlnx_add_kernel_support.sh  mlnxofedinstall     RPMS                  uninstall.sh
docs           mlnx_create_yum_repo.sh     repodata            src                   utils

$ cat added_kernels
3.10.0-229.11.1.el7.x86_64
インストールします。
一緒に Firmware のアップデートも試行されますが、今回使用した HCA は Mellanox 純正ではなく、OEM のため失敗します。これは無視してかまいません。
$ sudo ./mlnxofedinstall
Logs dir: /tmp/MLNX_OFED_LINUX-3.0-2.0.1.9042.logs
This program will install the MLNX_OFED_LINUX package on your machine.
Note that all other Mellanox, OEM, OFED, or Distribution IB packages will be removed.
Do you want to continue?[y/N]:y


Starting MLNX_OFED_LINUX-3.0-2.0.1 installation ...

...
...

Installation finished successfully.

Attempting to perform Firmware update...
//(以下省略)
//HCA が OEM の場合は、ここで Firmware のアップデートはできない。
インストールが完了したら、テストユーティリティで HCA をチェックしてみましょう。
$ sudo hca_self_test.ofed

---- Performing Adapter Device Self Test ----
Number of CAs Detected ................. 1
PCI Device Check ....................... PASS
Kernel Arch ............................ x86_64
Host Driver Version .................... MLNX_OFED_LINUX-3.0-2.0.1 (OFED-3.0-2.0.0): modules
Host Driver RPM Check .................. PASS
Firmware on CA #0 HCA .................. v2.9.1000
Firmware Check on CA #0 (HCA) .......... NA
    REASON: NO required fw version
Host Driver Initialization ............. PASS
Number of CA Ports Active .............. 0
Port State of Port #1 on CA #0 (HCA)..... DOWN (InfiniBand)
Error Counter Check on CA #0 (HCA)...... PASS
Kernel Syslog Check .................... PASS
Node GUID on CA #0 (HCA) ............... 00:02:c9:03:00:0f:81:e0
------------------ DONE ---------------------

Infiniband 関連のモジュールを有効にするためには、openibd サービスを起動します。
事前に openib.conf を変更して、SRP モジュールも有効にしておきます。
$ sudo vi /etc/infiniband/openib.conf

# Load SRP module
SRP_LOAD=yes
openibd サービスは既に有効化されているので、systemctl または OS リブートで起動します。
$ sudo systemctl start openibd
Infiniband ファブリックには Subnet Manager が 1つは存在している必要がありますが、今回は ストレージ側で Subnet Manager を稼働させていますので、Subnet Manager (opensmd) は起動させません。
Mellanox OFED の opensmd は、systemd に対応していないので、systemctl ではなく従来の chkconfig で設定を行います。(chkconfig opensmd off で無効化する)

これで Infiniband のセットアップが終わりました。
QSFP ケーブルを接続して、Link 状態を確認してみます。
$ ibstatus
Infiniband device 'mlx4_0' port 1 status:
        default gid:     fe80:0000:0000:0000:0002:c903:000f:81e1
        base lid:        0x2
        sm lid:          0x1
        state:           4: ACTIVE
        phys state:      5: LinkUp
        rate:            40 Gb/sec (4X QDR)
        link_layer:      InfiniBand
QDR 40Gb/s で Link Up しました。

SRP Initiator

次は SRP でストレージ (SRP Target) にアクセスします。
SRP Target への接続には、Mellanox OFED の srp_daemon を使います。
srp_daemon は Inifiniband ファブリックで定期的に SRP Target を探索し、見つかったら接続します。

テストのため、デーモンとしてではなく 1度のみ実行するには、-o を付けます。
//-i = Infinibandデバイス名  -p = HCAポート番号 
$ sudo srp_daemon -o -e -i mlx4_0 -p 1
Mellanox OFED の srpd サービスを有効にすると、OS 起動時に srp_daemon をデーモンとして起動し、SRP Target に自動的に接続します。以後は定期的 (デフォルトでは 60秒ごと) に SRP Target を探索します。

srpd サービスは、systemd ではなく chkconfig で設定となり、起動スクリプトは /etc/rc.d/init.d/srpd です。
このスクリプトで /usr/sbin/srp_daemon.sh が実行され、そこから srp_daemon が実行されます。
(ステータスは systemctl で参照可能)
$ sudo systemctl status srpd.service
srpd.service - LSB: Starts and stops the InfiniBand SRP client service
   Loaded: loaded (/etc/rc.d/init.d/srpd)
   Active: active (running) since Sun 2015-10-18 20:09:59 JST; 1s ago
  Process: 3113 ExecStop=/etc/rc.d/init.d/srpd stop (code=exited, status=0/SUCCESS)
  Process: 3309 ExecStart=/etc/rc.d/init.d/srpd start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/srpd.service
           ├─3313 /bin/bash /usr/sbin/srp_daemon.sh
           └─3316 /usr/sbin/srp_daemon -e -c -n -i mlx4_0 -p 1 -R 60
上記を見ると、srp_daemon が -n を付けて実行されているのがわかります。
-n は SRP Initiator から SRP Target へ接続する時に、拡張オプション (initiator_ext) を使用することを示します。(Mellanox OFED での推奨)
これは、認証要求 SRP_LOGIN_REQ に使われる PortID のフォーマットを、
"接続先 SRP Target の Port GUID を Byte 単位で逆に並べた値 (8byte)" + "SRP Initiator 側の Port GUID (8byte)"
の形にします。
今回のシステムでは、
  • 接続先 SRP Target の Port GUID ... 0x0002c903000f826d
  • 接続元 SRP Initiator の Port GUID ... 0x0002c903000f81e1
ですから、"6d820f0003c90200" + "0002c903000f81e1" ということになります。
SRP Target 側の ACL では、このことを考慮した設定が必要です。

SRP Target に接続すると、Target 側で割り当てた LUN が、SCSI デバイスとして認識されます。
$ cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ADATA SP600      Rev: 5.8                   //ローカルのSSD
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi6 Channel: 00 Id: 00 Lun: 00
  Vendor: LIO-ORG  Model: BSBLK01          Rev: 4.0                   //LIOで割り当てたLUN
  Type:   Direct-Access                    ANSI  SCSI revision: 05
これで普通のローカルデバイスと同様に利用できるようになりました。
後はこのブロックデバイスに parted 等でパーティションを作成し、ファイルシステムにマウントします。

2016年3月7日月曜日

SRP ストレージを作る (SRP Target)

PC に Infiniband HCA を搭載して、CentOS 7 で (ミニ)SANストレージを構築してみたいと思います。
HCA は、QDR 40Gb/s をサポートしている Mellanox ConnectX-2 VPI (Single Port) を使用します。

Infiniband といっても、Infiniband スイッチは入手できなかったので、下記のようにストレージへの接続元と直結することにします。
KVM ホストのストレージプールとして使用










Infiniband は上位レイヤでネットワークやストレージ関連の様々なプロトコルを使用できますが、今回は SRP (SCSI RDMA Protocol) を使用します。
ストレージ側が SRP Target、アクセス元のKVMホストが SRP Initiator となります。

以下、SRP Target の構築です。

Infiniband セットアップ

では、まず Infiniband のドライバやユーティリティ等をインストールです。これにはいくつか選択肢があります。
  1. rpm パッケージ
  2. OFED (Open Fabrics Enterprise Distribution)
  3. Mellanox OFED (Mellanox 版の OFED)
HCA が Mellanox 製なので Mellanox OFED を使いたいところです。しかし、この後の SRP Target の構築を LIO (Linux IO Target) で行うため、Mellanox OFED は使用できません。
LIO では kernel モジュールの設定や参照を ConfigFS (sysfs のようなメモリ上の仮想ファイルシステム。ユーザスペースから kernel モジュールの設定や参照が可能。) で行うのですが、Mellanox OFED の SRP Target モジュール (ib_srpt.ko) が ConfigFS に対応していないためです。
よって、SRP Target 側は rpm パッケージからインストールします。
(ただ、rpm には Mellanox OFED に入っている hca_self_test.ofed のようなツールはありません)

CentOS 7 のインストール時に Infiniband HCA が検出されると、anaconda により rdma がインストールされますが、その他にも必要なパッケージをインストールします。
$ sudo yum install libibverbs libibverbs-utils
$ sudo yum install opensm
$ sudo yum install libmlx4 libmlx5 libmthca
$ sudo yum install libocrdma
$ sudo yum install librdmacm librdmacm-utils ibacm
$ sudo yum install infiniband-diags ibutils
$ sudo yum install perftest qperf
$ sudo yum install dapl dapl-utils
$ sudo yum install libibcommon libibcm
Infiniband ファブリックには Subnet Manager が 1つは存在している必要があります。
今回は HCA を直結するので、ストレージ側で Subnet Manager を稼働させることにします。
1 Port の HCA 1個だけ搭載している場合は、特に設定を行わずデフォルトのままでも Subnet Manager は動作しますので、このまま opensm サービスを起動します。
$ sudo systemctl start opensm
$ sudo systemctl enable opensm
SRP Target モジュールは、デフォルトで rdma サービス起動時にロードされるようになっています。
$ more /etc/rdma/rdma.conf
# Load IPoIB
IPOIB_LOAD=yes
# Load SRP (SCSI Remote Protocol initiator support) module
SRP_LOAD=yes
# Load SRPT (SCSI Remote Protocol target support) module
SRPT_LOAD=yes
# Load iSER (iSCSI over RDMA initiator support) module
ISER_LOAD=yes
# Load iSERT (iSCSI over RDMA target support) module
ISERT_LOAD=yes

ib_srpt.ko モジュールがロードされていることを確認します。
$ lsmod | grep srp
ib_srpt                52289  0
target_core_mod       303808  11 target_core_iblock,target_core_pscsi,iscsi_target_mod,ib_srpt,target_core_file,ib_isert
ib_srp                 42448  0
scsi_transport_srp     20725  1 ib_srp
scsi_tgt               20027  1 scsi_transport_srp
ib_cm                  42689  5 rdma_cm,ib_srp,ib_ucm,ib_srpt,ib_ipoib
ib_sa                  33950  6 rdma_cm,ib_cm,mlx4_ib,ib_srp,rdma_ucm,ib_ipoib
ib_mad                 47486  5 ib_cm,ib_sa,mlx4_ib,ib_srpt,ib_umad
ib_core                88311  16 rdma_cm,ib_cm,ib_sa,iw_cm,xprtrdma,mlx4_ib,ib_mad,ib_srp,ib_ucm,ib_iser,ib_srpt,ib_umad,ib_uverbs,rdma_ucm,ib_ipoib,ib_isert
これで Infiniband のセットアップは完了です。

SRP Target 構築

続いて、LIO (Linux-IO) を使用して SRP Target を構築します。
LIO は kernel モジュール (target_core_mod.ko、iscsi_target_mod.ko 等) として Linux に標準で組み込まれている SCSI Target です。
Python ベースの targetcli (LIO Shell) を使って管理します。

LIO の設定には ConfigFS が使用されます。
ConfigFS を使うには、/sys/kernel/config が ConfigFS としてマウントされている必要がありますが、CentOS 7 では OS インストール時に Inifiniband HCA が検出されると、デフォルトで自動マウントされるようになります。
LIO モジュールのディレクトリ /sys/kernel/config/target/ が作成されており参照できると思います。
$ cat /sys/kernel/config/target/version
Target Engine Core ConfigFS Infrastructure v4.1.0-rc2-ml on Linux/x86_64 on 3.10.0-229.14.1.el7.x86_64
targetcli をインストールします。
$ sudo yum install targetcli
targetcli はシェルのような CUI のツールで、iSCSI や FC などのネットワークファブリックのセクションと、物理、論理ブロックデバイス等のセクション (Backstores) に分かれています。
$ sudo targetcli          //初回起動時は以下の Warning が出る
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb37
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/>
/> ls
o- / .............................................................................................. [...]
  o- backstores ................................................................................... [...]
  | o- block ....................................................................... [Storage Objects: 0]
  | o- fileio ...................................................................... [Storage Objects: 0]
  | o- pscsi ....................................................................... [Storage Objects: 0]
  | o- ramdisk ..................................................................... [Storage Objects: 0]
  o- iscsi ................................................................................. [Targets: 0]
  o- loopback .............................................................................. [Targets: 0]
  o- srpt .................................................................................. [Targets: 0]
/>
targetcli を終了すると、自動で設定情報が /etc/target/saveconfig.json に保存されます。
(グローバルパラメータの auto_save_on_exit がデフォルトで有効になっているため)
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
ただし、 ファイルに保存しても OS を再起動すると設定はクリアされてしまいます。
target サービスを有効化しておくと、OS 起動時にファイル保存した設定がリストアされるようになります。
$ sudo systemctl start -t service target
$ sudo systemctl enable -t service target
targetcli では、まず Backstore を定義します。
この Backstore の領域(ボリューム)を LUN に割り当て、SRP Initiator からアクセスする形になります。

Backstore には以下の Storage Object があります。
  • BLOCK    ... ブロックデバイス
  • FILEIO    ... ファイルシステム上のファイル
  • PSCSI    ... SCSIパススルー
  • RAMDISK    ... メモリをブロックデバイスとして使う
BLOCK はブロックデバイスをそのまま割り当てます。Write through なので、突発的な電源断などでシステムが落ちた場合でも、データロスのリスクが低いです。
FILEIO はファイルをディスクイメージのように使用します。(ブロックデバイスを指定することも可能)
Write back に設定すればパフォーマンスが大幅に向上しますが、突発的なダウン等のおけるデータロスのリスクが高くなります。
今回は、SSD * 3台で構成した RAID5 Array (Fake RAID) を BLOCK に指定することにします。
/> backstores/block create BSBLK01 /dev/md/array0_0
Created block storage object BSBLK01 using /dev/md/array0_0.

/> ls backstores/block/
o- block ........................................................................... [Storage Objects: 1]
  o- BSBLK01 ....................................... [/dev/md/array0_0 (476.9GiB) write-thru deactivated]
次に、SRP Target の設定です。
kernel モジュールの ib_srpt.ko がロードされていれば、targetcli のツリーに srpt が表示されているはずです。
また、targetcli で srpt の設定を行うと、ConfigFS の /sys/kernel/config/target/srpt/ 配下に書き込まれます。
/> srpt/ info
Fabric module name: srpt
ConfigFS path: /sys/kernel/config/target/srpt
Allowed WWN types: ib
Allowed WWNs list: ib.fe800000000000000002c903000f826d
Fabric module features: acls
Corresponding kernel module: ib_srpt
/>
SRP Target のインスタンスを作成します。
/> cd srpt
/srpt> create fe800000000000000002c903000f826d
Created target ib.fe800000000000000002c903000f826d.

/srpt> ls
o- srpt .................................................................................... [Targets: 1]
  o- ib.fe800000000000000002c903000f826d .................................................. [no-gen-acls]
    o- acls ................................................................................... [ACLs: 0]
    o- luns ................................................................................... [LUNs: 0]
create のパラメータの WWN には、HCA の Port GUID を指定します。
Port GUID は、/sys/class/infiniband/(HCAのデバイス名)/ports/(ポート番号)/gids/0 で確認できます。
今回の 1 port の HCA の場合は以下を参照します。
$ cat /sys/class/infiniband/mlx4_0/ports/1/gids/0
fe80:0000:0000:0000:0002:c903:000f:826d
Backstore で定義した領域を LUN に割り当てます。
/srpt> ib.fe800000000000000002c903000f826d/luns create /backstores/block/BSBLK01
Created LUN 0.

/srpt> ls
o- srpt .................................................................................... [Targets: 1]
  o- ib.fe800000000000000002c903000f826d .................................................. [no-gen-acls]
    o- acls ................................................................................... [ACLs: 0]
    o- luns ................................................................................... [LUNs: 1]
      o- lun0 ........................................................ [block/BSBLK01 (/dev/md/array0_0)]
最後に、SRP Target インスタンスの ACL を設定します。
SRP Initiator から接続するには、ACL に WWPN として SRP Initiator の PortID が登録されていなければなりません。(iSCSI の場合は省略可能)
SRP Initiator は SRP Target に接続する時、認証要求 SRP_LOGIN_REQ で Initiator 側の PortID を送信します。
この PortID は、接続時に syslog に書かれるメッセージから確認することもできますが、SRP Initiator が Mellanox OFED の srp_daemon を使っている場合、
"SRP Target 側 Port GUID を Byte 単位で逆に並べた値 (8byte)" + "SRP Initiator の Port GUID (8byte)"
で構成されます。

今回のシステムでは、
  • 接続先 SRP Target の Port GUID ... 0x0002c903000f826d
  • 接続元 SRP Initiator の Port GUID ... 0x0002c903000f81e1
となっています (SRP Initiator については次回書きます) ので、SRP_LOGIN_REQ で送信される PortID は、"6d820f0003c90200" + "0002c903000f81e1" になります。

ちなみに、実際に SRP Initiator が接続してきた時の syslog が以下です。
kernel: ib_srpt Received SRP_LOGIN_REQ with i_port_id 0x6d820f0003c90200:0x2c903000f81e1, t_port_id 0x2c903000f826c:0x2c903000f826c and it_iu_len 260 on port 1 (guid=0xfe80000000000000:0x2c903000f826d)
この PortID を ACL に登録します。
自動で LUN0 に適用されます。
/srpt> ib.fe800000000000000002c903000f826d/acls create 6d820f0003c902000002c903000f81e1
Created Node ACL for ib.6d820f0003c902000002c903000f81e1
Created mapped LUN 0.

/srpt> ls
o- srpt .................................................................................... [Targets: 1]
  o- ib.fe800000000000000002c903000f826d .................................................. [no-gen-acls]
    o- acls ................................................................................... [ACLs: 1]
    | o- ib.6d820f0003c902000002c903000f81e1 ........................................... [Mapped LUNs: 1]
    |   o- mapped_lun0 ........................................................ [lun0 block/BSBLK01 (rw)]
    o- luns ................................................................................... [LUNs: 1]
      o- lun0 ........................................................ [block/BSBLK01 (/dev/md/array0_0)]
以上で SRP Target の準備が完了しました。

次は SRP Initiator 側のセットアップを行います。

2016年1月30日土曜日

CentOS 7 で Fake RAID を使用した RAID 構成

CentOS 7 で、最近のマザーボードが搭載している RAID BIOS (Intel Rapid Storage Technology) を使用して  RAID5 Array を構成したいと思います。
いわゆる Fake RAID です。(BIOS で SATA を RAID Mode に設定すると有効になる)

Intel RST は Option ROM を介した Software RAID ですが、Linux Kernel サブシステムの mdraid でサポートされています。
管理は mdadm で行います。

HW 構成ですが、Boot デバイスは SSD 単体、データ領域を 3台の SSD で RAID5 とします。
  • OS領域: SSD 64GB × 1 (SATA 6Gbps)
  • データ領域: [RAID5] SSD 256GB × 3 (SATA 6Gbps)
ちなみに、SATA を AHCI モードにして mdadm で Software RAID を構成した場合でも、Array をブロックデバイスとして使用する際のパフォーマンスはほとんど変わりませんでした。
ただ、Fake RAID の方が resync が速いです。

今回は OS 領域を RAID にしないので、OS インストール後に mdadm で RAID 設定することも可能ですが、OS インストール前に Option ROM で RAID Volume を作成しておくと、anaconda から mdadm が実行され自動で設定されます。

Linux では、Intel RST は Intel Matrix Storage Manager (imsm) として認識されます。
$ sudo mdadm --detail-platform
       Platform : Intel(R) Matrix Storage Manager
        Version : 13.0.0.2075
    RAID Levels : raid0 raid1 raid10 raid5
    Chunk Sizes : 4k 8k 16k 32k 64k 128k
    2TB volumes : supported
      2TB disks : supported
      Max Disks : 6
    Max Volumes : 2 per array, 4 per controller
 I/O Controller : /sys/devices/pci0000:00/0000:00:1f.2 (SATA)
また、RAID コントローラのようにメタデータを管理するのが CONTAINER デバイス (/dev/md/imsm0) になります。
$ sudo mdadm --detail /dev/md/imsm0
/dev/md/imsm0:
        Version : imsm
     Raid Level : container
  Total Devices : 3

Working Devices : 3


           UUID : dc1d80c9:6359a6da:74a99a9d:c22dce97
  Member Arrays : /dev/md/raid5vol_0

    Number   Major   Minor   RaidDevice

       0       8       32        -        /dev/sdc
       1       8       16        -        /dev/sdb
       2       8       48        -        /dev/sdd
RAID Array は、/dev/md/(Option ROM で作成した Volume 名)_0 として作成されています。
$ sudo mdadm --detail /dev/md/raid5vol_0
/dev/md/raid5vol_0:
      Container : /dev/md/imsm0, member 0
     Raid Level : raid5
     Array Size : 500111360 (476.94 GiB 512.11 GB)
  Used Dev Size : 250055936 (238.47 GiB 256.06 GB)
   Raid Devices : 3
  Total Devices : 3

          State : clean
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-asymmetric
     Chunk Size : 128K


           UUID : e77d16b4:5701e6c6:4da49442:7dfce8fb
    Number   Major   Minor   RaidDevice State
       2       8       32        0      active sync   /dev/sdc
       1       8       48        1      active sync   /dev/sdd
       0       8       16        2      active sync   /dev/sdb
CONTAINER、Array ともに実体は /dev/md* です。
$ ll /dev/md*
brw-rw---- 1 root disk 9, 126 Aug 22 23:34 /dev/md126
brw-rw---- 1 root disk 9, 127 Aug 22 23:35 /dev/md127

/dev/md:
total 0
lrwxrwxrwx 1 root root 8 Aug 22 23:35 imsm0 -> ../md127
lrwxrwxrwx 1 root root 8 Aug 22 23:34 raid5vol_0 -> ../md126
Array のビルド状況は /proc/mdstat で確認できます。
$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md126 : active raid5 sdb[3] sdc[2] sdd[1]
      500111360 blocks super external:/md127/0 level 5, 128k chunk, algorithm 0 [3/3] [UUU]

md127 : inactive sdb[0](S) sdd[2](S) sdc[1](S)
      9459 blocks super external:imsm

unused devices: <none>
作成した Array をブロックデバイスとして使用するには、Partion Table を作成する必要があります。
$ sudo parted /dev/md126

(parted) print
Error: /dev/md126: unrecognised disk label
Model: Linux Software RAID Array (md)
Disk /dev/md126: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

(parted) mktable gpt
(parted) print
Model: Linux Software RAID Array (md)
Disk /dev/md126: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  Type  File system  Flags
Option ROM で RAID 設定後、OS インストールすると /etc/mdadm.conf に AUTO +imsm が設定されるので、OS 起動時は RAID メタデータから Array が自動構成されます。


(参考) Intel Rapid Storage Technology in Linux