2008年12月25日 のアーカイブ

FreeBSD iscsi-target MCS/MPIO/64bitLBAパッチ 2008/12/25版 for Microsoft iSCSI Initiator

2008年12月25日 木曜日

機能UP更新>MCS/64bitLBA/仮想DVD/仮想テープパッチ 2009/1/17版

今年最後のパッチリリースです。
ただいま将来の拡張に向けていろいろ準備中です。
ライトキャッシュの操作を揮発性(iscsi-targetを終了するまで)ですが
変更できるようになりました。

パッチファイル: iscsi-target-20081225-patch.bz2

# cd /usr/ports/net/iscsi-target
# make clean
# make patch
# bzcat < /path/to/iscsi-target-20081225-patch.bz2 | patch -p0
# make
# make install

新しいコマンドラインオプション:
-C 同一ターゲットへの接続コネクション数(デフォルト8)
-P 接続可能なポータルのIPアドレス(セミコロン区切り)
-A Discoveryセッションにも認証を強制する(デフォルトなし)
-a <path> 認証用データファイル(デフォルト /usr/local/etc/iscsi/auths)
-i <path> 作成するPIDファイル(デフォルト /var/run/iscsi-target.pid)

※IPv6で指定する場合は[]付きでIPv6アドレスを書きます。

新しい機能:
64ビットLBAを用いて最大8ZB(2^64(16E)x512B)まで対応できます。
いまのところZFS以外のファイルシステムをサポートする予定はありません。
2TB以上はGPT(GUIDパーティションテーブル)を使えるOSが必要です。

認証ファイル及びPIDファイルを個別に指定し複数のポートで起動できます。

認証なしで探索(Discovery)セッションを通さないモードが選択できます。

MCS(Multiple Connections per Session)機能により複数コネクションで
同一のターゲットに接続可能になります。

ダイジェスト機能(CRC32によるデータチェック)を有効にできます。
データダイジェスト=ディスクへの読み書きデータなどに有効。
ヘッダダイジェスト=iSCSIプロトコルヘッダに有効。

targetsファイル内のネットマスクをセミコロン区切りで複数指定できます。
ネットマスク指定で/以降を省略するとIPv4は/32、IPv6は/128とみなします。

targetsファイル内のflagsカラムにターゲット接続(ログイン)時の
認証とダイジェストを強制するフラグを指定できます。

auth          認証を必要とします。
digest        データおよびヘッダダイジェストを必要とします。
headerdigest  ヘッダダイジェストを必要とします。
datadigest    データダイジェストを必要とします。

targetsファイル内のsizeカラムにペタバイト、エクサバイト、ゼタバイトの
短縮形としてP, E, Zが利用できます。
それぞれ、PB=1024TB, EB=1024PB, ZB=1024EBとして計算されます。

targetsファイル内でクォート文字(“と’)により空白文字を
文字列の一部として扱えます。

認証情報は/usr/local/etc/iscsi/authsに書きます。
Microsoft iSCSI Initiator が相手の場合はシークレットを
12文字以上16文字以下で指定します。

相互認証を有効にできます。
認証情報は/usr/local/etc/iscsi/authsに書きます。
相互認証キー(ユーザ名)はターゲットのIQNになります。

IPv6のリンクローカルアドレスでの接続を考慮します。

いわゆる仕様:
全てのIPアドレスが同じポート番号でグループ1のネットワークポータルになります。
ポート番号は従来の-pオプションで変更可能ですがグループ番号は固定です。
ダイジェストエラーになった場合にTCP接続の強制終了を第一選択肢にする。
デバイスの最大容量(LBA)が符号付64ビット(2^63=8EB)に制限されています。

主な修正点:
SCSIのライトキャッシュを切られたらO_FSYNCを設定するように修正しました。
シグナル処理用スレッドを新設しました。(処理は未実装)
SIGTERM/SIGINTに対してシャットダウン処理を行うように修正しました。

~参考設定~
ターゲットにはしばらくブログに書いてきたExpress5800/110Ge
Intel PRO 1000/PT Desktop Adapter を増設して利用しました。
ホストはWindows Server 2008に同型カードを挿しました。
それぞれのカードのIPアドレスを別のネットワークにして、
スイッチングハブをそれぞれに独立して接続します。
(参考設定ではIPv4に192.168.2.0/24と192.168.3.0/24を、
IPv6に2001:380:e00:42::/64をルータ広告で利用)

ターゲット側(FreeBSD 7.1):
/etc/rc.conf

ifconfig_em0="inet 192.168.3.36  netmask 255.255.255.0"
ifconfig_em1="inet 192.168.2.36  netmask 255.255.255.0"

ipv6_enable="YES"
iscsi_target_enable="YES"
iscsi_target_flags="-s 32 -C 8 -P '192.168.2.36;192.168.3.36;[2001:380:e00:42:21f:d0ff:fe16:38bd]'"

/usr/local/etc/iscsi/targets

# extents       file                            start   length
extent0         /tank/iscsi/iscsi-target0       0       80GB
extent1         /tank/iscsi/iscsi-target1       0       80GB
extent2         /tank/iscsi/iscsi-target2       0       80GB
# target        flags           storage         netmask
target0         rw,auth         extent0         192.168.2.0/24
target1         rw,digest       extent1         192.168.2.33;129.168.3.33/32;[2001:380:e00:42:a957:4bf:58e0:bedc]/128
target2         rw,auth,headerdigest extent2    192.168.2.0/24;129.168.3.0/24

/usr/local/etc/iscsi/auths

# CHAP secret
# name:type:secret
iqn.1991-05.com.microsoft\:ceres:CHAP:1234567890123456
#

ホスト側(Windows Server 2008):
オンボードLANに192.168.2.33/24を、
Intel PRO 1000/PTに192.168.3.33/24を割り当てました。
ここではIPv4による画像のみ掲載しますがIPv6でも同様に接続できます。

ターゲットへログオンするときに[詳細設定]でローカルアダプタ、ソースIP、
ターゲットポータルを指定します。

 

必要に応じてダイジェストにチェックを付けて有効にします。
(指定しなくてもターゲット側で強制していれば自動的に有効になります)

接続に認証が必要な場合は指定します。

相互認証が必要な場合は、予め双方に設定した上で指定します。

接続できたら、[詳細]でターゲットのプロパティを開きます。
セッションタブの[接続]を押します。

[追加]を押します。

ソースIP、ターゲットポータルを別のものを指定します。

必要に応じてダイジェストおよび認証を指定します。

負荷分散ポリシーを適当に変更します。

~相互認証の参考設定~
相互認証を実施するにはイニシエータにシークレットを設定して、
その設定をターゲット側にも設定します。
(通常のCHAPシークレットの設定も必要です)
認証ファイルの検索キー(ユーザ名)はターゲットのIQN(iSCSI Qualified Name)に固定されています。

ターゲット側(FreeBSD 7.1):
相互認証データは通常の認証ファイルと同じになっていますので、
追加して書きます。

/usr/local/etc/iscsi/auths

# mutual authentication
# name:type:secret
iqn.1994-04.org.netbsd.iscsi-target\:target1:CHAP:testchaptest1234
#

イニシエータ側(Windows Server 2008):
iSCSIイニシエータのプロパティで全般タブの[シークレット]を押します。

12文字以上16文字以下でシークレットを設定します。

~2TB以上の容量~
Windows Server 2003以降またはWindows Vistaが必要です。
Windows 2000やWindows XPで利用する場合は2TB(2097152MB)未満にします。

大容量ドライブの利用についてはこちらも参照してください。
http://shell.peach.ne.jp/aoyama/archives/191