‘64bitLBA’ タグのついている投稿

FreeBSD iscsi-target MCS/64bitLBA/仮想DVD/仮想テープパッチ 2009/1/25版 for Microsoft iSCSI Initiator

2009年1月25日 日曜日

新リリース>istgt version 0.1 (20090222)

高速化の構想がちっとも進まないので気分転換にWindows7を入れてみようと思った!
でもWindows7がディスクレスインストールできないんです。
以前より大きいサイズでI/Oを行うようで。潜在的なバグに遭遇しちゃった(汗)
まぁ、これで ready for Windows7 になった(笑)

Windows7のiSCSIプロパティは詳細がすぐ見えて良い感じに。
MCSで動かしてるのがわかるし、ダイジェストの有無も確認できる。
パッチを作成した甲斐があるってものです。
でもあいかわらず2PBバリアはあるんですけどw
Vistaはぜんぜん興味わかなかったけど、今度のはいいかもね。
(自分がiSCSIディスクレスに興味を持ったのも一因だけど)

でわでわ、Windows7とディスクレス環境をお楽しみください。

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

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

手動でメディア制御コントローラーをインストールしてください。
これは仮想DVDやテープの取り出し交換などに使います。

# cp -p work/netbsd-iscsi-20080207/src/istgtcontrol /usr/local/bin/

設定例は以前の投稿をどうぞ。

既知の問題:
全体的なスループットがあまり良くない。

主な修正点:
type=disk:読み書きエラー時でも正常終了になる致命的バグを修正しました。
type=disk:MODE SENSEでより多くのデータを返すように追加しました。
データOUTフェーズのメモリリークを修正しました。
MaxBurstLengthを超えるサイズの書き込み要求が正しく処理出来なかったのを修正しました。
ステータスシーケンス番号エラーを修正しました。
まぎらわしいエラーメッセージを表示しないように修正しました。

☆Windows7のディスクレス環境でのスクリーンショット

MCSもダイジェストも簡単に分かるようになりました。

2PB以上のディスクはやっぱりマイナスにw

ディスクレスインストール直後のデバイスマネージャー

お約束の

FreeBSD iscsi-target MCS/64bitLBA/仮想DVD/仮想テープパッチ 2009/1/22版 for Microsoft iSCSI Initiator

2009年1月23日 金曜日

更新>MCS/64bitLBA/仮想DVD/仮想テープパッチ 2009/1/25版

ぐーぐる先生を使っていたらとあるサイトでiSCSIブートについて書かれていたので、
ちょっと自分でも試しにやってみたら、まったくできなかった(汗)
iSCSIブートのノウハウがまったくないのと現状のiscsi-targetだと
BIOS起動(iBFT)からの処理ができないと分かったので修正しました。
ブートデバイスの冗長化のやり方とかまだわからない事だらけです。

今回から書き込み方法を少し変更してみました。
書き込み時のレイテンシが多少は下がるはず。
そのかわり巨大なシーケンシャル書き込みは
当然パフォーマンスが少々落ちますけど、
ベンチマークぐらいしか気にならないと思う。
読み書きを交互にやらなきゃいけない状況で性能が伸びると思う。

パッチファイル: iscsi-target-20090122-patch.bz2
更新版をご利用ください。

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

手動でメディア制御コントローラーをインストールしてください。
これは仮想DVDやテープの取り出し交換などに使います。

# cp -p work/netbsd-iscsi-20080207/src/istgtcontrol /usr/local/bin/

設定例は以前の投稿をどうぞ。

主な修正点:
DISKタイプのINQUIRYでエラーコードを正しく返せないバグを修正しました。
マルチパス用のいらない残骸があったのを外しました。
istgtcontrolがクオート文字をそのまま送るバグを修正しました。
書き込みデータセグメントを全部受信する前にメディアに書き込みを
実行するように変更しました。
仮想ディスクのロック方式を仮想DVDや仮想テープと同じに変更しました。
イニシエーターとターゲットポートを厳密に保存するようになりました。
Intel iSCSI Boot(ディスクレスインストール)に一部対応しました。

FreeBSD iscsi-target MCS/64bitLBA/仮想DVD/仮想テープパッチ 2009/1/17版 for Microsoft iSCSI Initiator

2009年1月18日 日曜日

更新>MCS/64bitLBA/仮想DVD/仮想テープパッチ 2009/1/22版

仮想デバイスの構想一ヶ月、メディアの交換が正常にできずに悩むこと一週間あまり、やっと動くようになったので公開します。
記念すべき今年初のリリースです。
何か要望とかあればブログコメントでもメールでも構わないのでよろしくお願いします。

マルチパスの対応は都合によりしばらく凍結します。
またZFS/IPv6/64bitLBA以外の問題は後回しにします。
当面仮想デバイスの開発調整を最優先事項とします。
とりあえず実行速度よりロジック優先で作成してあります。
まずは仮想CD/DVDROMと仮想テープドライブ(DLT8000を想定)をリリースします。
現時点でバックアップリストアの基本動作確認のとれたソフトは

Windows 2000 Sever SP4 添付のWindowsバックアップ
Windows Server 2003 R2 添付のWindowsバックアップ
Symantec BackupExec 12.5 for Windows Server
FreeBSD 7.x の tar/mt コマンド
GNU tar 1.20 マルチボリューム

BackupExecに関してはiSCSI接続後にホットスワップ対応デバイスウィザードを
実行する事によりデバイスプールに追加できます。

※注意事項※
DLT8000が解釈できないコマンド類はエラーとしてsyslogに記録されますがテープの動作は行います。
現在の所、制御ポート経由(telnet等)で任意のターゲットのメディア操作が出来てしまいます。

それにしてもサイズがすんごい大きくなった。
パッチ元はFreeBSDで利用されてないコードを含めても2万行もないのに
仮想DVDと仮想テープドライブ対応だけで9千行を超えてサイズも500kに達してる。
もはやパッチレベルの範疇を超えてる気が。

そして、インストールテスト中に気が付いたけど制御コマンドのインストールとか
まったく考えてなかった(涙)とりあえず手動コピーでよろしく。

今後の予定もとい導入したほうがよさそうな事?
☆メディア制御をもうすこし賢い方法にする。
☆SCSIパススルーデバイスを追加する。
☆USBメモリ等のリムーバブルデバイスにも対応する。
☆デバイスのホットスワップに対応する。
☆複数のメディアスロットをサポートする。
☆複数イニシエータからの接続を可能にする。
☆マルチパスを考慮する。

パッチファイル: iscsi-target-20090117-patch.bz2
更新版をご利用ください。

# cd /usr/ports/net/iscsi-target
# make clean
# make patch
# bzcat < /path/to/iscsi-target-20090117-patch.bz2 | patch -p0
# make
# make install
#
# cp -p work/netbsd-iscsi-20080207/src/istgtcontrol /usr/local/bin/
#

手動でメディア制御コントローラーをインストールしてください。
これは仮想DVDやテープの取り出し交換などに使います。

設定例は以前の投稿をどうぞ。

新しい機能:
targetsファイル内のlengthカラムで加減算で一個だけ追加指定できます。
ZEPTGMKのサフィックスも合わせて利用できます。
1023MBの指定例: 1GB-1MB (=1024MB-1MB=1023MB)
1025MBの指定例: 1GB+1MB (=1024MB+1MB=1025MB)

targetsファイル内の各targetにデバイス固有値を指定できます。
type 仮想デバイスのタイプ
 disk SBC-2準拠 Direct access block device
 dvd  MMC-4準拠 CD/DVD device (現在はRead系のみ)
 tape SSC-2準拠 Sequential-access device
id 仮想デバイス識別子
 1~2147483647(重複不可)

省略時はtype=disk,id=自動採番(0×0100~)と解釈します。
現時点ではidは装置シリアル番号の下位4桁に利用しています。省略可能です。

targetsファイルでリムーバブルメディアを定義できます。
type メディアタイプ
 iso ISOイメージ
 tape 仮想テープイメージ
flags メディアフラグ
 rw 読み書き用とします。
 ro 読み込み専用とします。(ライトプロテクト状態でイニシエータに応答)
 extend メディアの末尾まで書き込みした場合に可能であれば256MB単位で拡張します。
 dynamic メディアの書き込み状況に応じて可能であれば拡大縮小します。

メディアを読み書き用にしてもtarget指定がroならば書き込み不可能です。
メディアサイズの拡大縮小はtype=tapeのみサポートします。
dynamicを指定した場合はメディアの長さ指定は意味がありません。
現時点ではidカラムは特に利用していません。省略可能です。

※targetsの書式は将来変更する可能性があります

# mcs extra style
#
# media         type    id      flags           file                    length
#
media31         iso     1       ro              /tank/iscsi/dvds/7.1-RELEASE-i386-disc1.iso auto
media41         tape    41      rw              /tank/iscsi/tapes/41    20GB
media42         tape    42      rw,extend       /tank/iscsi/tapes/42    40GB
media43         tape    43      rw,dynamic      /tank/iscsi/tapes/43    auto
#
# target        type    id      flags           storage         netmask
#
target2         disk    2       rw              extent2         192.168.2.0/24
target3         dvd     3       ro              media31         192.168.2.0/24
target4         tape    4       rw              media41         192.168.2.0/24
#

制御用ポートとしてiSCSIターゲットポートの次の番号でオープンするようになりました。
デフォルトのiSCSI標準ポートは3260なので制御ポートは3261になります。

既知の問題:
iSCSIで接続しても正常に通信出来ずにPnPデバイスとして認識しない事があります。
(一度iSCSI接続をログアウトして再接続すると認識されます)
仮想テープの入出力にエラーが発生した場合、以後の書き込みができない可能性があります。
(メディアを一旦取り出して再挿入すると認識するかもしれない)
極端に小さい論理ブロック長でテープに大量に書き込むと論理ブロック数が不足する可能性があります。
(内部的には64ビットですが現時点の対応ポジション変更系コマンドが32ビットなので)
メディア交換した直後にエラーなどが発生する可能性があります。
(ターゲットから非同期通信を行わない為、イニシエータがポーリングするまで内部情報が変化しない)
メディア制御用のセキュリティが特に考慮されていない。
メディア制御用コマンド istgtcontrol が自動でインストールされない。

いわゆる仕様:
仮想デバイスは利用時(コマンド実行時)ロックのみでリザーブ・リリースに対応していない。
(複数イニシエータからはもちろん、単機のマルチパス接続も想定していない)
仮想デバイスのホットスワップには対応していない。
テープドライブの圧縮機能は実装していない。
単一の書き込みメディアを複数の仮想デバイスに装着した場合の動作は未定義。
メディアのアンロードを行ってもメディアスロット内に残留するので次のロードで再セットされる。
動的仮想テープのハードリミット(最大サイズ)が16EBの固定になっている。
1本の仮想テープでは最大1024個のファイルマーク(BOT/EOTを含む)に限定される。

主な修正点:
LUNの計算を間違えていたのを修正しました。
違うターゲットに接続した場合に誤ってエラーが記録されるのを修正しました。
MODE SELECT(10)が正常に動かないのを修正しました。
MODE SENSE(6)(10)がショートモードで正しいブロック数を返さないのを修正しました。
数値指定で加減算表記をできるように変更しました。
マルチターゲット仕様のために内部データ構成を変更しました。
tagetsファイルの定義を拡張しました。
SCSIエラー時にセンスキーやASC/ASCQを返すようになりました。
SSC2/MMC4のデバイスエミュレーションに対応しました。
オーバーフローとアンダーフローをiSCSI PDUに返すように修正しました。
メディアの拡大縮小を考慮するように変更しました。
パッチ元のオリジナルに存在するバグを多数修正しました。
メディア制御用スレッドを新設しました。
スレッドの作成結果を調べていないバグを修正しました。
メディア制御コマンドが新設されました。

~メディア制御のしかた~
まず、制御対象がローカルホストであり、上記の設定がされていると仮定すると、
target3のDVD装置にはメディアスロットmedia31が付いていて、
/tank/iscsi/dvds/7.1-RELEASE-i386-disc1.iso が挿入されている状態になります。

このメディアを排出するにはOS上から取り出しを実行するか、以下のコマンドで行います。
(コマンド行が長いので複数行に書きますが実際は一行です)

# istgtcontrol -t iqn.1994-04.org.netbsd.iscsi-target:target3 -m media31 unload

この状態はトレイ式DVDドライブのトレイが開いた状態に相当します。(メディア変更なし)
以下のコマンドでトレイを閉めると同じメディアが読み込みされます。

# istgtcontrol -t iqn.1994-04.org.netbsd.iscsi-target:target3 -m media31 load

メディア自体を交換するにはファイルを指定します。追加でフラグとサイズも指定できます。

# istgtcontrol -t iqn.1994-04.org.netbsd.iscsi-target:target3 -m media31 -f ro -s auto change /tank/iscsi/dvds/7.1-RELEASE-i386-disc2.iso

ここで指定するファイル名は制御ターゲットサーバにある実際のパスです。
今のところリモートメディアをマウントする事はできません。
フラグとサイズの省略時はrwとautoになります。
空白文字を含むファイル名はもちろんクオートしてください。

このコマンドを実行すると現在のメディアをunloadしてメディアを交換した後に
loadするという一連の作業を排他ロックをかけた状態で行います。
不幸にしてロードに失敗した場合は可能ならunload状態で終了します。
成功するにしても失敗するにしてもコマンドが終了するまではOSなどからアクセスはできません。

現在のメディア状態をみるには、以下のコマンドを使います。

# istgtcontrol -t iqn.1994-04.org.netbsd.iscsi-target:target3 -m media31 list

実行例:

# istgtcontrol -t iqn.1994-04.org.netbsd.iscsi-target:target3 -m media31 list
iqn=iqn.1994-04.org.netbsd.iscsi-target:target3, slot=media31
media file=NULL, flags=rw, size=auto
connect to localhost:3261
target banner "iSCSI Target Controller version 20090117 on ::1 from ::1"
slot1 present unlock media31 iso 1 ro "/tank/iscsi/dvds/7.1-RELEASE-i386-disc1.iso" auto
DONE LIST command

以上の操作をリモートから実行するには -h オプションでターゲットホストを指定します。

あけましておめでとうございます

2009年1月1日 木曜日

新年あけましておめでとうございます。
今年もよろしくお願いいたします。

昨年を振り返ってみると、Hyper-Vのパッチを公開してからアクセスが急激に伸びました。
FreeBSDでも興味ある人はそこそこいるのだなと(笑)
むろん海外からもアクセスされるようになったのも一因でしょうけど、
こんな場所でもアクセスして頂けるのはありがたい。
↓統計はこんな感じ。ちなみに検索キーワードはfreebsd,iscsi,hyepr-v,zfsとなってました。

そのHyper-Vによってテスト環境構築の手間がすごい削減されました。
VirtualServerに幻滅していただけにちょっとだけ見直した。
ZFSとかもっと触りたかったのだけど後半はiSCSIパッチだけに集中していたので、
あまりできなかった。残念。↓去年解決できなかった機能のスクリーンショット。

リームバブルメディアをどうやって簡単に出し入れするのかとか、
一度挿入されたメディアは不測の再起動でも永続的に使えるようにするとか、
考慮することが多すぎて(略)
この機能をなんとする為に複数動かせるように改造してたり(笑)
Hyper-VでのVM用のシステムディスク領域には20081225パッチ版でのMCS接続で安定して動いています。
上記画像の2003自体もこのiSCSIディスク上に容量可変で構築してあります。

今年も引き続きiSCSIとZFSを中心に活動していけたらと思います。

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

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

2008年12月24日 水曜日

更新>MCS/MPIO/64bitLBAパッチ 2008/12/25版

iscsi-targetの内部構造もだいぶ理解できたので、
簡易同期機能を廃止してまともに追従するようにしてみました。

パッチファイル: iscsi-target-20081223-patch.bz2
更新版をご利用ください。

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

設定例は以前の投稿をどうぞ。

主な修正点:
メディアの境界チェックが甘かったのを修正しました。
ソースコードの切り分け定義名を変更しました。
従来のMCS簡易同期機能を廃止してより正確に追跡するようになりました。
再接続時にクラッシュする事があったのを修正しました。

FreeBSD/ZFSでPB(ペタバイト)ファイルをiSCSIに使ってHyper-Vで利用してみる

2008年12月22日 月曜日

PBとはなんぞと言うとただの単位です。
1PB=1024TBとテラバイトのひとつ上の単位です。
当然というか現時点でそんなアレイはそうそうないので、
スパースファイル(穴あきファイル)を使います。
さらにZFS圧縮をオンにして急激にデータが増えた場合に死に難くしました。

# zfs create -o atime=off -o compression=on tank/iscsiz
# zfs create -o atime=off -o compression=gzip-9 tank/iscsiz9

# extents       file                            start   length
extent0         /tank/iscsiz/istgt-test-2PB-1MB 0       2147483647MB
extent1         /tank/iscsiz9/istgt-test-1EB    0       1EB
extent2         /tank/iscsiz9/istgt-test-1PB    0       1PB
extent3         /tank/iscsiz9/istgt-test-2PB    0       2PB
extent4         /tank/iscsiz9/istgt-test-256PB  0       256PB
extent5         /tank/iscsiz9/istgt-test-2TB    0       2TB
extent6         /tank/iscsiz9/istgt-test-200GB  0       200GB
#

今回はターゲットの設定を上記のように行い、
WS2008(64ビット版)に持ってきました。

ディスクの初期化では必ずGPTを指定します。
そうしないと2TB止まりなので。
パーティションを作成するのですが、GUIの作成ウィザードが
MB単位で要求してくるからGB以上の計算をするのがめんどくさい。
今は単一ユニットで1TBの時代だから、
そろそろGB単位で指定してもよいのではとか思ったり。
続いてNTFSフォーマットですが、
アロケーションユニットを64Kに明示しないと失敗します。

Windows Server 2008 64ビット版で作成できるNTFS最大サイズは268435455MBです。
これは256TB(=268435456MB)-1MBですね。
試してみると2PB以上はあきらかに表示がおかしい。
よくよく見てみると、MB単位の表示部分が符号付き32ビットじゃないのだろうか(汗)

  

現状だとこうなる↓
GUI上の最大ディスクサイズ 2147483647MB (=2PB-1MB)
NTFS最大サイズ 268435455MB (=256TB-1MB)

#数値の計算はFreeBSD上でbcを使って行いました

さて、256TB-1MBをクイックフォーマットしたらすぐに戻ってこない。
さすがにかなり時間かかるものなのね。
接続して認識するまでだけでもデバッグログが4GB超えちゃう(汗汗)
メモリ8GBとかぜんぜん足りないいいいいいいっ。
正常マウントするのに約1分かかります。
2PBに比べたら2TBのディスクとかはかわいいものですね(笑)

さらにHyper-V用に1024GBの仮想イメージを作成する。
容量固定1TBを作成しました。
作成時間はおよそ6時間ぐらい。
スループットにして3GB/min, 50MB/secぐらいか。

作成した時の環境は
FreeBSD 7.1(2008/12/14に取得) ZFS 圧縮ON、
データ・ヘッダダイジェスト共に有効、
2本のMCSラウンドロビン接続(+管理用1本の計3系統)
(それぞれのLANにNETGEAR GS116を配備)
この時のCPU使用率はだいたい15~20%ぐらい。

  

作成できたらHyper-Vに設定してFreeBSD 7.1 RC1 amd64を導入します。
DHCPが・・・というコメントを頂いたので、
今回はDHCPでセットアップしてみました。

Hyper-Vマネージャでレガシーネットワークアダプタを追加して、
上記で作成した仮想HDDを追加して、仮想マシンを起動!
FreeBSDのネットワークの設定ではExtra Options to ifconfigの欄に
media 100baseTX mediaopt full-duplex
といれます。

インストール後のリセットで停止するのでタスクマネージャから終了させて、
自作パッチを適用する。
(このあたりの手順については以前の投稿1投稿2をご覧くださいな)

FreeBSDに限って言えばVirtualServerやVirtualPCと比べるとHyper-Vの方が
だいぶ安定している感じがします。
というかVirtualServerがダメダメすぎる。
個人的印象は Hyper-V > VirtualPC >>> VirtualServer

インストールが終わったら、portsnap fecth/extractで最新portsにして
mgとかbashとかちょこっと入れてみた。
他にもいろいろやっていたらiscsi-targetが死んでしまった(汗)
ああっ、バグありますね。はい。ごめんなさいZzz。

[root@pb ~]# uname -a
FreeBSD pb.peach.ne.jp.private 7.1-RC1 FreeBSD 7.1-RC1 #0: Mon Dec 22 19:10:59 J
ST 2008     root@pb.peach.ne.jp.private:/usr/obj/usr/src/sys/GENERIC  amd64
[root@pb ~]# ifconfig -a
de0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 00:15:5d:02:21:1f
        inet 192.168.2.166 netmask 0xffffff00 broadcast 192.168.2.255
        media: Ethernet 100baseTX <full-duplex>
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
[root@pb ~]# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    989M    412M    498M    45%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ad0s1e    989M    1.7M    908M     0%    /tmp
/dev/ad0s1f     19G    1.9G     16G    11%    /usr
/dev/ad0s1g    959G     58M    882G     0%    /usr/local
/dev/ad0s1d    7.7G     76M    7.1G     1%    /var
[root@pb ~]#

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

2008年12月22日 月曜日

更新>MCS/MPIO/64bitLBAパッチ 2008/12/25版

IPv6のリンクローカルアドレスで接続した場合も処理できるようになりました。
複数のiscsi-targetを起動した場合でも使えるように、
認証ファイル及びPIDファイルを個別に指定できるようになりました。
認証なしで探索もできないモードをつけてみました。
64ビットLBAを用いて最大8ZB(2^64(16E)x512B)まで対応できるようになりました。
(FreeBSD7.1/i386においては符号付64ビット処理の関係で実質8EBが限界)
いまのところZFS以外のファイルシステムをサポートする予定はありません。
ゼタバイト~ヨタバイトのファイルが問題なく作れるようになったら考えるかも?

Windowsで2TB以上のデバイスを利用する場合はGPTが必要になるので、
Windows Server 2003以降またはWindows Vistaが必要です。
2TB以上でブートするには64ビット版 Windows Server 2008または
64ビット版 Windows Vistaが必須ですが未確認です。
Windows 2000やWindows XPで利用する場合は2TB(2097152MB)
未満にします。

~参考URL~
MS WHDC:GPT ドライブを使用する
http://www.microsoft.com/japan/whdc/device/storage/GPT-on-x64.mspx

MS TechNet:GUID パーティション テーブル
http://technet.microsoft.com/ja-jp/library/cc773223.aspx

MS Support:1 ボリュームのサイズが 2 TB 以上のシステム パーティションから Windows Vista を起動できない
http://support.microsoft.com/kb/946557/ja

MS Support:Windows Server 2003、Windows XP、および Windows 2000 で Diskpart.exe を使用してデータ ボリュームを拡張する方法
http://support.microsoft.com/kb/325590/ja

2TB以上のデバイス利用時の注意点:
現時点のWindows Server 2008はGUI上の表示が2147483648MBに
制限されます。
これは2PB(=2048TB)に相当します。
2PB以上のデバイスはdiskpartコマンドラインユーティリティで動くようですが
未確認です。

パッチファイル: iscsi-target-20081221-patch.bz2
更新版をご利用ください。

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

設定例は以前の投稿をどうぞ。

新しいコマンドラインオプション:
-A Discoveryセッションにも認証を強制する(デフォルトなし)
-a <path> 認証用データファイル(デフォルト /usr/local/etc/iscsi/auths)
-i <path> 作成するPIDファイル(デフォルト /var/run/iscsi-target.pid)

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

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

リンクローカル設定例:
実際に設定する場合はifconfigでアドレスを確認すること。
/etc/rc.conf

ipv6_enable="YES"
iscsi_target_enable="YES"
iscsi_target_flags="-s 32 -C 8 -P '192.168.2.36;[fe80::290:ccff:fee9:48c9]'"

/usr/local/etc/iscsi/targets

# extents       file                            start   length
extent0         /tank/iscsi/iscsi-target0       0       80GB
# target        flags           storage         netmask
target0         rw,digest       extent0         192.168.2.0/24;[fe80::%em0]/10

既知の問題:
長時間ターゲットからの応答がないとWindowsがクラッシュすることがあります。

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

主な修正点:
オリジナルのバグを修正しました。
Discoveryセッションに認証を強制するオプションを追加しました。
リセットが必要ない場所でリセットしていたので修正しました。
リンクローカルアドレスを処理するように修正しました。
認証ファイル及びPIDファイルを指定できるように修正しました。
LOパラメータを維持できるように修正しました。
LBA4294967040以降にアクセスできない問題を修正しました。
SCSIコマンドのMODE SELECT(6)に応答するようにしました。
SCSIコマンドのMODE SELECT(10),MODE SENSE(10)に応答するようにしました。
SCSIコマンドのREAD CAPACITY(10)をLongLBAに対応しました。
SCSIコマンドのREAD CAPACITY(16)に応答するようにしました。
SCSIコマンドのSYNC CACHE(16)に応答するようにしました。
SCSIコマンドのREAD(12),WRITE(12),WRITE VERIFY(12)に応答するようにしました。
SCSIコマンドのREAD(16),WRITE(16),WRITE VERIFY(16)に応答するようにしました。
ストレージ容量定義にZEPの単位を追加しました。
コンフィグファイルでクォートを解釈するようになりました。