まずサーバーマネージャの機能の追加からマルチパスI/Oをインストールする。
iSCSIイニシエータで通常の接続を行う。
管理ツール(スタートメニュー等)からMPIOを起動する。
「マルチパスの検出」タブを選択する。
「iSCSIデバイスのサポートを追加する」のチェックボックスにチェックをいれて「追加」を押す。
再起動を要求されるので再起動します。
以上でiSCSIイニシエータを使ったマルチパス機能が有効になります。
デバイスのプロパティにMPIOタブが表示されるようになります。
まずサーバーマネージャの機能の追加からマルチパスI/Oをインストールする。
iSCSIイニシエータで通常の接続を行う。
管理ツール(スタートメニュー等)からMPIOを起動する。
「マルチパスの検出」タブを選択する。
「iSCSIデバイスのサポートを追加する」のチェックボックスにチェックをいれて「追加」を押す。
再起動を要求されるので再起動します。
以上でiSCSIイニシエータを使ったマルチパス機能が有効になります。
デバイスのプロパティにMPIOタブが表示されるようになります。
新リリース>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のディスクレス環境でのスクリーンショット
とりあえずWindows Server 2003と2008で確認しました。
WS2003で利用したもの:
Intel PRO/1000 PT Server Adapter 2個
(追記:Server Adapter + Desktop Adapter の構成でもできました)
iscsi-target 20090122パッチ版
Windows Sever 2003 R2 評価版CDROM
Intel iSCSI Remote Boot FLASH ROM Utility
(ISBOOT.EXE 12.4/Firmware 2.1.22)
Intel PRO1000/PT Network Adapter Drivers for 2000/XP/2003
(PRO2KXP_v13_5.exe)
Microsoft iSCSI Initiator 2.08 boot version
(Initiator-2.08-boot-build3825-x86fre.exe)
http://www.microsoft.com/downloads/details.aspx?familyid=12CB3C1A-15D6-4585-B385-BEFD1319F825&displaylang=en
最初にターゲットを用意する。
FreeBSD 7.1 に iscsi-target 20090122パッチ版を使って下記のドライブを作成しました。
/usr/local/etc/iscsi/targets
extent11 /tank/iscsiz/istgt-boot00 0 120GB
target11 rw extent11 192.168.3.0/24
次にNICのファームを更新する。
ISBOOT.EXEをダウンロードしてくる。
http://downloadcenter.intel.com/Product_Search.aspx?Prod_nm=ISBOOT.EXE
今回は12.4を利用しました。(後ろの方にあります)
展開すると、iSCSIUtl\DOSの中にiSCSIUtl.exeがあるのでこれをFDにコピーします。
DOS上から次のコマンドを実行する。
ISCSIUTL -ALL -FLASHENABLE
ISCSIUTL -ALL -UP
この操作ですべてのアダプタにiSCSIブートファームが書き込まれます。
NICが複数の場合はNICオプションで指定できます。
PXEブートに戻すにはPROBOOT.EXEにあるIBAUtil.exeを使えば戻るらしいけど、
私は戻すつもりはないのでよくわかりません(笑)
再起動すると正しくBIOSがロードされていれば、
iSCSIのセットアップに入るために
「Ctrl+Dを押してください」
と出るので押してセットアップに入る。
Firmware設定例:
Initiator Name
iqn.2007-09.jp.ne.peach:pluto
Initiator IP
192.168.3.48
Subnet Mask
255.255.255.0
Gateway IP
0.0.0.0
Target Name
iqn.1994-04.org.netbsd.iscsi-target:target11
Target IP
192.168.3.36
Target Port
3260
Boot LUN
0
設定をして、起動するために設定したアダプタをPRIMARYとして選択する。
マシンを再起動してLUN0にNETBSD HDDが認識される事を確認する。
(表示が短すぎて目視するのが難しいけどw)
Attempting Connect to の次の行に
LUN0 DEVICE NetBSD ほげほげ
が表示されない場合は接続にミスしているので設定を再確認する。
ISBOOT.EXEを展開した場所にある Win32以下のセットアップドライバを予めFDにコピーしておく。
さらにPRO2KXP_v13_5.exeを展開してPRO1000\Win32以下をDVDRWやUSBメモリなどに保存しておく。
Intel(R) Ethernet Drivers and Software for Multiple Operating SystemsだとZIPなので、
その展開のコピーでもいいとおもう。
Windows Server 2003 のCDROMで起動する
F6ほげほげが表示されたらF6キーを連打する。
次のF2ほげほげが出たらもう押さなくてOK
しばらくロードが続いて、ドライバの入力を求める画面になります。
Sキー>エンターキーで続行してFDから
「Intel(R) iSCSI Setup Driver」
を読み込む。できたらエンターキーで続行する。
そのまま進み、正しくFDからロードできればiSCSIのHDDが表示されます。
後は普通にパーティションを作成してインストールを指示します。
CDからHDDにコピーが終わると再起動になるのでFDを抜いておく。
そのまま待てばCDROMのスキャン後にiSCSIのHDDからブートして、
Windowsのセットアップが続行します。
途中でドライバがWindowsロゴに合格していないと言われるけど入れてしまう。
インストールが終了して起動するとiSCSIブートに使っているNICが
デバイスマネージャからSCSIとRAIDコントローラに
「Intel(R) iSCSI Setup Driver」として認識されています。
(自分的メモ)
ここまで出来たらWindowsを終了させてから、
ZFSスナップショットを作成しておく。
# zfs snapshot tank/iscsiz@snap20090122
上記コマンドを打ち込むと数秒で即座に今の状態が保存されます。
これで今後の操作でミスっても再インストールする必要がなくります(笑)
次にIntelのNICドライバを手動でいれます。
デバイスマネージャを開いて、不明デバイスの
イーサネット コントローラになっているものに
上記で作成したPRO2KXPドライバを導入します。
デバイスの詳細を見るとVEN_8086~となっているのがIntel製です。
WindowsUpdateを使わず、「いいえ、今回は接続しません」を選択する。
一覧または特定の場所からインストールするで場所を指定します。
iSCSI起動に使っているNICはインストールに失敗します。
それ以外のデバイスが認識された事を確認します。
オンボードのLANドライバも同様に導入して、
iscsi-targetのマシンにpingできる事を確認してから再起動します。
(複数ポータルの設定方法がわからないのと、SAN1とSAN2のGWをもってないので
SAN2用NICに仮IPを振ってSAN1と同じとこに接続しといた)
再起動するとインストールできなかったデバイスに黄色のびっくりマークが付いて
ネットワークアダプタのグループに移動します。
この状態で、Microsoft iSCSI Initiator 2.08 boot versionsをインストールします。
セットアップでConfigure iSCSI Network Boot Supportというのが出るので、
チェックを入れて、e1expressというServiceNameの行を選択します。(←重要)
(現在のiscsi-targetパッチではMPIOはチェックしなくていいです)
インストールが終わったら再起動します。
起動したら、iSCSI InitiatorプロパティでTargetsに起動ディスクのみが
認識されてConnectedされていることを確認します。
(この段階ではDiscoveryタブはからっぽでなければいけない)
確認できたらF6ドライバのディスクにあるiSCSIApp.exeを実行します。
「はい」をクリックしてドライバを除去します。
この実行によりF6ドライバの制御下の起動ドライブが
Microsoft iSCSI Initiator boot版に委譲されます。
終わったら再起動します。
デバイスマネージャのSCSIとRAIDコントローラにある
「Intel(R) iSCSI Setup Driver」
が黄色いびっくりマークになっているのを確認します。
確認できたらネットワークアダプタの失敗したものに
ネットワークドライバをインストールします。
今度は成功しますのでIPアドレスを設定します。
※ここで仮に設定したIPも削除しました。
出来たらスタートメニューからコマンドプロンプトを起動して、
iscsibcg /verify /fix
を実行します。
Nic service used for iSCSI Boot is e1express
Driver e1express is not set to boot start
Driver e1express fixed to be be boot start
All iSCSI boot verification checks completed
と起動ドライバに e1express を使うようになって
チェック完了すればiSCSIブートのディスクレスマシンの完成です。
再起動すればiSCSIとネットワークの両方が使えるようになっています。
おつかれさまです。
最後のiscsibcgはドライバ更新とかOSのアップデートを行ったら
再度実行する必要があるそうです。
詳細はISBOOT.EXEのドキュメント(英語)を参照してくださいな。
ポイントはiSCSI Firmから起動した段階ではストレージコントローラ専用に
なっているため通常のネットワークパケットを一切扱えないので、他のNICで
処理するために2ポート必要になるのと、ストレージ用とネットワーク用の
ドライバが起動時に動いていて、MS iSCSI Initiatorから読めるように
予め構成しなければいけない所かな。
※使用上の注意※
同系列のNICを必ず2ポート以上用意すること。(Dual/Quadなら1枚でOK)
iSCSIファームは起動するNICにのみあればいいのでServer+Desktopでもいけるかも?
(追記:iSCSIファームをいれたServer1個とDesktop1個でもできました)
複数セッションを張る必要があるので最大セッション数を極端に小さくしない事。
テスト環境での設定は “-s 32 -C 8″ です
ドライバの交換が終了する前にクラッシュしたりすると起動不能に陥る事があります。
いわゆるディスクチェック完了してからでないと起動できないよ状態。
(しかしドライバは制御から外れてアクセスできない?)
DHCPでは詳しく試していないのでよくわからないです。
WS2008で利用したもの:
Intel PRO/1000 PT Server Adapter 2個 (追記:1個でもできました)
(firmは上記で更新済み)
iscsi-target 20090122パッチ版
Windows Server 2008 DVDメディア
ターゲット設定、Firmware設定は2003と同様です。
2008では最初からPRO/1000PT用ドライバが添付されていますので、
別途用意するものは何もありません。iSCSIも標準対応です。
DVDから起動すればiSCSI HDDが最初から見えます。
あとは普通にインストールすれば問題ありません。
iSCSI起動に使ったNICに設定したIPが最初から指定されています。
テスト環境の構成:
LAN構成
192.168.2.0/24
2001:380:e00:20::/64
SAN用経路1
192.168.3.0/24
2001:3e0:6cf:3::/64
SAN用経路2
192.168.4.0/24
2001:3e0:6cf:4::/64
iscsi-target FreeBSD 7.1/ZFS raidz2
em0:
192.168.4.36, 192.168.4.37
2001:3e0:6cf:4:21f:d0ff:fe16:38bd
em1:
192.168.3.36, 192.168.3.37
2001:3e0:6cf:3:21b:21ff:fe04:f405
em2:
192.168.2.36, 192.168.2.37
2001:380:e00:20:203:47ff:fe72:34f2
テストインストール完了後のマシン構成
ASUS M2A-VM(BIOS 2201) + Athron X2 5200/メモリ2GBx2/HDDなし
LAN: 192.168.2.48 (オンボードRealtek8111かな?)
SAN1: 192.168.3.48 (PCIe x1: PRO/1000 PT Server Adapter iSCSI boot firm 2.1.22)
SAN2: 192.168.4.48 (PCIe x16: PRO/1000 PT Server Adapter boot disabled)
追記:
追加テストによりわかったので修正しました。
XPSP3は起動はできるけどブート版Initiatorが入らないのでNGです。
VistaSPなしはHDD認識せず撃沈。Server2008が認識している所をみると、boot.wimを更新すればいけるかも。ただ、これを変更するには Windows Automated Installation Kit (AIK)がいるわけで面倒なので当面放置。
更新>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(ディスクレスインストール)に一部対応しました。
更新>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 オプションでターゲットホストを指定します。
新年あけましておめでとうございます。
今年もよろしくお願いいたします。
昨年を振り返ってみると、Hyper-Vのパッチを公開してからアクセスが急激に伸びました。
FreeBSDでも興味ある人はそこそこいるのだなと(笑)
むろん海外からもアクセスされるようになったのも一因でしょうけど、
こんな場所でもアクセスして頂けるのはありがたい。
↓統計はこんな感じ。ちなみに検索キーワードはfreebsd,iscsi,hyepr-v,zfsとなってました。
そのHyper-Vによってテスト環境構築の手間がすごい削減されました。
VirtualServerに幻滅していただけにちょっとだけ見直した。
ZFSとかもっと触りたかったのだけど後半はiSCSIパッチだけに集中していたので、
あまりできなかった。残念。↓去年解決できなかった機能のスクリーンショット。
リームバブルメディアをどうやって簡単に出し入れするのかとか、
一度挿入されたメディアは不測の再起動でも永続的に使えるようにするとか、
考慮することが多すぎて(略)
この機能をなんとする為に複数動かせるように改造してたり(笑)
Hyper-VでのVM用のシステムディスク領域には20081225パッチ版でのMCS接続で安定して動いています。
上記画像の2003自体もこのiSCSIディスク上に容量可変で構築してあります。
今年も引き続きiSCSIとZFSを中心に活動していけたらと思います。
機能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
更新>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簡易同期機能を廃止してより正確に追跡するようになりました。
再接続時にクラッシュする事があったのを修正しました。
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 ~]#
更新>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の単位を追加しました。
コンフィグファイルでクォートを解釈するようになりました。