木曜日, 1月 17, 2013

RHEL6.3にFusion-io ioDrive Duo をセットアップする


RHEL5.5で使っていたFusion-io ioDrive Duo 1.28TB を、RHEL6.3に変更することになったので、その作業方法をメモしておきます。


【iomemory-vslについて】
FIOのデバイスドライバーはiomemory-vslというものですが、これは以下のような関係性を持っています。
購入時は101583で、ドライバーも2.2.3を使っていたので、RHEL6.3でも2.2.3のを使おうと思いきや、build失敗します(参考1)メーカーサポートに聞いたら最新なら使えるとのことで、最新に変更して進めます。

ファーム                    ドライバーバージョン
-----------------------------------------------------------------
101583                     → 2.2.3(現在)
101971-4か101971-6  → 2.3.1
107053                     → 2.3.11(作業後はこれになるはず)
※RHEL6.3の場合、2.2.3はbuildに失敗するので、最新の安定ドライバーを
公式から落として使うこと(http://support.fusionio.com/downloads/)


【mkfs.xfsについて】
ない場合にはDVDのPackagesに「xfsprogs-3.1.1-7.el6.x86_64.rpm」が含まれているので、これを使う。


【作業目次】
※OSは新規インストールした場合。
①デバイスドライバー(ioMemory VSL)ののダウンロードとインストール
②デバイスドライバーのロード
③ファームウェアのアップデート
④サーバー再起動
⑤fioをformatする
⑥ソフトウェアRAID0の構築
⑦RAIDの永続性を設定する
⑧再起動試験
⑨終わり
⑩ Fusion-io 削除方法


【作業詳細】
①デバイスドライバー(ioMemory VSL)ののダウンロードとインストール

[ダウンロード]
Fusion-IO社のサイトにユーザー登録して、ダウンロードする。
http://support.fusionio.com/downloads/

今回はioDrive DuoなのでioDrive、OSはRHEL6、バージョンはこの時点で安定最新版の2.3.11を選択し、以下を落とした。


  • iomemory-vsl-2.3.11.183-1.0.el6.src.rpm
  • fio-common-2.3.11.183-1.0.el6.x86_64.rpm
  • fio-util-2.3.11.183-1.0.el6.x86_64.rpm
  • fio-sysvinit-2.3.11.183-1.0.el6.x86_64.rpm
  • libfio-2.3.11.183-1.0.el6.x86_64.rpm
  • iodrive_107053.fff


[インストール]
su -
yum install gcc rsync kernel-devel kernel-headers rpm-build
cd <ダウンロードしたフォルダ>
rpmbuild --rebuild iomemory-vsl-2.3.11.183-1.0.el6.src.rpm
rpm -Uvh /root/rpmbuild/RPMS/x86_64/iomemory-vsl*.rpm
rpm -Uvh fio-common-2.3.11.183-1.0.el6.x86_64.rpm
rpm -Uvh fio-util-2.3.11.183-1.0.el6.x86_64.rpm
rpm -Uvh fio-sysvinit-2.3.11.183-1.0.el6.x86_64.rpm
rpm -Uvh libfio-2.3.11.183-1.0.el6.x86_64.rpm


②デバイスドライバーのロード

modprobe iomemory-vsl

※このとき、FIOの状態を確認(参考2)すると・・・
# fio-status --all
//snip
fct0    Status unknown: Driver is in MINIMAL MODE:
                Firmware is out of date. Update firmware.
//snip
fct1    Status unknown: Driver is in MINIMAL MODE:
                Firmware is out of date. Update firmware.

と、ファームウェアのバージョンが古く、block device(fioaとか)は作られず、ファーム更新を促されている。このままでは使えないので、ファームウェアの更新をする。


③ファームウェアのアップデート

※アップデート方法は公式マニュアル(ioMemory_VSL_2.3.11_Release_Notes.pdf)
などを参照しておくこと。

注意点

  • 必ずアップデート前にdetach(切り離し)しておくこと。
  • アップデート中は、fioアプリケーションを使わないこと
  • アップデート後は、速やかにサーバーの再起動をすること


[detach]
# fio-detach /dev/fct0
Block device /dev/fct0 already detached.
# fio-detach /dev/fct1
Block device /dev/fct1 already detached.
#

[update]
# fio-update-iodrive iodrive_107053.fff
Device ID 1 (/dev/fct1) Updating device firmware from 5.0.6.101583 to 5.0.7.107053
Device ID 0 (/dev/fct0) Updating device firmware from 5.0.6.101583 to 5.0.7.107053
WARNING: DO NOT TURN OFF POWER OR RUN ANY IODRIVE UTILITIES WHILE THE FIRMWARE UPDATE IS IN PROGRESS
  Please wait...this could take a while
Progress
-------------------------
 |  0:  100% |  1:  100%
Results
-------------------------
0: Firmware updated successfully
1: Firmware updated successfully

You MUST now reboot this machine before the new firmware will be activated!
#


④サーバー再起動
# reboot


⑤fioをformatする

最初にdetachしてフォーマットしてattachしますが
# fio-detach /dev/fct0
Detaching: [====================] (100%) /
Error: failed to detach /dev/fct0: device busy.
# fio-detach /dev/fct1
Detaching: [====================] (100%) /
Error: failed to detach /dev/fct1: device busy.
#

とdetachできません。マニュアル(ioMemory_VSL_2.3.11_User_Guide_for_Linux.pdf)のfio-detachの項を見ると

Notes
With this version of ioMemory VSL, attempting to detach an ioMemory device may fail with an error indicating that the device is busy. This typically may occur if the ioMemory device is part of a software RAID (0,1,5) volume, is mounted, or some process has the device open.

とあるので、なんかしらがつかんでいる様子。確認してみると・・・
# dmesg |grep md
ata1: SATA max UDMA/133 cmd 0xec10 ctl 0xec08 bmdma 0xec20 irq 23
ata2: SATA max UDMA/133 cmd 0xec18 ctl 0xec0c bmdma 0xec28 irq 23
md: bind<fioa>
md: bind<fiob>
md: raid0 personality registered for level 0
md/raid0:md127: md_size is 2500003584 sectors.
md: RAID0 configuration for md127 - 1 zone
md: zone0=[fioa/fiob]
md127: detected capacity change from 0 to 1280001835008
 md127: unknown partition table
#

と、mdデバイスがmd127としてfioa/fiobを使っている様子。詳細を見ると
# mdadm --misc --detail /dev/md127
/dev/md127:
        Version : 0.90
  Creation Time : Mon Jun  4 12:49:01 2012
     Raid Level : raid0
     Array Size : 1250001792 (1192.09 GiB 1280.00 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 127
    Persistence : Superblock is persistent
    Update Time : Mon Jun  4 12:49:01 2012
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
     Chunk Size : 64K
           UUID : d0a1e056:98aa1321:96bd0280:52288824
         Events : 0.1
    Number   Major   Minor   RaidDevice State
       0     252        0        0      active sync   /dev/fioa
       1     252       16        1      active sync   /dev/fiob
#

間違いないので、これを一旦止めます。
# mdadm --stop /dev/md127
mdadm: stopped /dev/md127
#

確認すると、fioa/fiobともに解放されました。
# dmesg |grep md
ata1: SATA max UDMA/133 cmd 0xec10 ctl 0xec08 bmdma 0xec20 irq 23
ata2: SATA max UDMA/133 cmd 0xec18 ctl 0xec0c bmdma 0xec28 irq 23
md: bind<fioa>
md: bind<fiob>
md: raid0 personality registered for level 0
md/raid0:md127: md_size is 2500003584 sectors.
md: RAID0 configuration for md127 - 1 zone
md: zone0=[fioa/fiob]
md127: detected capacity change from 0 to 1280001835008
 md127: unknown partition table
md127: detected capacity change from 1280001835008 to 0
md: md127 stopped.
md: unbind<fiob>
md: export_rdev(fiob)
md: unbind<fioa>
md: export_rdev(fioa)
#

ではdetach→format→attachします。
# ls /dev/fct*
/dev/fct0  /dev/fct1
# fio-detach /dev/fct0
Detaching: [====================] (100%) /
# fio-detach /dev/fct1
Detaching: [====================] (100%) /
# fio-format /dev/fct0
Creating a standard block device of size 640.00GBytes (596.05GiBytes).
  Using block (sector) size of 512 bytes.
WARNING: Formatting will destroy any existing data on the device!
Do you wish to continue [y/n]? y
Formatting: [====================] (100%) /
Format successful.
# fio-format /dev/fct1
Creating a standard block device of size 640.00GBytes (596.05GiBytes).
  Using block (sector) size of 512 bytes.
WARNING: Formatting will destroy any existing data on the device!
Do you wish to continue [y/n]? y
Formatting: [====================] (100%) /
Format successful.
# fio-attach /dev/fct0
Attaching: [====================] (100%) |
fioa
# fio-attach /dev/fct1
Attaching: [====================] (100%) /
fiob
#

確認します
# ls /dev/fio*
/dev/fioa  /dev/fiob
#


⑥ソフトウェアRAID0の構築

対象確認
# ls /dev/fio*
/dev/fioa  /dev/fiob
#

RAID0を構築
# mdadm -C /dev/md0 --level=0 --raid-devices=2 /dev/fioa /dev/fiob
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# mdadm --misc --detail /dev/md0 /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jan 17 13:41:52 2013
     Raid Level : raid0
     Array Size : 1249999872 (1192.09 GiB 1280.00 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Jan 17 13:41:52 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
     Chunk Size : 512K
           Name : aaa.hoge.com:0  (local to host aaa.hoge.com)
           UUID : 088e7b62:bba903b1:dde56685:632b0cd0
         Events : 0
    Number   Major   Minor   RaidDevice State
       0     252        0        0      active sync   /dev/fioa
       1     252       16        1      active sync   /dev/fiob
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jan 17 13:41:52 2013
     Raid Level : raid0
     Array Size : 1249999872 (1192.09 GiB 1280.00 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Jan 17 13:41:52 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
     Chunk Size : 512K
           Name : aaa.hoge.com:0  (local to host aaa.hoge.com)
           UUID : 088e7b62:bba903b1:dde56685:632b0cd0
         Events : 0
    Number   Major   Minor   RaidDevice State
       0     252        0        0      active sync   /dev/fioa
       1     252       16        1      active sync   /dev/fiob
#

xfsでフォーマットします
# mkfs.xfs /dev/md0
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/md0               isize=256    agcount=32, agsize=9765504 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=312496128, imaxpct=5
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=152592, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
#

マウント先の作成とマウント、および確認
# mkdir -p /mnt/fio
#
# mount -t xfs /dev/md0 /mnt/fio
#
# df -Th
Filesystem    Type    Size  Used Avail Use% マウント位置
/dev/sda4     ext4     50G  1.9G   45G   5% /
tmpfs        tmpfs     71G     0   71G   0% /dev/shm
/dev/sda2     ext4    243M   32M  199M  14% /boot
/dev/sda1     vfat    200M  268K  200M   1% /boot/efi
/dev/sda5     ext4    924G  200M  877G   1% /var/xxxxx
/dev/md0       xfs    1.2T   34M  1.2T   1% /mnt/fio
#

参考 partedでファイルシステムや容量の確認
# parted
GNU Parted 2.1
/dev/sda を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) select /dev/md0
/dev/md0 を使用
(parted) print free
モデル: 不明 (unknown)
ディスク /dev/md0: 1280GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop
番号  開始   終了    サイズ  ファイルシステム  フラグ
 1    0.00B  1280GB  1280GB  xfs
(parted) quit
#


⑦RAIDの永続性を設定する

・mdadm.confの作成
# echo "DEVICE /dev/fio*" > /etc/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm.conf
#
# cat /etc/mdadm.conf
DEVICE /dev/fio*
ARRAY /dev/md0 metadata=1.2 name=xxx.com:0 UUID=xxxxx
#

・ブラックリストの設定(コメントインする)
vi /etc/modprobe.d/iomemory-vsl.conf
(以下を変更する)
blacklist iomemory-vsl

・fstabの設定
vi /etc/fstab
(追加する)
/dev/md0 /mnt/fio xfs defaults 0 0

・デバイスドライバーにマウント先などを教える
vi /etc/sysconfig/iomemory-vsl
(以下を変更する)
# If ENABLED is not set (non-zero) then iomemory-vsl init script will not be used.
ENABLED=1
...
# Example: MD_ARRAYS="/dev/md0 /dev/md1"
MD_ARRAYS="/dev/md0"
...
# Example: MOUNTS="/mnt/fioa /mnt/firehose"
MOUNTS="/mnt/fio"



⑧再起動試験
rebootして、自動的にマウントされていれば作業終了です。
# reboot


⑨終わり


⑩再フォーマットもしくは削除方法
アプリとraidを止めてフォーマット、削除なら停止後に設定したものをそれぞれ元に戻すこと。

・再フォーマット方法
umount /mnt/fio/
mdadm --misc --stop /dev/md0
cat /proc/mdstat
mdadm --misc --detail /dev/md0 /dev/md0
fio-detach /dev/fct0
fio-format /dev/fct0
fio-attach /dev/fct0
fio-detach /dev/fct1
fio-format /dev/fct1
fio-attach /dev/fct1
mdadm -C /dev/md0 --level=0 --raid-devices=2 /dev/fioa /dev/fiob
mdadm --misc --detail /dev/md0 /dev/md0
mkfs.xfs /dev/md0
mount /dev/md0 /mnt/fio/

※アンマウントできない場合には再起動後に試すとよい。
# mdadm --stop /dev/md0
mdadm: fail to stop array /dev/md0: Device or resource busy
Perhaps a running process, mounted filesystem or active volume group?
#


参考1 RHEL6.3で2.2.3がbuildできないエラーログ
/root/rpmbuild/BUILD/iomemory-vsl-2.2.3.66/driver_source/kblock.c: In
function 'kfio_handle_special_req':
/root/rpmbuild/BUILD/iomemory-vsl-2.2.3.66/driver_source/kblock.c:402:
error: implicit declaration of function 'blk_barrier_rq'
make[2]: *** [/root/rpmbuild/BUILD/iomemory-vsl-2.2.3.66/driver_source/kblock.o]
Error 1
make[1]: *** [_module_/root/rpmbuild/BUILD/iomemory-vsl-2.2.3.66/driver_source]
Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.32-279.el6.x86_64'
make: *** [modules] Error 2
make: Leaving directory
`/root/rpmbuild/BUILD/iomemory-vsl-2.2.3.66/driver_source'
+ set +x
ERROR:

参考2 デバイスドライバーとファームが一致していないときのfio-status
※SNなどはxxxxxで伏せてます
# fio-status --all
Unable to get product information for /dev/fct0:0.
Unable to get format information for /dev/fct0.
Unable to get data volume information for /dev/fct0.
Unable to get system monitor information for /dev/fct0.
Unable to get product information for /dev/fct1:0.
Unable to get format information for /dev/fct1.
Unable to get data volume information for /dev/fct1.
Unable to get system monitor information for /dev/fct1.
Found 2 ioDrives in this system with 1 ioDrive Duo
Fusion-io driver version: 2.3.11 build 183
Adapter: ioDrive Duo
        ioDrive Duo HL SN:xxxxx
        ioDrive Duo HL, PN:xxxxx, Mfr:003, Date:20120217
        External Power: NOT connected
        Powerloss protection: not available
        PCIE Bus voltage: avg 12.09V, min 10.00V, max 12.24V
        PCIE Bus current: avg 0.00A, max 1.05A
        PCIE Bus power: avg 0.00W, max 0.00W
        PCIE slot available power: 25.00W
        Sufficient power available: Unknown
        PCIE bus errors: correctable, unsupported request
        PCIE negotiated link: 8 lanes at 5.00 Gbits/sec each, 4000
MBytes/sec total
        Connected ioDimm modules:
          fct0: ioDIMM3 640GB MLC SN:xxxxx
          fct1: ioDIMM3 640GB MLC SN:xxxxx
fct0    Status unknown: Driver is in MINIMAL MODE:
                Firmware is out of date. Update firmware.
        ioDIMM3 640GB MLC SN:xxxxx
        ioDIMM3 640GB MLC, PN:xxxxx, Mfr:003, Date:20120217
        Located in slot 0 Upper of ioDrive Duo SN:xxxxx
        Powerloss protection: not available
        PCI:09:00.0
        Vendor:1aed, Device:1005, Sub vendor:1028, Sub device:1f66
        Firmware v5.0.6, rev 101583
        Geometry and capacity information not available.
        FPGA ID:0 Format UID:xxxxx
        PCIE slot available power: 25.00W
        Sufficient power available: Unknown
        PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000
MBytes/sec total
        Internal temperature: 47.2 degC, max 50.7 degC
        Board temperature: 0 degC
        Internal voltage: avg 1.022V, max 1.025V
        Aux voltage: avg 2.461V, max 2.464V
fct1    Status unknown: Driver is in MINIMAL MODE:
                Firmware is out of date. Update firmware.
        ioDIMM3 640GB MLC SN:xxxxx
        ioDIMM3 640GB MLC, PN:xxxxx, Mfr:003, Date:20120217
        Located in slot 1 Lower of ioDrive Duo SN:xxxxx
        Powerloss protection: not available
        PCI:0a:00.0
        Vendor:1aed, Device:1005, Sub vendor:1028, Sub device:1f66
        Firmware v5.0.6, rev 101583
        Geometry and capacity information not available.
        FPGA ID:0 Format UID:xxxxx
        PCIE slot available power: 25.00W
        Sufficient power available: Unknown
        PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000
MBytes/sec total
        Internal temperature: 49.7 degC, max 53.6 degC
        Board temperature: 0 degC
        Internal voltage: avg 1.002V, max 1.002V
        Aux voltage: avg 2.455V, max 2.455V


---
triplesky