LSI のRAIDカードをZFSに使用したり、ライセンスの関係でRAID0/1のみしか使えないRAIDカードでS/W RAID5を組みたいときなど、
JBODでディスクが見えた方が都合が良いときにJBODを有効にする方法のメモです。
おそらくLSI SAS 2000/21000/2200系のチップを使っているカードでは有効だと思われます。
カードに対して
MegaCli -AdpSetProp -EnableJBOD 1 -a0 |
は通るものの、ディスクに対して
MegaCli -PDMakeJBOD -physdrv[252:2] -a0 |
をやると
Adapter: 0: Failed to change PD state at EnclId-252 SlotId-2. |
と帰ってきて有効に出来ず。
その代わり、
smartctrl -x /dev/sdb -d megaraid,2 |
を行うと正常にSMARTの値を取得できる。
そもそもカードに対して
MegaCli -AdpSetProp -EnableJBOD 1 -a0 |
が通らなくなる
root@ubuntu:~# uname -a
Linux ubuntu 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux No LSB modules are available.root@ubuntu:~/linux# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 14.04.2 LTS
Release: 14.04
Codename: trusty
今回検証した手順は以下の通り。手順ではLinuxからMegaCLIを利用していますが、サーバ起動時にCtrl+YでPreBootCLIに入ることにより設定することも出来ます。
LSI(現Avago)のページから MegaCLI 5.5 P2 をDLします。
メモ
ダウンロード後、Unzipで解凍するとrpmファイルがあるので、Debian系であればAlienでパッケージを変換し、dpkgコマンドでインストールします。
root@ubuntu:~/linux# apt-get install alien --no-install-recommends
root@ubuntu:~/linux# alien --scripts MegaCli-8.07.07-1.noarch.rpm
megacli_8.07.07-2_all.deb generated
root@ubuntu:~/linux# dpkg -i megacli_8.07.07-2_all.deb
Selecting previously unselected package megacli.
(Reading database ... 62518 files and directories currently installed.)
Preparing to unpack megacli_8.07.07-2_all.deb ...
Unpacking megacli (8.07.07-2) ...
Setting up megacli (8.07.07-2) ...
root@ubuntu:~/linux# dpkg -L megacli
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/megacli
/usr/share/doc/megacli/copyright
/usr/share/doc/megacli/changelog.Debian.gz
/opt
/opt/MegaRAID
/opt/MegaRAID/MegaCli
/opt/MegaRAID/MegaCli/MegaCli
/opt/MegaRAID/MegaCli/libstorelibir-2.so.13.05-0
/opt/MegaRAID/MegaCli/MegaCli64root@ubuntu:~/linux# ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/sbin/megacli
インストールされるバイナリパッケージは単体でも動くので、Alienで変換をしなくてもREL系のマシンから
/opt/MegaRAID/MegaCli/MegaCli (32bit)
/opt/MegaRAID/MegaCli/MegaCli64 (64bit)
を摘出すれば動きます。まあ一度Alienで変換してしまえばそのdebパッケージを使い回せば良いだけですが…。
アダプターの設定を変更し、JBODを有効にします。
root@ubuntu:~/# megacli AdpSetProp enablejbod -1 -aALL Adapter 0: Set JBOD to Enable success. Exit Code: 0x00 root@ubuntu:~/# megacli AdpGetProp enablejbod -aALL Adapter 0: JBOD: Enabled Exit Code: 0x00
アダプターの設定を変更後、ディスクをJBODとして使うように設定します。
ただし、すでにRAID1などのアレイのメンバーとして定義されている場合、ディスクの定義を削除し、Unconfigured状態にする必要があります。
root@ubuntu:~/linux# megacli PDList -aALL|grep -E "(^Inquiry|^Enclosure Device|^Slot Number|^Firm)" Enclosure Device ID: 64 Slot Number: 0 Firmware state: Unconfigured(good), Spun Up Inquiry Data: S1DMASK Samsung SSD 840 EVO 120GB EXT0AB0Q Enclosure Device ID: 64 Slot Number: 1 Firmware state: Unconfigured(good), Spun Up Inquiry Data: S1DMASK Samsung SSD 840 EVO 120GB EXT0AB0Q Enclosure Device ID: 64 Slot Number: 2 Firmware state: Unconfigured(good), Spun Up Inquiry Data: S1DMASK Samsung SSD 840 EVO 120GB EXT0AB0Q Enclosure Device ID: 64 Slot Number: 3 Firmware state: Unconfigured(good), Spun Up Inquiry Data: S1DMASK Samsung SSD 840 EVO 120GB EXT0AB0Q
もし、"Firmware state: Online, Spun Up"となっていた場合は何かしらのディスクのメンバーとして定義されているため、
megacli -LDInfo -Lall -aALL
などで情報を確認後、
megacli -CfgLdDel -l0 -a0
で対象のLDの定義を消します。
めんどくさければ
megacli -CfgLdDel -lall -aall
で挿されているアダプターで定義されているRAID情報を全削除できます。(危険)
その後、[Enclosure Device ID:Slot Number]形式でJBODとして使うポートを定義します。
root@ubuntu:~# megacli PDMakeJBOD -PhysDrv[64:0,64:1,64:2,64:3] -a0 Adapter: 0: EnclId-64 SlotId-0 state changed to JBOD. Adapter: 0: EnclId-64 SlotId-1 state changed to JBOD. Adapter: 0: EnclId-64 SlotId-2 state changed to JBOD. Adapter: 0: EnclId-64 SlotId-3 state changed to JBOD. Exit Code: 0x00
JBODとして定義後は、定義したポートに挿したディスクは他のRAIDメンバーに追加などは出来なくなります。
root@ubuntu:~linux# megacli PDList -aALL|grep -E "(^Inquiry|^Enclosure Device|^Slot Number|^Firm)" Enclosure Device ID: 64 Slot Number: 0 Firmware state: JBOD Inquiry Data: S1DMASK Samsung SSD 840 EVO 120GB EXT0AB0Q Enclosure Device ID: 64 Slot Number: 1 Firmware state: JBOD Inquiry Data: S1DMASK Samsung SSD 840 EVO 120GB EXT0AB0Q Enclosure Device ID: 64 Slot Number: 2 Firmware state: JBOD Inquiry Data: S1DMASK Samsung SSD 840 EVO 120GB EXT0AB0Q Enclosure Device ID: 64 Slot Number: 3 Firmware state: JBOD Inquiry Data: S1DMASK Samsung SSD 840 EVO 120GB EXT0AB0Q
dmesgを確認すると以下のような出力があります。
[12000.365456] megaraid_sas: scanning for scsi0... [12000.413778] sd 0:0:1:0: [sdb] Synchronizing SCSI cache
定義後は、通常のディスクとして同じように利用できます。
ディスクをアンマウント後、以下のコマンドでJBOD用ポート定義を消すことにより、
以前と同じようにその配下にささっているディスクをRAID1などのメンバーに出来ます。
megacli PDMakeGood -PhysDrv[64:0,64:1,64:2,64:3] -Force -a0
ForceをつけないとOS起動状態でJBODの状態を解除できません。
また、JBODとして定義されているポートは、定義を戻さない限りディスクを変更してもJBODディスクとして見えます。
JBODとして定義後は、smartctrlなどからも見えるようになります。 |