UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS iSCSI


 
iSCSIとはSCSI over TCP/IPでSCSIプロトコルをTCP/IP上で使用する規格です。iSCSIの接続元となるクライアントのことを「iSCSI イニシエータ」と呼び、iSCSIの接続先となるサーバのことを「iSCSI ターゲット」と呼びます。ここではCentOS6.4 ( 64bit ) で以下の前提条件で両者を構築する際のメモを残します。

iSCSIイニシエータ  iSCSIターゲット
IPアドレス 192.168.12.20 192.168.12.21
ホスト名 samba samba2

また、iSCSIターゲット側で提供するディスク領域 ( LUN ) は外付けハードディスクなどOS領域とは別の領域を用意する必要があります。下記ではターゲット側の/dev/sdaがOS領域、iSCSIで提供するデータ領域を/dev/sdbで使用するという想定です。

■iSCSIターゲット

yumでiSCSIターゲットをインストールします。

# yum install scsi-target-utils
# rpm -qa | grep scsi
scsi-target-utils-1.0.24-3.el6_4.x86_64


iSCSIでは接続する際に「IQN ( iSCSI Qualified Name )」を指定する必要がありますので、ターゲット側にこのIQNを設定しておく必要があります。IQNとはイニシエータやターゲットを一意に識別するための名前のことです。つまりiSCSIターゲットに接続するにはターゲットIQNを知っている必要があるということです。


このIQNの命名には以下のようなルールが奨励されています。

iqn.<year-mon>.<tld.domain.hostname>:<hostname>.<hdd>


上記にしたがって私の場合、IQNは以下となります。( サーバのホスト名はsamba2です )

iqn.2013-03.net.unix-power.samba2:samba2.sdb


上記で設定したIQNを元にiSCSIターゲットの設定を行います。設定ファイルは/etc/tgt/targets.confで以下の記述を追記します。下記の/dev/sdb1はLinux上でマウントされている必要はなく、fstabに常時マウントする設定を実施していると起動に失敗する場合もあるので注意してください。

<target iqn.2013-03.net.unix-power:samba2.sdb>
    backing-store /dev/sdb1
    initiator-address 192.168.0.0/16
    write-cache off
</target>


/dev/sdb1をiSCSI領域として設定しており、イニシエータのアドレスは192.168.0.0/16に限定しています。ここまでくればtgtdを起動します。

# /etc/rc.d/init.d/tgtd start
SCSI target daemon を起動中:                               [  OK  ]


ここで設定が反映されているか下記のコマンドで確認してみます。LUN0がコントローラでLUN1が上記で追加したHDDになります。イニシエータからiSCSIでマウントするにはTypeがcontrollerではなくdiskである必要があることに注意してください。controllerではディスクを認識することができても使用することができません。

# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2013-03.net.unix-power:samba2.sdb
    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
            Prevent removal: 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: 99998 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb1
            Backing store flags:
    Account information:
    ACL information:
        192.168.0.0/16


■iSCSIイニシエータ

イニシエータ側では次のパッケージをインストールします。

# yum install iscsi-initiator-utils
# rpm -qa | grep iscsi
iscsi-initiator-utils-6.2.0.873-2.el6.x86_64


次のコマンドで特定のiSCSIターゲットを指定します。


# iscsiadm -m discovery -t sendtargets -p 192.168.12.21
iscsid を起動中:                                           [  OK  ]
192.168.12.21:3260,1 iqn.2013-03.net.unix-power:samba2.sdb


以降は見つけたノードは次のコマンドで確認できます。


# iscsiadm -m node
192.168.12.21:3260,1 iqn.2013-03.net.unix-power:samba2.sdb


見つけたiSCSIノードにログインします。


# iscsiadm -m node -T iqn.2013-03.net.unix-power:samba2.sdb -p 192.168.12.21 --login
Logging in to [iface: default, target: iqn.2013-03.net.unix-power:samba2.sdb, \
portal: 192.168.12.21,3260] (multiple)
Login to [iface: default, target: iqn.2013-03.net.unix-power:samba2.sdb, \
portal: 192.168.12.21,3260] successful.


以降はログインに成功したノードを次のコマンドで確認できます。

# iscsiadm -m session
tcp: [1] 192.168.12.21:3260,1 iqn.2013-03.net.unix-power:samba2.sdb


以下は一旦ログインしているiSCSIノードからログアウトするコマンドです。

# iscsiadm -m node -T iqn.2013-03.net.unix-power:samba2.sdb -p 192.168.12.21 --logout


以下は今後使わないであろうiSCSIノードをイニシエータから削除するコマンドです。

# iscsiadm -m node -o delete iqn.2013-03.net.unix-power:samba2.sdb -p 192.168.12.21


192.168.12.21の/dev/sdbがiSCSI経由でローカルディスクとして認識されている状況ですので後はpartedやfdiskでパーティションを作成しマウントすることで利用可能となります。下記はpartedを用いたパーティション作成およびフォーマットの実行です。

# parted /dev/sdb
(parted) mklabel msdos
(parted) print
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 107GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始  終了  サイズ  タイプ  ファイルシステム  フラグ

(parted) unit GB
(parted) mkpart
パーティションの種類?  primary/プライマリ/extended/拡張? primary
ファイルシステムの種類?  [ext2]? ext4
開始? 0
終了? 100
(parted) print
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 107GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了   サイズ  タイプ   ファイルシステム  フラグ
 1    0.00GB  100GB  100GB   primary

(parted) quit

# mkfs -t ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6111232 inodes, 24413696 blocks
1220684 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
746 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:
done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


これでフォーマットまで完了しましたので後はマウントを行い実際にファイルの読み書きができるか試してみてください。


# mount /dev/sdb1 /mnt/export
# mount
/dev/sdb1 on /mnt/export type ext4 (rw)


あとは起動時に自動マウントするよう以下の設定を/etc/fstabに追記します。

# vi /etc/fstab
/dev/sdb1               /iscsi                  ext4    _netdev         0 0


_netdevオプションはネットワークが起動していなければマウントを行わないようにするものです。

またiSCSIターゲットのダウンなどが起きている際に起動しようとするとfstabのマウントに失敗しOSが起動不可となってしまうことがあります。その場合にはrootパスワードを入力後、マウントを解除して/etc/fstabを修正後に再起動します。


# mount -o remount rw /
# vi /etc/fstab
[ 該当箇所を修正 ]

# reboot



■ジャンボフレームの対応

iSCSIやNFSなどのネットワークを利用する際にはジャンボフレームを有効として一回に扱える最大パケット容量を増やすことによりパフォーマンスの向上が期待できます。これはiSCSIイニシエータおよびターゲットはもちろんなのですが、両者を直結する場合を除き、この両者の間に入るスイッチもジャンボフレームに対応している必要があります。iSCSIソフトウェアの設定というよりもLinux ( OS ) の設定となります。ジャンボフレームに対応するためにNICの設定でMTUの値を9000に設定します。

デフォルトは1500となっているのをまず確認しておきます。

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0A:E4:89:F4:52
          inet addr:192.168.12.20  Bcast:192.168.12.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:e4ff:fe89:f452/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1713 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1101 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1623192 (1.5 MiB)  TX bytes:106464 (103.9 KiB)


以下のファイルを編集して1500から9000に変更します。MTU=9000を所定のファイルに追記してネットワークを再起動します。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

※下記を追記
MTU=9000

# /etc/rc.d/init.d/network restart 


設定が反映されたか再度確認しておきます。

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0A:E4:89:F4:52
          inet addr:192.168.12.20  Bcast:192.168.12.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:e4ff:fe89:f452/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9000  Metric:1
          RX packets:134 errors:0 dropped:0 overruns:0 frame:0
          TX packets:121 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12472 (12.1 KiB)  TX bytes:15774 (15.4 KiB)




 関連記事
 データストア( iSCSI )を追加する
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.