CentOS7のインストール時におけるHPE Dynamic Smartアレイ B140i コントローラによるRAID構成

#はじめに
今回、HPE ProLiant ML150 Gen9サーバーを購入し、CentOS7を入れることとなった。その際、システムメンテナンスを考慮して、RAID1で論理ドライブを構成してOSをインストールすることとした。
CentOSをそのまま入れること自体は慣れていたが、RAIDを組んでインストールすることは初の試みであり、インストールの際に**物理ドライブが見えてしまう、論理ドライブが認識されない**といった現象に詰まったため、ここに備忘録としてRAID1構成によるCentOS7のインストール方法を示しておく。

##RAID構成サーバ環境
今回のサーバの概要を以下に示す。詳しいスペックは割愛させていただく。
HPE ML150 Gen9 E5 v4 （RAIDコントローラ：Dynamic Smart アレイ B140iコントローラ）
**物理ドライブ**：1TB SATA × 2 を **論理ドライブ**：1TB （RAID1構成［ミラーリング］） とすることを目指す。

なお、こちらは、RAID1が構成されていることを前提とする。
ちなみに、RAIDについては、[こちら](http://www.atmarkit.co.jp/ait/articles/0102/27/news002_2.html)を参照して少々勉強した。

##インストールメディア等作成作業環境
MacBook Air （13-inch, Early 2014） macOS Sierra（10.12.6［16G29］）

#よくあること
**論理ドライブが見えない（物理HDD2台しか見えない）**
[(1) ProliantサーバRAIDを組んだが、OS上で認識されない(CentOS7) - Hewlett Packard Enterprise Community](https://community.hpe.com/t5/HPE-ProLiant一般/ProliantサーバRAIDを組んだが-OS上で認識されない-CentOS7/td-p/6800499?profile.language=ja)
[(2)HP ProLiant DL320e Gen8サーバーにScientific LinuxをRAID構成でインストールする。 - 何でも屋さんの備忘録](http://d.hatena.ne.jp/Michael_e29/20140521/1400672956)
[(3) CentOS7をDL360G5にインストールメモ - tkr0429 blog](http://tkr0429.github.io/2014/10/p400i/#.WcTqkUx2dP0)
[(4) CentOS7（1）アレイコントローラの認識 – テクニカルタイムアウト](http://tech.blog.surbiton.jp/centos7_1_os_install_and_detect_array_controller_b140i/)

そのままインストールしてしまうと、論理ドライブを構成しているのにもかかわらず、CentOSのインストール画面で、物理ドライブ（そのまま）が表示されてしまうことがうかがえる。RAIDが認識されるように手を打たなければならないと考えられる。

#標準的なHPE製サーバでのLinux（RHEL）インストール
[(5) HP ProLiant サーバー - B110i コントローラーで RAID を構成したドライブに、RHEL6.x をインストールする方法](https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c03166017)
[(6) Linux_ハードウェア_オプション_Dynamic SmartArray B140iコントローラー | HPE 日本（日本ヒューレット・パッカード株式会社）](https://h50146.www5.hpe.com/products/software/oe/linux/mainstream/product/hardware/option/array/b140i.html)
[(7) HP ProLiant Gen8サーバーにCentOS6.4(64bit)を入れる - SEEDS Creator's Blog](http://blog.seeds-std.co.jp/entry/1205.html)

公式には、HPE製サーバでのB140iコントローラを用いたRAID構成によるCentOSのインストールはサポート外であるが、RHELのインストールについては紹介、公開されている。
RHELをインストールする時、OSインストールディスクの他に、**RAID コントローラー ドライバーディスケット**が別途必要になることがわかった。そして、OSのインストール時に、この**RAIDコントローラドライバを適用した上で**、たとえば、以下のようにインストールを進める必要がある。

---
####UEFIブートによってCentOSをインストールする場合####
インストール画面が出たら、
1. `e`キーを押し、`linuxefi`の行末に、`inst.dd modprobe.blacklist=ahci`を追記し、`Ctrl+x`を押す。
2. その後、インストール時に適用もしくは更新するためのドライバ選択（ドライバを適用するためのファイルはどこかを指定する）画面が出る。
3. USBもしくはCDなど適切なデバイスを選択（画面に表示されない場合、`r`キーによってリフレッシュする）。
4. デバイスを選択したら、ドライバファイルを選択し、ドライバファイルをアクティブ（選択状態）にする。
5. `c`キーを押し、コンティニューする
6. ドライバが読み込まれた上で、グラフィカルのインストール画面が表示される。
7. 以降、論理ドライブが認識されることを確認して、通常のインストールを進める。

---
####レガシーブートによってCentOSをインストールする場合####
1. `esc`キーを押し、`linux dd blacklist=ahci`を入力し、`Ctrl+x`を押す。
2. その後、インストール時に適用もしくは更新するためのドライバ選択（ドライバを適用するためのファイルはどこかを指定する）画面が出る。
3. USBもしくはCDなど適切なデバイスを選択（画面に表示されない場合、`r`キーによってリフレッシュする）。
4. デバイスを選択したら、ドライバファイルを選択し、ドライバファイルをアクティブ（選択状態）にする。
5. `c`キーを押し、コンティニューする
6. ドライバが読み込まれた上で、グラフィカルのインストール画面が表示される。
7. 以降、論理ドライブが認識されることを確認して、通常のインストールを進める。

*ブートの仕方によって最初のコマンド入力画面の呼び出し方が異なるので注意。*

以上から次の手順によって、RAID1構成でCentOSをインストールする必要があることが明らかになった。

#実践
【用意するもの】空のUSB×2（OSインストールメディア用とドライバディスソケット用）

##手順1. CentOS7のインストールメディアの作成
これはいつもの手順である。[CentOSのホームページ](https://www.centos.org/download/)から、[Minimal ISO](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso)、[DVD ISO](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso)、[Everything ISO](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1708.iso)のいずれかをダウンロードして、インストールメディアを作成する。
筆者はデスクトップ（GNOME）環境でCentOSをインストールするため、DVD ISOを選択。

###インストールメディア作成（for USB）
####1. DVD ISOのダウンロード####
今回ダウンロードできたのは、「CentOS-7-x86_64-DVD-1708.iso」だった。

####2. USBのフォーマット（FAT32）
`ディスクユーティリティー.app`などでUSBをFAT32でフォーマットする
![s_スクリーンショット 40.png](https://qiita-image-store.s3.amazonaws.com/0/97177/d840838b-1e47-924a-6784-b703e55cf48b.png)


####3. USBへの書き込み（ddコマンド）
以下の手順によって、USBにISOを書き込む。少し時間がかかる。
参照：[(8) CentOS 7 を USB メモリからインストール - momota.txt](http://momota.github.io/blog/2015/11/15/centos-install/)

［1］USB メモリにインストールイメージを書き込む ターミナルから.iso を .img へ変換する。

```bash
$ hdiutil convert -format UDRW -o CentOS-7-x86_64-DVD-1708.img CentOS-7-x86_64-DVD-1708.iso
$ mv CentOS-7-x86_64-DVD-1708.img.dmg CentOS-7-x86_64-DVD-1708.img
```

［2］USB メモリをアンマウントする（PCに指したままだけど、マウントを解除する）。

```bash
$ diskutil list
$ diskutil unMountDisk /dev/disk1
```

［3］dd で USB メモリにインストールイメージを書き込む。

```bash
$ sudo dd if=CentOS-7-x86_64-DVD-1708.img of=/dev/disk1 bs=1m
```

［4］USB メモリをイジェクトして取り外す。

```bash
$ sudo diskutil eject /dev/disk1
```

###インストールメディア作成（for DVD）###
参照：[(9) iMac OSX で isoイメージファイルを CD/DVD に焼く - min117の日記](http://min117.hatenablog.com/entry/2017/05/20/091443), [(10) Mac で ISO ディスクイメージを作成する方法 – act2 サポート](https://act2inc.zendesk.com/hc/ja/articles/208084756-Mac-で-ISO-ディスクイメージを作成する方法)

####1. DVD ISOのダウンロード####
今回ダウンロードできたのは、「CentOS-7-x86_64-DVD-1708.iso」だった。

####2.DVDに焼き込む
外付け光学ドライブ等によって空のDVDをセットする。
その後、ダウンロードしたISOを右クリックし、`CentOS-7-x86_64-DVD-1708.isoをディスクに書き込む`を選択し、DVD/CD マスターで焼き込む。

##手順2. B140iコントローラドライバーディスケットの取得とドライバインストールメディアの作成
これはRAIDを認識させる上で必須の手順である。まず、B140iコントローラドライバーディスケットを取得する。

[Hewlett Packard Enterprise サポートセンター（HPE ProLiant ML150 Gen9 Server）](https://h20565.www2.hpe.com/hpsc/swd/public/readIndex?sp4ts.oid=7481832&swLangOid=25&swEnvOid=4176)

上記サイトのうち、**ソフトウェア ドライバディスソケット**内の
![スクリーンショット 2019-05-21 9.32.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97177/05a8f454-1474-dbb7-ac9a-b04b6461f8fd.png)

このどちらかをダウンロードして、展開する。
`hpdsa-1.2.10-139.rhel7u4.x86_64.dd.gz`（インストールするCentOSが**7.4**の場合）
`hpdsa-1.2.10-139.rhel7u5.x86_64.dd.gz`（インストールするCentOSが**7.5**の場合）
![スクリーンショット 2019-05-21 9.34.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97177/dff67978-4216-414d-bb3f-887e04220ee2.png)

その後、OSインストールメディアと**異なるUSB**を差し込み、**FAT32**でフォーマット後、同じく`dd`コマンドによってUSBに書き込む。

```bash
$ sudo dd if=hpdsa-1.2.10-115.rhel7u3.x86_64.dd of=/dev/disk2
```

以上で、ドライバディスソケットの用意が完了。

##手順3. 各メディアを差し込んだ上でサーバ電源投下##
BIOSで起動順位を変更したのち、USBからブートする。

##手順4. B140iコントローラドライバーを適用するためのコマンド入力とドライバ適用
![s_IMG_0712.JPG](https://qiita-image-store.s3.amazonaws.com/0/97177/ea4ce8bd-2be6-caa0-88b0-bee445d02903.jpeg)
インストール初期画面が出たら、`e`キーを押す。

![s_IMG_0713.JPG](https://qiita-image-store.s3.amazonaws.com/0/97177/3ed02d07-7007-1452-489a-96f8d2c3220d.jpeg)
画面が出たら、`linuxefi`の行の末尾に、`inst.dd modprobe.blacklist=ahci`と入力して、`Ctrl+x`キーで実行。

![s_IMG_0714.JPG](https://qiita-image-store.s3.amazonaws.com/0/97177/846aac7a-6c19-d5c5-d7a9-799fbc7e250d.jpeg)
画面が出たら、RAIDコントローラのためのドライバディスソケットを焼き込んだデバイスを選ぶ（ここでは読み込まれなかったので、`r`でリフレッシュ）。

![s_IMG_0715.JPG](https://qiita-image-store.s3.amazonaws.com/0/97177/09bc2c3e-a859-883c-0a72-22a2e887e01b.jpeg)
リフレッシュされたら、`ext4`のタイプの4を選ぶ（ここはそれぞれの環境で異なる`4`を押して`Enter`）。

![s_IMG_0716.JPG](https://qiita-image-store.s3.amazonaws.com/0/97177/2dd2c597-03ef-e6fb-c851-b187191c4427.jpeg)
デバイスの中身が読み込まれたら、お目当ての、`kmod-hpsa-3.4.20-113.rhel7u3.x86_64.rpm`の1を選択する（`1`を押して`Enter`）。

![s_IMG_0717.JPG](https://qiita-image-store.s3.amazonaws.com/0/97177/cd915563-3028-97e2-42cb-3cfcd1931579.jpeg)
すると、`x`印がつき、アクティブ（選択状態）となる。

これでCentOSインストール時にRAIDコントローラドライバが適用された上でインストールが進む。

##手順5. CentOSインストール開始
これ以降は、通常通りの作業。もし論理ドライブが認識されていない場合はもう一度上の手順を確認すること。もしくは、RAIDが構成されているのかどうかを確認すること。

#おわりに
RAIDでCentOS7をインストールすることができた。次は、HDDが故障したときの復旧の仕方について勉強したい。

###参考文献###
[Install CentOS 7 on HP dl120 gen9 server with b140i raid controller - Server Fault](https://serverfault.com/questions/721523/install-centos-7-on-hp-dl120-gen9-server-with-b140i-raid-controller)