TGT iSCSI ターゲット
関連記事
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