安価にFibreChannelストレージを入手するには?と探してたどり着いたのが「ソフトウェアでFibreChannelターゲットを実現する」というSCST(SCSI target mid-level for Linux)です。open-iscsiなどのソフトウェアiSCSIターゲットについては情報が多く提供されていますが、このSCSTについては(特に日本語の)情報が少なく、いまひとつ注目されていないようなので敢えてチャレンジしてみました。なお、SCSTにもソフトウェアiSCSIターゲットの機能が含まれますが、ここではFibreChannelターゲットの機能のみ取り上げています。
ちなみに、FibreChannelをサポートするアプライアンスソフトウェアにOpen-Eがありますが、ライセンス料が安くはないので個人レベルではなかなか手が出せません。。。
関連URL
SCSTはQLogicのFibreChannelアダプタが前提条件になっていますので、QLogic製、またはQLogicのOEM品(NEC、DELL、etc)を探してください。新品を購入すると10万円以上の出費を強いられますので、中古品を探すのが現実的だと思います。筆者は秋葉原やネットオークションで数百〜数千円で入手しました。ここでの検証に利用しているのはQLA2340Lになります。PCI-X対応カードですので、32bitの一般的な(短い)PCIスロットに挿しても動作します。
当然ですが、最低でも2枚のアダプタが必要です。また、LC-LCの光ファイバケーブルも入手してください。FCスイッチの無い最小構成の場合は、1本の光ファイバケーブルで2つのアダプタを直結してください。
セオリー通りにインストールしてください(詳細省略)。ターゲット用の空き領域を最初から確保しておくのが良いと思います。また、開発ツールをインストール対象として選択しておいてください。
なお、CentOS以外のディストリビューションでも以下の手順はほとんど変わらないと思います。
QLogicのftpサイトからFibreChannelアダプタのファームウェアを取得します。lspciコマンドでOSが認識しているアダプタの種別が表示されますので、対応するファームウェアファイルをダウンロードしてください。
# lspci 02:08.0 Fibre Channel: QLogic Corp. ISP2312-based 2Gb Fibre Channel to PCI-X HBA (rev 02) # cd /lib/firmware/ # wget ftp://ftp.qlogic.com/outgoing/linux/firmware/ql2300_fw.bin
kernel.org(あるいはミラーサイト)からLinuxカーネルのソースコードを取得します。お作法としてはディストリビューションが用意しているSRPMパッケージを利用するべきですが、SCSTのコンパイルがうまく通らなかったのでオリジナルのソースコードを利用しています。
# cd /usr/src # wget ftp://ftp.iij.ad.jp/pub/linux/kernel/linux/kernel/v2.6/linux-2.6.28.3.tar.gz # tar xvf linux-2.6.28.3.tar.gz # ln -s /usr/src/linux-2.6.28.3 linux # ln -s /usr/src/linux-2.6.28.3 linux-2.6.28
sourceforgeから最新版のソースコードを取得します。Webページからリンクされているものは最新版ではないので注意してください。
# cd /root # yum -y install subversion # svn co https://scst.svn.sourceforge.net/svnroot/scst # cd scst/trunk # make debug2release
SCST付属のQLogic用モジュールを組み込んだカーネルを再構築します。
# cd /usr/src # patch -p0 < /root/scst/trunk/scst/kernel/export_alloc_io_context-2.6.28.patch patching file linux-2.6.28/block/blk-ioc.c patching file linux-2.6.28/include/linux/iocontext.h # patch -p0 < /root/scst/trunk/scst/kernel/scst_exec_req_fifo-2.6.28.patch patching file linux-2.6.28/drivers/scsi/scsi_lib.c patching file linux-2.6.28/include/scsi/scsi_device.h # cd /usr/src/linux-2.6.28.3/drivers/scsi # mv qla2xxx qla2xxx_orig # ln -s /root/scst/trunk/qla2x00t qla2xxx # cd /usr/src/linux-2.6.28.3 # cp /usr/src/kernels/2.6.18-92.el5-i686/.config . # make oldconfig 下記以外はリターンキー連打 QLogic QLA2XXX Fibre Channel Support (SCSI_QLA_FC) [M/n/?] m QLogic 2XXX target mode support (SCSI_QLA2XXX_TARGET) [N/y/?] (NEW) y # make config 下記以外はリターンキー連打 High Memory Support 1. off (NOHIGHMEM) > 2. 4GB (HIGHMEM4G) 3. 64GB (HIGHMEM64G) choice[1-3]: 1 # cp Makefile Makefile_orig # vi Makefile 以下を変更 EXTRAVERSION = .3-scst # make bzImage # make modules # make modules_install # installkernel 2.6.28.3-scst arch/i386/boot/bzImage System.map
再構築したカーネルがデフォルトで起動するように調整します。
# cd /boot/grub # vi menu.lst 以下を変更 default=0
再起動後、qla2xxxモジュールが有効になっていることを確認します。
# dmesg
scst、QLogicドライバ、QLogicターゲットドライバ、scstadminコマンドの4つをコンパイル&インストールします。
# cd /root/scst/trunk/scst/src # make all # make install # cd /root/scst/trunk/qla2x00t # make # make install # cd /root/scst/trunk/qla2x00t/qla2x00-target # make # make install # cd /root/scst/trunk/scstadmin # make # make install # cd /lib/modules/2.6.28.3-scst/extra # ll 以下のファイルが存在することを確認 drwxr-xr-x 2 root root 4096 2月 8 02:00 dev_handlers -rw-r--r-- 1 root root 283793 2月 8 02:02 qla2x00tgt.ko -rw-r--r-- 1 root root 2249394 2月 8 02:02 qla2xxx.ko -rw-r--r-- 1 root root 1235561 2月 8 02:00 scst.ko
SCSTモジュールを有効化し、ターゲットデバイスを登録します。なお、.../hostX/...の部分はハードウェアに依存しますので、lspciコマンドの表示内容などを参考に判断してください。
# modprobe scst # modprobe qla2x00tgt # modprobe scst_disk # modprobe scst_vdisk
通常ファイルをターゲットデバイスとして利用する場合は以下のとおりです。
# dd if=/dev/zero of=/mnt/vdisk1.dsk bs=1024k count=512 # scstadmin -adddev disk1 -handler vdisk -path /mnt/vdisk1.dsk # scstadmin -assigndev disk1 -group Default -lun 0 # echo "1">/sys/class/scsi_host/host2/target_mode_enabled
既存の論理ボリュームをターゲットデバイスとして利用する場合は以下のとおりです。
# scstadmin -adddev disk2 -handler vdisk -path /dev/vg01/lv0000 # scstadmin -assigndev disk2 -group Default -lun 1 # echo "1">/sys/class/scsi_host/host2/target_mode_enabled
この状態でイニシエータ(クライアント側)からFibreChannelターゲットとして認識できるかどうか確認します。なお、BIOSレベルで認識していないとアクセスできませんので、起動時にCtrl+Qキーを押してQLogicのBIOS設定画面を開き、boot BIOSをenableに設定してください。
再起動時にSCSTが有効化されるように設定します。
現在の設定をconfファイルに書き込む # scstadmin -WriteConfig /etc/scst.conf # vi /etc/init.d/scst 以下を追加 # chkconfig: 345 7 89 # description: Starts and stops the FC target 以下を変更 SCST_MODULES="scst qla2x00tgt scst_vdisk scst_disk" 自動起動に設定 # chkconfig --add scst # chkconfig scst on # chkconfig --list scst
再起動して自動的に有効化されるか確認します。