‘patch’ タグのついている投稿

FreeBSD 7.3/8.1 on Windows Server 2008 + Hyper-V

2010年7月8日 木曜日

すでに賞味期限切れですが公開しておきます。
このバージョンはFreeNAS 0.7.1(7S) および 0.7.2 に搭載されているものです。
Windows Server 2008 R2 ではこれがなくても動くようになっているはずです。

for FreeBSD 7.3 or later
パッチファイル:fbs73-hv-20100528.patch.gz

for FreeBSD 8.1 or later
パッチファイル:fbs81-hv-20100528.patch.gz

パッチ済みカーネルの作成とインストール(8.1の実行例):
# cd /usr/src
# gzcat < /path/to/fbs81-hv-20100528.patch.gz | patch -p1
# make buildkernel
# make installkernel
# shutdown -r now

vmwp.exeの終了のしかた:
1.タスクマネージャを起動します。
2.プロセスタブを開きます。
3.表示(V)>列の選択(S)で「コマンドライン」のチェック入れて表示します。
4.イメージ名の部分をクリックしてソートします。
5.vmconnect.exeの後ろにホスト名、仮想マシン名、オプションと続くので、
停止したい仮想マシンのコマンドラインにあるGUIDを見つけます。
6.同じGUIDのvmwp.exeがありますので、右クリックして
「プロセスの終了(E)」を選択します。

 
(クリックで拡大)

FreeBSD 8.0 / 7-STABLE on Windows Server 2008 + Hyper-V

2009年11月26日 木曜日

以前の同様に初期化部分のパッチを作成しました。
現時点(2009/11/25)で、以下の版に対して動作確認済みです。

FreeBSD 8.0 RELEASE
FreeBSD 7 STABLE

また、2008R2 + Hyper-Vにて確認したところ、8.0RELは起動しませんでした。
7.2RELと7STABLEは起動するので利用できる模様。
起動しない8.0RELの詳細はまだ調べていません。

パッチファイル:fbs80-200911-hvpatch.bz2

パッチ済みカーネルの作成とインストール:

# cd /usr/src
# bzcat < /path/to/fbs80-200911-hvpatch.bz2 | patch -p1
# make buildkernel
# make installkernel
# shutdown -r now

パッチを当てたカーネルはLANカード(100BASE-TX)のDEC21140の
デバイス初期化をスキップするだけなので、
dump/restore で他の物理マシンに移動しても、
そのカードを利用していないならば修正しなくても問題なく動きます。

vmwp.exeの終了のしかた:
1.タスクマネージャを起動します。
2.プロセスタブを開きます。
3.表示(V)>列の選択(S)で「コマンドライン」のチェック入れて表示します。
4.イメージ名の部分をクリックしてソートします。
5.vmconnect.exeの後ろにホスト名、仮想マシン名、オプションと続くので、
停止したい仮想マシンのコマンドラインにあるGUIDを見つけます。
6.同じGUIDのvmwp.exeがありますので、右クリックして
「プロセスの終了(E)」を選択します。

 

(クリックで拡大)

FreeBSD 7.2がリリースされました

2009年5月5日 火曜日

現在FreeNASのビルド環境が7.2リリース待ちだった為に、amd64版の
nightly build作成が停止しています。
すでに連絡してあるので再公開までしばらくお待ちを。

iSCSIターゲットの容量が正しく認識されないという報告をもらっています。
不要なパーティションが存在する状態でRAWデバイスを公開すると、
Windowsが古い領域をそのまま誤認識するようです。
一旦UFSフォーマットをかけてからiSCSIデバイスとして利用してください。
もしくは予めMBRゼロフィルやローレベルフォーマット等を行ってください。

FreeBSD 7.2へのバイナリアップグレード方法:

アナウンス翻訳その他は他力本願ってことで:-)
以前の版(BETAやRCも含む)からアップグレードするにはカーネル自体の更新、
その他の更新の2ステップを行います。

まず更新データをネットから取り寄せます。

# freebsd-update upgrade -r 7.2-RELEASE

新しいカーネルのインストールを行い、再起動します。

# freebsd-update install
# shutdown -r now

ユーザランドのインストールを行い、再起動します。

# freebsd-update install
# shutdown -r now

再起動できたら、portsnap fetch などで portsシステムも更新します。

※実行前に必ずバックアップやスナップショットを作成しておきましょう。
※当然というか古い版からの更新であるほどインストールする量が増えるので、
作業には十分注意しましょう。

Hyper-V仮想マシンへのインストールに関して:

i386とamd64のいずれも以前書いた方法がそのまま使えます。
詳細はそちらを参考にしてください。

http://shell.peach.ne.jp/aoyama/archives/113

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

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

お約束の

Intel PRO/1000 PT Server Adapterを使ってiSCSIブート(ディスクレス)を行う

2009年1月23日 金曜日

2011/01/05 追記:
ファームウェアの更新手順が変更されているので新たに書きましたので
よろしければ一緒にご覧ください。
「Intel Gigabit CT Desktop Adapter などにiSCSI起動ファームを書き込む」
http://shell.peach.ne.jp/aoyama/archives/1335
2011/01/05 追記:

とりあえず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)がいるわけで面倒なので当面放置。

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(ディスクレスインストール)に一部対応しました。

今後どうしようかなと

2009年1月19日 月曜日

都合により凍結したという部分についてちょっとふれておこう。
実はパフォーマンス改善の為にいろいろ改良案を試してみたのですが、
元々のiscsi-targetの制御ロジックだと大幅な性能アップは望めないって結論になりました。
少なくとも私のプログラミング能力と英語理解力では無理です(汗)
現在のコードを流用しつつ処理方法を変更するのにどの程度コストがかかるか
見たところ概算で約3割程度を新規に書き起こせばいけそう。
でもそのままだとホットスワップ等はもちろん無理だから、
付加機能も考慮すると対応する価値はあまりないという結論に。

そこで、今後の方向性として、
現状の処理方法を維持しつつ拡張するか
ベースの処理部分を根本から書き直すか
という問題が。

とりあえず新規に書くなら非同期I/O処理にしてみたい。
非同期でキューにいれてしまえばブロックされてボトルネックになってる現状
よりましなパフォーマンスになるだろうと見てる。

参考:

http://www.ietf.org/rfc/rfc3720.txt

aio_read(2) aio_write(2) kqueue(2) kevent(2)

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

仮想DVDドライブと仮想テープドライブの進捗

2009年1月9日 金曜日

仮想DVDドライブはCD-ROMとDVD-ROMの読み込み動作部分はできました。
すくなくともWindows Server 2003と2008で利用可能。
2008ではHyper-Vの物理CD/DVDドライブとして利用でき、
OSがクリーンインストールできる事を確認済み。
リージョンコードも返すようにしてみたけどあまり意味なさそう。
コマンド系はSPC-3/MMC-4を参照。

仮想テープドライブは2003と2000に標準で付いてるDLTドライバと
Windowsバックアップで完全バックアップとリストアが36GBできる事を確認済み。
2003で作成した物が2000で展開可能とか確認中です。
一部の重要なコマンドが未実装のため正常に動かない事があります。
たとえばイレース等ができません(涙)
コマンド系はSPC-3/SSC-2を参照。

両方ともまだメディアの交換が出来ません。
イジェクトすると即座に再挿入されます(汗)

現在お手本にしている基本ハードはこれ↓
http://www.newtech.co.jp/products/sales_end/dlt8000/
非圧縮40GB/圧縮80GBだけど圧縮はまだ考慮していない。
そもそも常時伸張されるから生データとかあまり関係ない気が・・・。
これをベースにDLT-S4(800GB/1.6TB)とIBMのLTO1(100GB/200GB)と
LTO4(800GB/1.6TB)のコマンドを参考に修正中です。
ヘリカルスキャンのほうはあまり見てない。
一応HPのDDS4はあるから確認とかはとるかも?
まぁお手本と言っても対応すべきSCSIコマンドの応答を真似ているだけですが。

参考URL:
Quantum DLT-S4
http://www.quantum.com/Products/TapeDrives/DLT/DLT-S4/Index.aspx
IBM System Storage TS2340
http://www-06.ibm.com/jp/storage/products/tape/2340/

ところで、うちのWin2KはDLT-S4のドライバを導入すると
クラッシュするのですけどやっぱり2000ってことなのか。

物理サーバ(WS2003)上にあるネットワークドライブをHyper-V内の
仮想マシン(WS2003)に割り当てて、仮想マシンからiSCSI仮想テープに
バックアップしてみた時のログ↓

———————-
バックアップ状態
操作: バックアップ
アクティブ メディア: DLT
メディア名: ” 2009/01/09 18:13 に作成したメディア”

ボリューム シャドウ コピーの作成: 試行回数 1 回。
“X: \\Athena\Files” のバックアップ
バックアップ セット #1 (メディア #1)
バックアップの説明: “2009/01/09 18:13 に作成されたセット”
メディア名: ” 2009/01/09 18:13 に作成したメディア”

バックアップの種類: 通常

2009/01/09 18:13 にバックアップを開始しました。
2009/01/09 18:35 にバックアップを完了しました。
ディレクトリ数: 29
ファイル数: 236
バイト数: 36,285,182,209
時間:  21 分 26 秒で処理しました。

———————-

ログはこんな感じで、まだデバッグ用ログ取り中とかだけど、
だいたい27MB/sの書き込みスループットがあるようです。
94GB/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を中心に活動していけたらと思います。