Solaris iSCSI Target/Initiator : やっぱり Sun がスキ! やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20070126 2007年 1月 26日 金曜日

Solaris iSCSI Target/Initiator

Solaris でも iSCSI Target/Initiator が構築できることをご存知ですか?

実は、Nevada build 7 (Nevada は、次期 Solaris の開発コードネームです)では、Solaris iSCSI Initiator が実装され Solaris 10 3/05 HW2 リリースから、Solaris iSCSI Initiator が一般にリリースされました。
しかし、iSCSI を堪能するには、iSCSI Target が必要となります。

Solaris iSCSI Initiator が実装された当時は、iSCSI Target を手軽に構築しようにも、なかなかできることではありませんでした。
しかし、昨年の夏、ついにソフトウェアによる iSCSI Target が Nevada build 44 にて実装されました!
さらに改良は続けられており、Nevada build 54 では、ZFS ファイルシステムとの連携が可能となりました。

この機会を逃すわけにはいきませんので、iSCSI Target となる Solaris 上に、zfs volume を作成し、その領域を iSCSI Initiator で mount してみるのが、今回の目的となります。

iSCSI の概要については、下記 URL に書かれているものが、良くまとまっているかと思いますので、 参考になるかと思います。

    最新IPストレージ技術「iSCSI」
    http://www.atmarkit.co.jp/fnetwork/tokusyuu/16iscsi/iscsi01.html

ZFS 連携では、ZFS の emulated volume 機能 ( zfs create -V) を利用します。
Nevada b54 では、ZFS 領域を iSCSI target として利用できる shareiscsi オプション が実装されました。

  • 必要なもの

  これだけです。
  ZFS 同様、特定のハードウェアなどは、必要ありません。
 
  • iSCSI Target の構築
まずは、iscsi target である、iscsitadm が起動しているか確認します。

# svcs -a | grep iscsi
disabled       21:20:36 svc:/network/iscsi_initiator:default
disabled       21:20:48 svc:/system/iscsitgt:default

default では、disable となっているので、これを enable にしてあげます。

# svcadm enable iscsitgt
# svcs -a | grep iscsi
disabled       21:20:36 svc:/network/iscsi_initiator:default
online         21:49:29 svc:/system/iscsitgt:default


次に、iSCSI Initiator が利用するストレージを作成します。

これは、ZFS で pool を作成、ZFS emulated volume で、適当な容量を切り出します。
ZFS 用にディスクが用意出来ない事態も考慮して、ここでは 2G バイトのファイル を利用して pool を作成してみることにします。

  • 1. 2G バイトのファイルを作成し、zfs 領域を作成


    # mkfile 2g /usr/tmp/iscsitest.2g
    # zpool create test /usr/tmp/iscsitest.2g
    # zpool list
    NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
    test                       1.98G      88K    1.98G      0%  ONLINE              -

  • 2. 作成した test pool から、1G バイトの emulated volume である test/vol を作成します。

    # zfs create -V 1gb test/vol                                                
    # zfs list
    NAME       USED  AVAIL  REFER  MOUNTPOINT
    test          1.00G   976M   24.5K  /test
    test/vol     22.5K  1.95G    22.5K  -

  • 3. 利用する ZFS 領域を確保できたら、iSCSI Target で利用する backing storeディレクトリを指定します。
ここから、iSCSI を構築するためのコマンドが登場します。

    ・iscsitadm  (iSCSI Target 管理コマンド )
    ・iscsiadm   (iSCSI Initator 管理コマンド )
 
backing store ディレクトリは、iSCSI Target が Initiator に提供する領域 に使われる場所となるので、ここでは、emulated vlume を作成した /test (ZFS pool) を指定します。

# iscsitadm modify admin -d /test
# iscsitadm show admin  
iscsitadm:
    Base Directory: /test
    CHAP Name: Not set
    RADIUS Access: Not set
    RADIUS Server: Not set
    iSNS Access: Not set
    Fast Write ACK: Not set

  • 4. 作成した test/vol に shareiscsi オプションをセットします。

    これで、iSCSI Target としての情報が登録されます。
     # zfs set shareiscsi=on test/vol

  • 5. iSCSI Target 情報を見る
iSCSI では、iSCSI Qualified Name と呼ばれるユニークな ID で、ノード管理をおこないます。
Solaris iSCSI Target/Initiator では、iqn. で始まる識別子を利用しており、iSCSI Target となる、Nevada b54 マシンは、
  
    「iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea」

という、iSCSI ネームで識別されることがわかります。

# iscsitadm list target -v
Target: test/vol
    iSCSI Name: iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea
    Alias: test/vol
    Connections: 0
    ACL list:
    TPGT list:
    LUN information:
        LUN: 0
            GUID: 0x0
            VID: SUN
            PID: SOLARIS
            Type: disk
            Size: 1.0G
            Backing store: /dev/zvol/rdsk/test/vol
            Status: online


さらに、LUN 情報からは、VID(Vendor ID) や、容量(Size)、どのような領域を利用しているか (backing store) などがわかります。

以上で、iSCSI Target の構築は完了です。
本当ならば、接続認証などの設定もおこなうべきですが、まずは接続してみることを目的としていますので、省略します。
ちなみに、次期アップデートリリースとなる、Solaris 10 Update 4 では、iSCSI Target が提供される予定です。

それでは、上記で構築した iSCSI Target が提供する、1GB の領域を利用するために
iSCSI Initiator の設定をおこなってみましょう。


  • iSCSI Initiator の構築
引き続き、Solaris 10 11/06 のマシンで iSCSI Initiator を構築します。

まずは、iSCSI Initiator のサービス (iscsid) が有効になっているか確認します。

# svcs -a | grep iscsi
disabled       21:20:36 svc:/network/iscsi_initiator:default

default では、disable となっているので、これを enable にしてあげます。

# svcadm enable iscsi_initiator
# svcs -a | grep iscsi
enable       21:20:36 svc:/network/iscsi_initiator:default


  • 1. iSCSI Initiator の情報を確認

    iSCSI Target の時と同様、iSCSI Initiator 側の情報も確認してみましょう。
    iSCSI Initiator となる、Solaris 10 11/06 のマシンには、以下の iSCSI ネームが割り当てられていることがわかります。
          iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
 
# iscsiadm list initiator-node               
Initiator node name: iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
Initiator node alias: -
        Login Parameters (Default/Configured):
                Header Digest: NONE/-
                Data Digest: NONE/-
        Authentication Type: NONE
        RADIUS Server: NONE
        RADIUS access: unknown
        Configured Sessions: 1

  • 2. iSCSI Target の IP アドレスを設定します。
iSCSI Target に接続するために、iSCSI Target となるマシンの IP アドレス (ここでは、129.158.56.74)を discovery-address に指定します。

 # iscsiadm add discovery-address 129.158.56.74


  • 3. iSCSI Target への接続を有効にします。
このコマンドを実行することで、すぐに接続が開始されます。

# iscsiadm modify discovery -t enable

  • 4. デバイスを確認します。
それでは、デバイスが認識されているか確認しましょう。
てっとりばやく、iostat コマンドで。

# iostat -En
c0t010000D7E29A7AC700002A0045B5A7EDd0 Soft Errors: 2 Hard Errors: 0 Transport Errors: 0
Vendor: SUN      Product: SOLARIS          Revision: 1   Serial No: 
Size: 1.07GB <1073741312 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 2 Predictive Failure Analysis: 0


お?何か、みたことのないデバイスが表示されていますよ?
実は、これが、iSCSI ディスクとなります。
もし、何も表示されない場合は、以下のコマンドを実行してください

 # devfsadm -c iscsi

一見、わけのわからない文字列ですが、Solaris のデバイス命名規則に従っていることがわかります
 
        コントローラ: c0
      SCSI ターゲット: t010000D7E29A7AC700002A0045B5A7ED
            SCSI LUN: d0
 
偉いですね。
続いて、format コマンドでみてみましょう。

# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c0t010000D7E29A7AC700002A0045B5A7EDd0 <DEFAULT cyl 1021 alt 2 hd 64 sec 32>
          /scsi_vhci/disk@g010000d7e29a7ac700002a0045b5a7ed
       1. c1d0 <DEFAULT cyl 1336 alt 2 hd 255 sec 63>
          /pci@0,0/pci-ide@1f,1/ide@0/cmdk@0,0
Specify disk (enter its number): 0
selecting c0t010000D7E29A7AC700002A0045B5A7EDd0
[disk formatted]

こちらも、ローカルに接続されたディスクとして見えていますね。
すばらしい。

この状態のまま、iSCSI Target 側で target 情報をみてましょう。

Initiator の項目が増え、iSCSI ネームが表示されています。
これは、iSCSI Initiator となる Solaris 10 11/06 のものであることが わかり、接続されていることがわかります。
 
# iscsitadm list target -v                                                  
Target: test/vol
    iSCSI Name: iqn.1986-03.com.sun:02:882dc508-86d5-47be-a7cc-92c931245fea
    Alias: test/vol
    Connections: 1
        Initiator:
            iSCSI Name: iqn.1986-03.com.sun:01:e0000000783b.45b5b9dc
            Alias: unknown

    ACL list:
    TPGT list:
    LUN information:
        LUN: 0
            GUID: 010000d7e29a7ac700002a0045b5a7ed
            VID: SUN
            PID: SOLARIS
            Type: disk
            Size: 1.0G
            Backing store: /dev/zvol/rdsk/test/vol
            Status: online


ここまでできれば、あとは煮るやり焼くなり、お好きなように。
NFS などの、ネットワーク・ファイルシステムと違い、Solaris 上からはローカルな デバイスとして扱うことができるため、ファイルシステムを作成できます。
では、ちょっと実験してみましょう。


  • 5. iSCSI ディスクを使って、ZFS プールを作成

    わくわくする瞬間です。認識できた iSCSI ディスクに ZFS ファイルシステムを構築してみましょう。
    デバイス名は、すでにわかっているので、下記のコマンドを実行します。

    # zpool create test c0t010000D7E29A7AC700002A0045B5A7EDd0
    # zpool list
    NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
    test                    1008M    134K   1008M     0%    ONLINE     -

    # zfs create test/iscsi
    # zfs list
    NAME                   USED  AVAIL  REFER  MOUNTPOINT
    test                       132K   976M   26.5K  /test
    test/iscsi               24.5K   976M   24.5K  /test/iscsi

    # zpool status -v
      プール: test
     状態: ONLINE
     スクラブ: 何も要求されませんでした
    構成:

            NAME                                     STATE     READ WRITE CKSUM
            test                                     ONLINE       0     0     0
              c0t010000D7E29A7AC700002A0045B5A7EDd0  ONLINE       0     0     0

    エラー: 既知のデータエラーはありません

    # kazus 


         できちゃいました。

ちょっと感動しました。

性能は、iSCSI Target となるマシンや、ネットワークに依存しますので、なんとも言えません。
が、Sun Fire X4500 を使って dladm で trunking、そんな環境で実験してみたくなったのでした。
これからの Solaris にも、どうぞご期待ください。


投稿されたコメント:

[Trackback] Solaris �� iSCSI Target/Initiator �ι�����ˡ����...

Posted by Solaris User on 7月月 12日, 2007年 at 11:32 午後 JST #

コメント
  • HTML文法 不許可