SCSTのインストール
Last update: 2009/02/09

安価にFibreChannelストレージを入手するには?と探してたどり着いたのが「ソフトウェアでFibreChannelターゲットを実現する」というSCST(SCSI target mid-level for Linux)です。open-iscsiなどのソフトウェアiSCSIターゲットについては情報が多く提供されていますが、このSCSTについては(特に日本語の)情報が少なく、いまひとつ注目されていないようなので敢えてチャレンジしてみました。なお、SCSTにもソフトウェアiSCSIターゲットの機能が含まれますが、ここではFibreChannelターゲットの機能のみ取り上げています。

ちなみに、FibreChannelをサポートするアプライアンスソフトウェアにOpen-Eがありますが、ライセンス料が安くはないので個人レベルではなかなか手が出せません。。。

関連URL


  1. FibreChannelアダプタの入手
  2. SCSTはQLogicのFibreChannelアダプタが前提条件になっていますので、QLogic製、またはQLogicのOEM品(NEC、DELL、etc)を探してください。新品を購入すると10万円以上の出費を強いられますので、中古品を探すのが現実的だと思います。筆者は秋葉原やネットオークションで数百〜数千円で入手しました。ここでの検証に利用しているのはQLA2340Lになります。PCI-X対応カードですので、32bitの一般的な(短い)PCIスロットに挿しても動作します。

    当然ですが、最低でも2枚のアダプタが必要です。また、LC-LCの光ファイバケーブルも入手してください。FCスイッチの無い最小構成の場合は、1本の光ファイバケーブルで2つのアダプタを直結してください。

  3. CentOS5.2のインストール
  4. セオリー通りにインストールしてください(詳細省略)。ターゲット用の空き領域を最初から確保しておくのが良いと思います。また、開発ツールをインストール対象として選択しておいてください。

    なお、CentOS以外のディストリビューションでも以下の手順はほとんど変わらないと思います。

  5. QLogicファームウェアの取得
  6. 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
    
  7. カーネルソースの取得
  8. 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
    
  9. SCSTソースコードの取得
  10. sourceforgeから最新版のソースコードを取得します。Webページからリンクされているものは最新版ではないので注意してください。

    # cd /root
    # yum -y install subversion
    # svn co https://scst.svn.sourceforge.net/svnroot/scst
    # cd scst/trunk
    # make debug2release
    
  11. Linuxカーネルの再構築
  12. 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
    
  13. ブートローダの調整
  14. 再構築したカーネルがデフォルトで起動するように調整します。

    # cd /boot/grub
    # vi menu.lst
    
    以下を変更
    
    default=0
    

    再起動後、qla2xxxモジュールが有効になっていることを確認します。

    # dmesg
    
  15. SCSTモジュールのインストール
  16. 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
    
  17. SCSTの有効化
  18. 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に設定してください。

  19. SCSTのサービス化
  20. 再起動時に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
    

    再起動して自動的に有効化されるか確認します。