IPネットワークの大容量記憶デバイス—iSCSI

目次

12.1. iSCSIターゲットのセットアップ
12.2. iSCSIイニシエータの設定

サーバの運用、またはコンピュータセンターの重要なタスクの1つには、サーバシステムに対してハードディスクスペースを提供することがあります。メインフレームセクターでは、ディスクスペースを提供するためにしばしばファイバチャネルが使われます。今まで、UNIXコンピュータや、他の主要サーバでは、このような集中ストレージソリューションは利用されていませんでした。

Linux-iSCSIは、Linuxコンピュータを集中ストレージシステムに接続するための、簡単で費用もあまりかからない手頃なソリューションです。基本的にiSCSIは、SCSIコマンドをIPレベルで転送することを表しています。プログラムがデバイスへの照会を開始すると、オペレーティングシステムが必要なSCSIコマンドを作成します。作成されたコマンドは、一般的にiSCSIイニシエータと呼ばれるソフトウェアにより、IPパッケージに組み込まれ、必要に応じて暗号化されます。次に、目的のiSCSIリモートステーションにパッケージが転送されます。リモートステーションは、iSCSIターゲットと呼ばれることもあります。

多くのストレージソリューションが、iSCSIによるアクセス手段を提供しています。また、LinuxサーバにiSCSIターゲットの役割をさせることもできます。この場合、ファイルシステムサービスが最適化されるようにLinuxサーバを設定する必要があります。iSCSIターゲットは、Linux中のブロックデバイスにのみアクセスします。そのため、RAIDソリューションを使ってディスクスペースを増やしたり、メモリを大量に搭載してデータキャッシュの性能を向上することができます。RAIDの詳細については、7.2項 「ソフトウェアRAID設定」も参照してください。

iSCSIターゲットのセットアップ

SUSEŽ Linux Enterprise Serverには、Ardis iSCSIターゲットから発展したオープンソースのiSCSIソリューションが用意されています。基本的な設定はYaSTを使って行えますが、iSCSIの機能をフル活用するには、手動で設定を行う必要があります。

YaSTを使ったiSCSIターゲットの作成

iSCSIターゲットの設定では、既存のブロックデバイスまたはファイルシステムのイメージが、iSCSIイニシエータにエクスポートされます。まず、YaSTを使って必要なブロックデバイスを作成するか、ファイルシステムイメージを作成してくださパーティションの作成については、8.5.7項 「YaSTパーティション分割ツールの使用」を参照してください。ファイルシステムイメージは、手動で作成する必要があります。たとえば、サイズが4GBの/var/lib/xen/images/xen-0イメージを作成する場合、まずこのディレクトリを作成してから、イメージを作成します。

mkdir -p /var/lib/xen/images
dd if=/dev/zero of=/var/lib/xen/images/xen-0 seek=1M bs=4096 count=1

iSCSIターゲットを設定するには、YaSTの[iSCSIターゲット]モジュールを起動します。設定項目は、3つのタブに分かれています。[Service]タブでは、実行モードとファイアウォールの設定を行います。リモートコンピュータからiSCSIターゲットにアクセスする場合は、[ファイアウォールでポートを開く]を選択します。iSNSサーバでディスカバリとアクセス制御を管理する場合は、[iSNSアクセス管理]を有効にして、iSNSサーバのIPアドレスを入力します。ホスト名は有効なものでも使用できず、IPアドレスを使用する必要があることに注意してください。iSNSの詳細は、第13章 Linux向けiSNSの概要を参照してください。

[Global]タブでは、iSCSIサーバの設定を行います。ここで設定する認証方法は、サービスの検出に使用します。ターゲットにアクセスする場合のものではありません。ディスカバリへのアクセスを制限しない場合は、[No Authentication]を選択します。

認証が必要な場合、2つの検討事項があります。まず、イニシエータは、iSCSIターゲットでディスカバリを実行するためのパーミッションがあることを証明できなければなりません。この設定は、[Incoming Authentication]で行います。もう1つは、iSCSIターゲットはイニシエータに、自分が正しいターゲットであることを証明しなければなりません。そのため、iSCSIターゲットもユーザ名とパスワードを使用できます。この設定は、[Outgoing Authentication]で行います。認証の詳細は、RFC3720を参照してください(http://www.ietf.org/rfc/rfc3720.txtを参照)。

ターゲットは、[Targets]タブで定義します。新しいiSCSIターゲットを作成するには、[追加]をクリックします。最初のダイアログでは、エクスポートするデバイスに関する情報を指定します。

ターゲット

[Target]行には、以下のような固定形式の構文を指定します。

iqn.yyyy-mm.<reversed domain name>

この行は常に「iqn」から始まります。「yyyy-mm」の部分には、このターゲットをアクティブにする日付を指定します。命名規則の詳細については、RFC3722を参照してください(http://www.ietf.org/rfc/rfc3722.txtを参照)。

Identifier

[Identifier]は、自由に指定することができます。ただし、システムを体系的に管理するためにも、一定のスキーマを使用するようにしてください。

LUN

ターゲットに複数のLUNを割り当てることができます。そのためには、[ターゲット]タブのターゲットを選択し、[編集]をクリックします。そこから、既存のターゲットに新しいLUNを追加します。

パス

エクスポートするブロックデバイス、またはファイルシステムイメージのパスを追加します。

次のメニューでは、ターゲットへのアクセス制限を設定します。ここの設定は、ディスカバリの認証設定とほとんど変わりありません。この場合、少なくとも着信認証を設定する必要があります。

新しいターゲットの設定を完了するには、[次へ]をクリックします。[Target]タブの概要ページが表示されます。変更内容を適用するには、[完了]をクリックします。

iSCSIターゲットの手動設定

iSCSIターゲットを設定するには、/etc/ietd.confを編集します。このファイル中の、最初のTarget宣言より前にあるすべてのパラメータは、ファイルのグローバルパラメータになります。この部分にある認証情報は、グローバルパラメータではありません。iSCSIターゲットの検出に用いられます。

iSNSサーバにアクセスできる場合、最初の設定内容はこのサーバをターゲットに通知することです。iSNSサーバのアドレスは常にIPアドレスで指定する必要があることに注意してください。通常のドメイン名では不十分です。この機能の設定は、次のようになります。

iSNSServer 192.168.1.111
iSNSAccessControl no

この設定では、iSCSIターゲットがiSNSサーバでそれ自体を登録し、ディスカバリのイニシエータとなります。iSNSの詳細は、第13章 Linux向けiSNSの概要を参照してください。iSNSディスカバリのアクセス制御はサポートされていないことに注意してください。[iSNSアクセス管理]を[いいえ]のままにします。

すべての直接iSCSI認証は、双方向で行われます。iSCSIターゲットがiSCSIイニシエータに認証を要求するには、IncomingUserを使用します。このオプションは、複数回追加できます。一方、iSCSIイニシエータも、iSCSIターゲットに認証を要求することができます。この場合は、OutgoingUserを使用します。どちらの場合も、構文は同じです。

IncomingUser <username> <password>
OutgoingUser <username> <password>

認証の後には、1つまたは複数のターゲット定義を指定します。定義する各ターゲットについて、Targetセクションを追加します。このセクションは、常にTarget識別子から始まり、その後に論理ユニット番号(LUN)を定義します。

Target iqn.yyyy-mm.<reversed domain name>[:identifier]
          Lun 0 Path=/dev/mapper/system-v3
          Lun 1 Path=/dev/hda4
          Lun 2 Path=/var/lib/xen/images/xen-1,Type=fileio

Target行の「yyyy-mm」の部分は、ターゲットを有効にする日付を定義します。また、identifier (識別子)には、任意の値を指定できます。命名規則の詳細については、RFC 3722を参照してください(http://www.ietf.org/rfc/rfc3722.txtを参照)。この例では、3つの異なるブロックデバイスをエクスポートしています。最初のブロックデバイスは論理ボリューム(7.1項 「LVMの設定」も参照)、2番目はIDEパーティション、3番目はローカルファイルシステムで利用できるイメージです。これらはすべてiSCSIイニシエータへのブロックデバイスのようになります。

iSCSIターゲットを有効にする前に、Lun定義の後に、最低1つのIncomingUserを追加してください。このパラメータは、このターゲットの使用に対する認証を指定します。

変更内容を有効にするには、rcopen-iscsi restartコマンドを実行して、iscsitargetデーモンを再起動します。/procファイルシステムで、設定内容を確認してください。

cat /proc/net/iet/volume
tid:1 name:iqn.2006-02.com.example.iserv:systems
        lun:0 state:0 iotype:fileio path:/dev/mapper/system-v3
        lun:1 state:0 iotype:fileio path:/dev/hda4
        lun:2 state:0 iotype:fileio path:/var/lib/xen/images/xen-1

ここで説明しているほかにも、iSCSIターゲットの動作を制御するさまざまなオプションがあります。詳細については、ietd.confのマニュアルページを参照してください。

/procファイルシステムには、アクティブなセッションも表示されます。接続されている各イニシエータに対応するエントリが、/proc/net/iet/sessionに追加されます。

cat /proc/net/iet/session
tid:1 name:iqn.2006-02.com.example.iserv:system-v3
   sid:562949957419520 initiator:iqn.2005-11.de.suse:cn=rome.example.com,01.9ff842f5645
      cid:0 ip:192.168.178.42 state:active hd:none dd:none
   sid:281474980708864 initiator:iqn.2006-02.de.suse:01.6f7259c88b70
      cid:0 ip:192.168.178.72 state:active hd:none dd:none

ietadmを使ったオンラインターゲットの設定

iSCSIターゲットの設定を変更する必要がある場合、設定ファイルの変更内容を有効にするには、変更後にターゲットを再起動する必要があります。ただし、この作業を行うと、アクティブなセッションがすべて中断されます。この問題を回避するには、環境設定ファイルの/etc/ietd.confを変更すると同時に、ietadm管理ユーティリティを使って現在の設定も変更してください。

LUNを指定した新しいiSCSIターゲットを作成するには、まず設定ファイルを更新します。追加するエントリの例を以下に示します。

Target iqn.2006-02.com.example.iserv:system2
          Lun 0 Path=/dev/mapper/system-swap2
          IncomingUser joe secret

この設定を手動で行うには、次の手順に従ってください。

  1. ietadm --op new --tid=2 --params Name=iqn.2006-02.com.example.iserv:system2コマンドを実行して、新しいターゲットを作成します。

  2. ietadm --op new --tid=2 --lun=0 --params Path=/dev/mapper/system-swap2コマンドを実行して、LUNを追加します。

  3. ietadm --op new --tid=2 --user --params=IncomingUser=joe,Password=secretコマンドを実行して、このターゲットにユーザ名とパスワードを設定します。

  4. cat /proc/net/iet/volumeコマンドを実行して、設定内容を確認します。

アクティブな接続を削除することもできます。まず、cat /proc/net/iet/sessionコマンドを実行して、アクティブな接続を表示します。次のような情報が表示されます。

cat /proc/net/iet/session
tid:1 name:iqn.2006-03.com.example.iserv:system
        sid:281474980708864 initiator:iqn.1996-04.com.example:01.82725735af5
                cid:0 ip:192.168.178.72 state:active hd:none dd:none

セッションIDが 281474980708864のセッションを削除する場合は、ietadm --op delete --tid=1 --sid=281474980708864 --cid=0コマンドを実行します。このコマンドを実行すると、クライアントシステムからデバイスにアクセスできなくなるため、このデバイスにアクセスしているデバイスがハングアップする可能性があることに注意してください。

ietadmを使って、さまざまな環境設定パラメータを変更することもできます。グローバル変数を一覧表示する場合は、ietadm --op show --tid=1 --sid=0コマンドを実行します。次のような実行結果が表示されます。

InitialR2T=Yes
ImmediateData=Yes
MaxConnections=1
MaxRecvDataSegmentLength=8192
MaxXmitDataSegmentLength=8192
MaxBurstLength=262144
FirstBurstLength=65536
DefaultTime2Wait=2
DefaultTime2Retain=20
MaxOutstandingR2T=1
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
ErrorRecoveryLevel=0
HeaderDigest=None
DataDigest=None
OFMarker=No
IFMarker=No
OFMarkInt=Reject
IFMarkInt=Reject

これらのパラメータは、すべて簡単に変更することができます。たとえば、最大接続数を2に変更する場合は、ietadm --op update --tid=1 --params=MaxConnections=2を実行します。/etc/ietd.confファイルでは、このパラメータに対応する行がMaxConnections 2のように指定されています。

[Warning]ietadmによる変更に応じたietd.confファイルの更新

ietadmコマンドで行った設定の変更は、一時的なものです。/etc/ietd.conf設定ファイルに変更内容を追加しない限り、システムを再起動すると設定内容は失われます。ネットワーク上でのiSCSIの利用方法によっては、設定内容が失われることにより、問題が発生する可能性もあります。

ietadmコマンドでは、ほかにもさまざまなオプションを利用できます。オプションの概要を表示するには、ietadm -hコマンドを実行してください。また、省略形も利用できます。省略形には、ターゲットID (tid)、セッションID (sid)、および接続ID (cid)などがあります。これらの情報は、/proc/net/iet/sessionにもあります。