‘仮想デバイス’ タグのついている投稿

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 オプションでターゲットホストを指定します。