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) |