読者です 読者をやめる 読者になる 読者になる

部屋を掃除したら漫画が沢山出てきたので書く日記

漫画とか合唱とかUNIXとかLinuxとかについて書く日記です。

Solaris 10でiSCSI構築(ZFS連携)

UNIX

ちょっと専門的な話となります。うちの奥さんならタイトルを見ただけでブラウザを閉じるでしょうけども、まあとりあえず書きます。

私の仕事でパソコンが使用するためのハードディスク(HDD)を用意する際、沢山のハードディスク(HDD)を光ファイバーケーブルで接続して使用する事があります。これは最も高級なHDDの使い方の一つで、SAN(Storage Area Network)とか、FC-SANとか呼びます。性能はとても良いですが、その引き換えに高価な機械が必要になります。また、設定やメンテナンスにも専門的な知識が必要であり、敷居の高い方式です。

で、iSCSIとは、LANケーブル経由でHDDを使用する方式の事で、比較的容易にSANのようなHDDの使い方ができるという事で近年注目されている技術です。

このiSCSIを、Solaris 10で使用可能なファイルシステムZFS」を利用して簡単に構築出来るという情報を入手したのでやってみました。

前提条件

iSCSIでHDDを認識させるサーバ(以降「ターゲット」と呼ぶ)
「ターゲット」のHDDを使うサーバ(以降「イニシエータ」と呼ぶ)

ターゲットSolaris 10 8/07以降
かつ、ZFSプールを作成できる空きディスクまたはスライスがあること(今回はc0d0s7という領域を使用)
イニシエータSolaris 10 1/06以降

1.ターゲット側の設定

以下の手順を実行する事で設定が完了します。全てスーパユーザで実行します。

iscsiターゲット有効サービスの有効化

Solaris上で、iSCSIターゲットとして動作するためのサービス「svc:/system/iscsitgt」がデフォルトでは無効になっているので、使えるように有効化します。

svcadm enable svc:/system/iscsitgt:default
zpool作成

次に、iSCSIストレージ(HDDの集まりのことを私の仕事ではこう呼びます)として使用するHDDの領域を指定します。ZFSが使用する領域の事をZFSプール(zpool)と呼びますが、まずこれを作成します。
今回はc0d0s7を「mypool」という名前のzpoolとして作成します。

zpool create -f mypool c0d0s7
iscsizfsファイルシステム作成

zpoolが出来たので、ZFSファイルシステム領域として作成します。

zfs create mypool/iscsi
quota容量を設定したZFSファイルシステム作成

ZFSの領域をiSCSIストレージとして使用する場合、「いくらまで使用するか」という設定(quotaとか呼びます)が必要みたいです。
使用するc0d0s7が大体30GB強あるので、ここでは30GBとします。~

zfs create -V 30gb /mypool/iscsi/t1
iscsiターゲットに設定

これでターゲットとしての準備が完了したので、ターゲットとして設定します。

zfs set shareiscsi=on mypool/iscsi/t1

確認きちんと認識しているか確認します。

iscsitadm list target -v

以下のような表示がされたらOKです。

 Target: mypool/iscsi/t1
     iSCSI Name: iqn.1986-03.com.sun:02:2e75abc4-1e78-6b74-99a7-fc2c750dbf95
     Alias: mypool/iscsi/t1
     Connections: 0
     ACL list:
     TPGT list:
     LUN information:
         LUN: 0
             GUID: 0x0
             VID: SUN
             PID: SOLARIS
             Type: disk
             Size:   30G
             Backing store: /dev/zvol/rdsk/mypool/iscsi/t1
             Status: online

2.イニシエータ側の設定

次は実際にHDDを使用するサーバとなるイニシエータ側の設定です。

イニシエータサービス有効

ターゲットと同じように、イニシエータとして使用するための機能を有効化します。

svcadm enable svc:/network/iscsi_initiator:default

確認

svcs -a|grep iscsi

以下のような表示がされたらOKです。

 online         13:43:42 svc:/network/iscsi_initiator:default
iSCSI ターゲットのIPアドレスを指定

先ほど設定したiSCSIターゲットのIPアドレスを指定します。このIPアドレスを頼りにイニシエータはターゲットを認識します。
ここでは「172.24.175.229」とします。

iscsiadm add discovery-address 172.24.175.229

設定したら、これを使えるように有効化します。

iscsiadm modify discovery --sendtargets enable
認識確認

以上の手順で、イニシエータサーバからは従来のHDDと同じようにiSCSIが認識されているはずですので確認してみましょう。

format

以下のように「c3t01000040CA2D46B600002A004A445300d0」というような長い名前のHDDデバイスが認識できていたらOKです。

 Searching for disks...done
 
 
 AVAILABLE DISK SELECTIONS:
        0. c0d0 <DEFAULT cyl 14590 alt 2 hd 255 sec 63>
           /pci@0,0/pci-ide@1f,2/ide@0/cmdk@0,0
        1. c3t01000040CA2D46B600002A004A445300d0 <DEFAULT cyl 3914 alt 2 hd 255 sec 63>
           /scsi_vhci/disk@g01000040ca2d46b600002a004a445300
ZFSでマウント

イニシエータ側からZFSファイルシステムでこのHDDをマウント(OSが使えるようにする事)します。

zpool create -f tpc5160_iscsi c3t01000040CA2D46B600002A004A445300d0
zfs set mountpoint=/iscsi tpc5160_iscsi

確認します。/iscsiというマウントポイント(WindowsでいうとCドライブとかDドライブに相当)が見えていたらOKです。

 df -k
 tpc5160_iscsi        30707712      18 30707595     1%    /iscsi

これで30GBのHDDがイニシエータサーバに追加されて好きに使えることになります。OSの停止は一切必要ないので大変便利です。

性能は?

問題の性能ですが、あんまり出ません。でも個人でファイルを格納したりする分には困らない程度の性能です。
そもそもiSCSIは、楽に構築できる分、性能があまり優秀ではないという方式といわれています(最近は改善されてきてはいる)。
しかし、楽して安く、大容量HDDを使えるようにするには大変便利です。
また、イニシエータ側は規格上、Solarisである必要は無く、WindowsからもLinuxからもイニシエータ用ソフトを使用すれば認識可能です。Windowsでもマイクロソフトのサイトからイニシエータソフトが無料でダウンロードできます。
なので、HDDを沢山積んだSolaris 10サーバをiSCSI用に立てると結構便利かもしれません。