= IET(The iSCSI Enterprise Target)でiSCSIをLinux上で使う =
ストレージをFCなどで構築するとコストがかさみますが、Linux上でソフトウェアのiSCSIターゲットを利用すると、Linuxマシンを用意すれば格安でストレージを構築できます。LinuxでiSCSIのターゲットを利用するには、[http://iscsitarget.sourceforge.net/ iSCSI Enterprise Target](IET)を利用ます。まずは、ストレージを作る準備をしてみよう。
== ドライバのビルド/インストール ==
=== Fedoraの場合 ===
IETのサイトから[http://sourceforge.net/projects/iscsitarget/files/ ソースコード]を取得し、次のようにしてパッケージをビルドする。ビルドに必要なパッケージは予めインストールしておくこと。
{{{
# rpmbuild -ta iscsitarget-1.4.20.1.tar.gz
# cd /root/rpmbuild/RPMS/x86_64/
# rpm -Uvh iscsitarget-1.4.20.1-1.x86_64.rpm kmod-iscsitarget-1.4.20.1-1_2.6.33.3_85.fc13.x86_64.x86_64.rpm
}}}
モジュールのインストールが完了したら、モジュールをロードする。
{{{
# insmod iscsi_trgt
# dmesg
iSCSI Enterprise Target Software - version 1.4.20.1
iscsi_trgt: Registered io type fileio
iscsi_trgt: Registered io type blockio
iscsi_trgt: Registered io type nullio
}}}
=== Ubuntuの場合 ===
{{{
# apt-get install openiscsi iscsitarget iscsitarget-source
# m-a a-i iscsitarget-source
}}}
== ストレージの作成 ==
ストレージの作成は、まずiSCSIのストレージにしたいファイルを作成する。
{{{
# dd if=/dev/zero of=/iscsi/iscsitarget bs=1024 count=100000
}}}
次に、ietd.confに作成したファイルをiSCSIストレージとして利用する設定を行う。
/etc/iet/ietd.confに下記の記述を追加する。
{{{
Target iqn.2001-04.org.ultimana:storage.disk1
Lun 0 Path=/iscsi/iscsitarget,Type=fileio
}}}
iSCSIターゲットの起動と確認しよう。
{{{
# /etc/init.d/iscsi-target start
# iscsiadm -m discovery --type sendtargets -p 192.168.122.1
192.168.122.1:3260,1 iqn.2001-04.org.ultimana:storage.disk1
}}}
== iSCSIの利用側 ==
iSCSIを利用するには、次のようにする。まずは、iSCSIイニシエータ(iSCSIのクライアント)にiSCSIディスクを認識させておく。
{{{
# iscsiadm -m discovery --type sendtargets -p 192.168.122.1
192.168.122.1:3260,1 iqn.2001-04.org.ultimana:storage.disk1
}}}
iSCSIディスクをデバイスにマッピングする。
{{{
# iscsiadm -m node -T iqn.2001-04.org.ultimana:storage.disk1 --login
Logging in to [iface: default, target: iqn.2001-04.org.ultimana:storage.disk1, portal: 192.168.122.1,3260]
Login to [iface: default, target: iqn.2001-04.org.ultimana:storage.disk1, portal: 192.168.122.1,3260]: successful
}}}
dmesgで確認すると、認識されたデバイス名が分かる。
{{{
# dmesg
....
scsi6 : iSCSI Initiator over TCP/IP
scsi 6:0:0:0: Direct-Access IET VIRTUAL-DISK 0 PQ: 0 ANSI: 4
sd 6:0:0:0: [sdb] 200000 512-byte logical blocks: (102 MB/97.6 MiB)
sd 6:0:0:0: [sdb] Write Protect is off
sd 6:0:0:0: [sdb] Mode Sense: 77 00 00 08
sd 6:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
sd 6:0:0:0: Attached scsi generic sg2 type 0
sdb: unknown partition table
sd 6:0:0:0: [sdb] Attached SCSI disk
}}}
ここでは、/dev/sdbとして認識されている。あとは、普通のDISKの様に利用すればok。
利用が終了したらログアウトする。
{{{
# iscsiadm -m node -T iqn.2001-04.org.ultimana:storage.disk1 --logout
Logging out of session [sid: 3, target: iqn.2001-04.org.ultimana:storage.disk1, portal: 192.168.122.1,3260]
Logout of [sid: 3, target: iqn.2001-04.org.ultimana:storage.disk1, portal: 192.168.122.1,3260]: successful
}}}
== virshにストレージプールを登録 ==
libvirtのストレージ管理機能を利用すると、なんとiscsiadm使わなくてもストレージを管理できる。まず、pool.xmlにiSCSIの設定情報を記述。
{{{
lun1
/dev/disk/by-path
}}}
virshでストレージ定義と開始を行う。
{{{
virsh # pool-define pool.xml
プール lun1 が pool.xml から定義されました
virsh # pool-start lun1
プール lun1 が起動されました
virsh # pool-list
名前 状態 自動起動
-----------------------------------------
default 動作中 yes
lun1 動作中 no
virsh # pool-info lun1
名前: lun1
UUID: 1477ce40-0dd0-91b2-fa7a-ae64ddb27a0f
状態: 実行中
容量: 7.81 GB
割り当て: 7.81 GB
利用可能: 0.00
}}}
/dev/disk/by-pathディレクトリを確認してみると、デバイスができている。
{{{
# ls /dev/disk/by-path/
ip-192.168.122.1:3260-iscsi-iqn.2001-04.org.ultimana:storage.disk1-lun-0
ip-192.168.122.1:3260-iscsi-iqn.2001-04.org.ultimana:storage.disk1-lun-0-part1
ip-192.168.122.1:3260-iscsi-iqn.2001-04.org.ultimana:storage.disk1-lun-0-part2
}}}
libvirt XMLファイルには次のようにしてディスクを定義する。typeをblockにしているところに注意。
{{{
}}}
でもこんな面倒なことするなら、iscsiadm使って/dev/sdxにマッピングしたデバイス使った方が楽かも。