TGT iSCSI ターゲット

提供: ArchWiki
移動先: 案内検索

TGT SCSI フレームワーク は複数のストレージプロトコルで使うことができます。このドキュメントでは iSCSI ターゲットとして TGT を使用する方法を説明します。

TGT について

STGT は2006年の末に藤田智成氏によって Linux カーネルに導入されました。カーネル内のターゲットドライバーを補助するライブラリがカーネルに存在します。ターゲットの処理は全てユーザー空間で行われます。2010年の終わりには、カーネル内の SCSI ターゲット実装としての STGT を置き換えるものとして LIO プロジェクトが採択されました。LIO で STGT を置き換えることが決まった時、STGT のユーザー空間モジュールが機能し続けるように LIO が実装されたため、STGT コミュニティはカーネルに含まれた LIO をサポートし続けています。

メリット:

  • 活発に開発されています。
  • シンプルな仕組み。
  • イーサネット NIC による iSCSI, iSER, IBM pSeries の仮想 SCSI ターゲットドライバーをサポート。
  • 仮想ディスク, DVD, VTL, RADOS ブロックデバイス (rbd) をサポート。
  • SCSI UNMAP をサポート。

欠点としては、ターゲットの処理がユーザー空間で行われるために、場合によってパフォーマンスのボトルネックとなると一部の開発者やユーザーは主張しています。しかしながら、'aio' タイプの LUN を使うことで飛躍的にパフォーマンスを高めることができます。AIO は電源喪失に対して備えがある環境でのみ使用できます。

インストール

tgtAUR パッケージをインストールしてください。ダイレクトストアを使いたい場合、sg3_utils パッケージもインストールしてください。

ダイレクトストアを使うことで、物理デバイスのプロパティをイニシエータやターゲットから使えるようになります。

ファイアウォールを使用している場合、TCP の 3260 番ポートを開ける必要があります。

設定

設定は以下の方法で行うことができます:

  • tgtadm ユーティリティを使用して tgt-admin --dump で設定を保存する。tgt-admin/etc/tgt/targets.conf を読み込んで tgt を設定する Perl スクリプトです。TGT ウェブサイト からリンクされている Scsi-target-utils クイックスタートガイド を見てください。
  • /etc/tgt/targets.conf ファイルを編集する。STGT では複数の設定を使うことができます。メインの設定ファイルから他の設定ファイルを読み込んでください: include /etc/tgt/*.conf
  • 手動で設定する:

ターゲットを作成:

# tgtadm --lld iscsi --op new --mode target --tid <unique target ID> -T <unique iSCSI iqn>

特定のイニシエータからの接続だけを許可する:

# tgtadm --lld iscsi --op bind --mode target --tid <target ID> --initiator-name <initiator IQN>

あるいはイニシエータの IP を指定する:

# tgtadm --lld iscsi --op bind --mode target --tid <target ID> --initiator-address <initiator IP>

ターゲットに LUN をマップする:

# tgtadm --lld iscsi --op new --mode logicalunit --tid <target ID> --lun <unique LUN ID> -b /path_to/lun.img

LUN の ID はゼロ以外の10進数の数字にしてください。LUN 0 はターゲットコントローラ用に予約されています。

ESXi の場合、LUN に永続的な LUN ID をマップすることがとても重要です。ストレージシステムの LUN の ID が変わってしまうと、ESXi は自動的に再マウントすることができず、PDL 状態になります。再起動しても変わらない LUN ID を定義するためにバッキングストアではなくダイレクトストアを使ってください。

現在の設定を確認する:

# tgtadm --op show --mode target --tid <target ID>
MaxRecvDataSegmentLength=8192
HeaderDigest=None
DataDigest=None
InitialR2T=Yes
MaxOutstandingR2T=1
ImmediateData=Yes
FirstBurstLength=65536
MaxBurstLength=262144
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
ErrorRecoveryLevel=0
IFMarker=No
OFMarker=No
DefaultTime2Wait=2
DefaultTime2Retain=20
OFMarkInt=Reject
IFMarkInt=Reject
MaxConnections=1
RDMAExtensions=Yes
TargetRecvDataSegmentLength=262144
InitiatorRecvDataSegmentLength=262144
MaxOutstandingUnexpectedPDUs=0
MaxXmitDataSegmentLength=8192
MaxQueueCmd=128

設定を保存:

# tgt-admin --dump > /etc/tgt/targets.conf

設定をリロード:

# tgt-admin --update ALL

上記のコマンドは使用していないターゲットだけを更新します。使用中のターゲットも更新するには '--force' を使ってください。

設定例

<target iqn.2004-01.nl.xtg:iscsi-server1>
 direct-store /dev/sdb
 write-cache on
 initiator-address ALL
 incominguser user password
 scsi_id 00010001
 vendor_id XTG
 lun 12
</target>
MaxRecvDataSegmentLength 131072
MaxXmitDataSegmentLength 131072
MaxBurstLength 262144
FirstBurstLength 262144
TargetRecvDataSegmentLength=262144
InitiatorRecvDataSegmentLength=262144
MaxOutstandingUnexpectedPDUs=0
MaxOutstandingR2T=1
MaxCommands=128

上記の設定では /dev/sdb が LUN 12 にマッピングされ CHAP 認証が設定されます。また、iSCSI の高度なパラメータ をいくつか使っています。

起動

STGT は tgtd.service ユニットで起動有効化できます。

以下のコマンドで正しく動作しているかどうか確認することが可能です:

# tgt-admin -s

参照