サーバの運用、またはコンピュータセンターの重要なタスクの1つには、サーバシステムに対してハードディスクスペースを提供することがあります。メインフレームセクターでは、ディスクスペースを提供するためにしばしばファイバチャネルが使われます。今まで、UNIXコンピュータや、他の主要サーバでは、このような集中ストレージソリューションは利用されていませんでした。
Linux-iSCSIは、Linuxコンピュータを集中ストレージシステムに接続するための、簡単で費用もあまりかからない手頃なソリューションです。基本的にiSCSIは、SCSIコマンドをIPレベルで転送することを表しています。プログラムがデバイスへの照会を開始すると、オペレーティングシステムが必要なSCSIコマンドを作成します。作成されたコマンドは、一般的にiSCSIイニシエータと呼ばれるソフトウェアにより、IPパッケージに組み込まれ、必要に応じて暗号化されます。次に、目的のiSCSIリモートステーションにパッケージが転送されます。リモートステーションは、iSCSIターゲットと呼ばれることもあります。
多くのストレージソリューションが、iSCSIによるアクセス手段を提供しています。また、LinuxサーバにiSCSIターゲットの役割をさせることもできます。この場合、ファイルシステムサービスが最適化されるようにLinuxサーバを設定する必要があります。iSCSIターゲットは、Linux中のブロックデバイスにのみアクセスします。そのため、RAIDソリューションを使ってディスクスペースを増やしたり、メモリを大量に搭載してデータキャッシュの性能を向上することができます。RAIDの詳細については、7.2項 「ソフトウェアRAID設定」も参照してください。
SUSEŽ Linux Enterprise Serverには、Ardis iSCSIターゲットから発展したオープンソースの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のモジュールを起動します。設定項目は、3つのタブに分かれています。[Service]リモートコンピュータからiSCSIターゲットにアクセスする場合は、を選択します。iSNSサーバでディスカバリとアクセス制御を管理する場合は、を有効にして、iSNSサーバのIPアドレスを入力します。ホスト名は有効なものでも使用できず、IPアドレスを使用する必要があることに注意してください。iSNSの詳細は、第13章 Linux向けiSNSの概要を参照してください。
[Global]ここで設定する認証方法は、サービスの検出に使用します。ターゲットにアクセスする場合のものではありません。ディスカバリへのアクセスを制限しない場合は、を選択します。
認証が必要な場合、2つの検討事項があります。まず、イニシエータは、iSCSIターゲットでディスカバリを実行するためのパーミッションがあることを証明できなければなりません。この設定は、で行います。もう1つは、iSCSIターゲットはイニシエータに、自分が正しいターゲットであることを証明しなければなりません。そのため、iSCSIターゲットもユーザ名とパスワードを使用できます。この設定は、で行います。認証の詳細は、RFC3720を参照してください(http://www.ietf.org/rfc/rfc3720.txtを参照)。
ターゲットは、タブで定義します。新しいiSCSIターゲットを作成するには、をクリックします。最初のダイアログでは、エクスポートするデバイスに関する情報を指定します。
[Target]
iqn.yyyy-mm.<reversed domain name>
この行は常に「iqn」から始まります。「yyyy-mm」の部分には、このターゲットをアクティブにする日付を指定します。命名規則の詳細については、RFC3722を参照してください(http://www.ietf.org/rfc/rfc3722.txtを参照)。
[Identifier]ただし、システムを体系的に管理するためにも、一定のスキーマを使用するようにしてください。
ターゲットに複数のLUNを割り当てることができます。そのためには、タブのターゲットを選択し、をクリックします。そこから、既存のターゲットに新しいLUNを追加します。
エクスポートするブロックデバイス、またはファイルシステムイメージのパスを追加します。
次のメニューでは、ターゲットへのアクセス制限を設定します。ここの設定は、ディスカバリの認証設定とほとんど変わりありません。この場合、少なくとも着信認証を設定する必要があります。
[次へ][Target]タブの概要ページが表示されます。変更内容を適用するには、をクリックします。
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
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
この設定を手動で行うには、次の手順に従ってください。
ietadm --op new --tid=2 --params Name=iqn.2006-02.com.example.iserv:system2コマンドを実行して、新しいターゲットを作成します。
ietadm --op new --tid=2 --lun=0 --params Path=/dev/mapper/system-swap2コマンドを実行して、LUNを追加します。
ietadm --op new --tid=2 --user --params=IncomingUser=joe,Password=secretコマンドを実行して、このターゲットにユーザ名とパスワードを設定します。
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のように指定されています。
![]() | ietadmによる変更に応じたietd.confファイルの更新 |
|---|---|
ietadmコマンドで行った設定の変更は、一時的なものです。 | |
ietadmコマンドでは、ほかにもさまざまなオプションを利用できます。オプションの概要を表示するには、ietadm -hコマンドを実行してください。また、省略形も利用できます。省略形には、ターゲットID (tid)、セッションID (sid)、および接続ID (cid)などがあります。これらの情報は、/proc/net/iet/sessionにもあります。