2012年5月5日土曜日

RHEL6 iSCSI target(scsi-target-utils)の基本的な設定


このエントリーをはてなブックマークに追加


tgtadm を使ってiSCSIターゲット構成のメモ。

■iSCSIイニシエータを構成する場合はこちらを参照
仮想環境を使って簡単にRHEL6のiscsiマルチパスを検証する
RedHat Enterprise Linux iSCSIコマンドまとめ(iscsiadm)
RedHat における iSCSI 設定とマルチパス

■Solarisでのターゲット構成はこちらを参照
Solaris11 + COMSTAR で iSCSIホストの構築


必要パッケージの追加

以下のパッケージを追加する。
# yum install scsi-target-utils

サービスの起動。
# chkconfig tgtd on
# /etc/init.d/tgtd start

これで準備完了。


重要な用語

■iqn
iSCSIターゲット/イニシエータの識別子。任意に設定できるが、iSCSIを利用するネットワーク内において一意である必要がある。

命名についてのルール等はこちらがわかりやすい。


■backing-store、direct-store

ターゲットとして領域を提供する際に使用するデバイス、またはファイル。
・backing-storeの場合は領域にファイル、物理デバイス、LVM等が指定できる。
・direct-storeの場合は物理デバイスしか指定できない。

違いは殆ど無いが、direct-storeで指定した場合、指定されたデバイスに大して sg_inq コマンドによる情報収集が実行され、vendor_id 等が自動で設定される。backing-storeで指定しておけば問題ない。

■LUN
SCSIデバイスにおける識別番号。一つの機器で複数の領域を定義するような場合に、LUNによって識別する。
tgtdは各領域へ1から割り当てる。実際は0から始まっているが、0番はコントローラ番号として予約されている。

■ACL
ターゲットにアクセス可能なクライアント(イニシエータ)を指定する。

■write-cache
ライトキャッシュの利用ON/OFF。デフォルトON。本番環境で使う場合はOFFが推奨。プロセスがハングしたりOSが落ちたりするとフラッシュされていないキャッシュが失われデータ破損を招く。


領域の作成とSELinux

ターゲット側で提供する領域を作成する場合は、SELinuxのポリシーに注意が必要。

tgtdが持つタイプ属性:tgtd_t
# ps -efZ |grep tgt |grep -v grep
system_u:system_r:tgtd_t:s0     root      1283     1  0 15:05 ?        00:00:00 tgtd
system_u:system_r:tgtd_t:s0     root      1285  1283  0 15:05 ?        00:00:00 tgtd

プロセスタイプtgtd_t が権限を持つ領域:tgtd_var_lib_t
# sesearch -A -C -s tgtd_t -t tgtd_var_lib_t -c file
Found 1 semantic av rules:
   allow tgtd_t tgtd_var_lib_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;

領域の作成と、SELinuxポリシーの設定
# mkdir /var/lib/tgtd
# dd if=/dev/zero of=/var/lib/tgtd/disk1.img bs=1024k count=1 seek=1023
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0026208 s, 400 MB/s
# ll -Z /var/lib/tgtd/
-rw-r--r--. root root unconfined_u:object_r:var_lib_t:s0 disk1.img
# restorecon -Rv /var/lib/tgtd
restorecon reset /var/lib/tgtd context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:tgtd_var_lib_t:s0
restorecon reset /var/lib/tgtd/disk1.img context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:tgtd_var_lib_t:s0
# ll -aZ /var/lib/tgtd
drwxr-xr-x. root root unconfined_u:object_r:tgtd_var_lib_t:s0 .
drwxr-xr-x. root root system_u:object_r:var_lib_t:s0   ..
-rw-r--r--. root root unconfined_u:object_r:tgtd_var_lib_t:s0 disk1.img

このタイプ属性を持たないディスクイメージはtgtdがアクセスできずサービスを起動できない。
SELinuxを使わない場合は気にする必要はない。


コマンドでの設定方法(tgtadm)

tgtadmを利用した設定の流れは以下。

1. ターゲットの作成
作成# tgtadm --lld iscsi --op new --mode target --tid <num> --targetname <target_name>
確認# tgtadm --lld iscsi --op show --mode target

例)
# tgtadm -L iscsi -o new -m target --tid 1 -T "iqn.2012-04.com.iscsi01:target01"
# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2012-04.com.iscsi01:target01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
    Account information:
    ACL information:

参考:http://engawa.2ch.net/test/read.cgi/linux/1189750429/527
532:login:Penguin:2010/02/18(木) 18:12:57 ID:S4o+jKbV
tgtd でターゲットを作成する際、
過去に使った(既に消された) tid ってのは再利用不能なんでしょうか?

tgtadm --lld iscsi -m target -o show で何も表示されない
(ターゲットが一つも存在しない)状態でも
--tid=0 などと既に削除した ID を指定して新規作成しようとすると
tgtadm: 'tid' option is necessary と断られてしまいます。
もちろんまだ一度も使ってない ID を指定すれば作成可能なのですが、
これでは「どこまで使ったか」を別途記録しておかないといけないことになり
テストで作成/削除を繰り返した後など、非常に不便です。

これは「そういうもの」なんでしょうか?
また「既に使ったもの」はどこを見れば確認できるのでしょう?
使用 OSは CentOS 5.4です。

--tid 0 とかやると「tgtadm: 'tid' option is necessary」となって追加できない場合がある。原因はよく調べてないが、適当に1,2,3と番号を増やしていけば対応できる。
tgtadmを使った設定は揮発性な上、tidはそこまで重要なものではないのでキニシナイ。


2. ターゲットへLUNを追加
追加# tgtadm --lld iscsi --op new --mode logicalunit --tid <num> --lun <lun_num> --backing-store <device or file>
確認# tgtadm --lld iscsi --op show --mode target

例)
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-store /var/lib/tgtd/disk1.img
# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2012-04.com.iscsi01:target01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 1074 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /var/lib/tgtd/disk1.img
            Backing store flags:
    Account information:
    ACL information:


3. アクセス権を設定
# tgtadm --lld iscsi --op bind --mode=target --tid 1 --initiator-address ALL
# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2012-04.com.iscsi01:target01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 1074 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /var/lib/tgtd/disk1.img
            Backing store flags: 
    Account information:
    ACL information:
        ALL

4. 確認
# iscsiadm -m discovery -t sendtargets -p 127.0.0.1
# iscsiadm -m node
127.0.0.1:3260,1 iqn.2012-04.com.iscsi01:target01

tgtadmを使った設定は揮発性で、tgtdが再起動されると設定が失われてしまう。
# /etc/init.d/tgtd restart
SCSI target daemon を停止中:                               [  OK  ]
SCSI target daemon を起動中:                               [  OK  ]
[root@openstack ~]# tgtadm --lld iscsi --op show --mode target
何も表示されない

起動時に毎回自動で設定する方法としては、rc.local等にtgtadmのコマンドを記載しておく方法と、専用設定ファイルに記載しておく2つの方法がある。


ファイル(/etc/tgt/targets.conf)での設定

シンプルな設定。
<target iqn.2012-04.com.iscsi01:target01>
    backing-store /var/lib/tgtd/disk1.img
</target>

tgtdを再起動すると有効化される。
# /etc/init.d/tgtd restart
SCSI target daemon を停止中:                               [  OK  ]
SCSI target daemon を起動中:                               [  OK  ]
# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2012-04.com.iscsi01:target01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 1074 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /var/lib/tgtd/disk1.img
            Backing store flags: 
    Account information:
    ACL information:
        ALL

/etc/tgt/targets.conf には設定例も豊富に記載されているのでそちらが参考になる。


その他参考ドキュメント

/usr/share/doc/scsi-target-utils-1.0.14/README
/usr/share/doc/scsi-target-utils-1.0.14/README.iscsi
/usr/share/doc/scsi-target-utils-1.0.14/README.iser
/usr/share/doc/scsi-target-utils-1.0.14/README.lu_configuration
/usr/share/doc/scsi-target-utils-1.0.14/README.mmc
/usr/share/man/man8/tgt-admin.8.gz
/usr/share/man/man8/tgt-setup-lun.8.gz
/usr/share/man/man8/tgtadm.8.gz

0 件のコメント:

コメントを投稿