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

FreeBSD 8.1-RELEASE と isboot 0.2.2 を統合したデモ版をアップしました

2010年7月30日 金曜日

FreeBSD 8.1が公開されたので、デモ版も更新しました。
よかったらiSCSI起動もお試しください。

ダウンロードリンク(for testing purpose only):
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RELEASE-amd64-isboot-0.2.2.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RELEASE-i386-isboot-0.2.2.iso

ソースファイル、その他の情報については以下の記事を参照してください:
http://shell.peach.ne.jp/aoyama/archives/1216

istgt (iSCSI target) 20100707版 for FreeBSD

2010年7月7日 水曜日

istgtも七夕エディションに(謎)
isbootとの組み合わせで気づいた点を修正しました。
また、一か月ほどWindows7のディスクレス環境を支えて来れたというのを
踏まえてPortsの更新も行います。
ちなみに4KBとか小サイズIOを大量に投げるとギガビットイーサの遅さも
相まって、ありえないほどの遅延が生じます。
これは今後の課題と言うことで。

参考用:
http://shell.peach.ne.jp/aoyama/archives/1077
http://shell.peach.ne.jp/aoyama/archives/1107
http://shell.peach.ne.jp/aoyama/archives/1114

istgt (tarball): istgt-20010707.tar.gz

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20100707.tar.gz
# cd istgt-20100707
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20100707.tar.gz) = 2774a6487b65a182648503eb76c2c4a3
SHA256 (istgt-20100707.tar.gz) = 98b910da623a127f575e35f45dfc7f8f5ec3334fc260b28cbd31b83ec32ca868

主な修正点:
DefaultTime2Waitの比較を最大値を取るように修正
ターゲットが存在しない場合に検索した記録を残すように修正

動作確認用のFreeNAS 0.7.2(7S-5255)版をアップしました

2010年7月6日 火曜日

ZFSで4KBドライブを使った処理を改善しました。

SVN変更点は以下を参照してください。
http://freenas.svn.sourceforge.net/viewvc/freenas/branches/0.7/?view=log

あくまで動作確認用ですのでテスト環境以外への導入はサポートできません。
SVN5255版に新チップ識別用コードの追加および
以下のバックポートドライバが含まれています。
なにか問題があれば報告をお願いします。

This unofficial version is using for test only.
It includes SVN r5255 + identifier fix
+ backport drivers + some ATA fixes.
If you have a problem, please report me about it.

Unofficial only:
ATI IXP700/IXP800 AHCI, IXP700 IDE
Intel ICH10 AHCI
NVIDIA MCP65/MCP67/MCP77/MCP79/MCP89 AHCI, MCP79 IDE
Realtek 8102EL/8168DP/8111DP/8168E/8111E GbE
Marvell 88SX6042/88SX7042/88SX6102/88SX6111/88SX6141

em driver 7.0.5/1.0.1 (Intel PRO/1000 family)
ixbge driver 2.2.0 (Intel 10 Gigabit family)
re 2010/05/07 (Realtek 8169/8111 etc.)
msk 2010/05/04 (Marvell Yukon)

ntfs-3g 2010.3.6

警告:ZFS version 13 にアップグレードすると過去の版で利用不可になります。
WARNING: If upgraded to ZFS version 13, you can not use from old version.

for 32bit version
7S-FreeNAS-i386-LiveCD-0.7.2.5255.iso

for 64bit version
7S-FreeNAS-amd64-LiveCD-0.7.2.5255.iso

※アップグレード手順はこちらを参考にしてください。
http://shell.peach.ne.jp/aoyama/archives/1038

MD5 (7S-FreeNAS-i386-LiveCD-0.7.2.5255.iso) = e15f8b979aae9b0e68176181b82a8dfb
SHA256 (7S-FreeNAS-i386-LiveCD-0.7.2.5255.iso) = a239cf7c45e66b0dce48e5c47c886774c5dcfa1f3a1aefd3d9cfb8fd7ef6d925
MD5 (7S-FreeNAS-amd64-LiveCD-0.7.2.5255.iso) = da14408dcc33e4ad746e54204ba7f103
SHA256 (7S-FreeNAS-amd64-LiveCD-0.7.2.5255.iso) = 01ea3fe2a2fd861c9fc92bff950c03e74789a0186d08302523e6f4b961ff086e

isboot (iSCSI boot driver) version 0.2.2

2010年7月4日 日曜日

mutexを保持したままスリープしてしまう問題を修正しました。
また、FreeBSD8以降の場合はmaxio=1MBと設定するようになりました。
(効果がいまいち不明・・・。同時に256ブロック/128KBしかこない)
ddコマンドをバックグラウンドで4個同時に動かすと、
Read 120MB/s, Write 84MB/s ぐらいは出るようです。

作成・アップグレード方法:

# cd /usr/src
# tar xvf /path/to/iscsi-2.2.4.tar.gz
# tar xvf /path/to/isboot-0.2.2.tar.gz

# make buildkernel
# make installkernel
or
# cd /usr/src/sys/modules/iscsi/isboot
# make obj
# make depend
# make clean
# make all
# make install

インストール後に、新モジュールを適用する為にサーバを再起動してください。
ログで iSCSI boot driver version 0.2.2 が表示される事を確認してください。

主な修正点:
FreeBSD8.0以降はmaxioを1MBに設定
SCSIオートセンス機能を追加
タグ数をiSCSIコマンド数で調整するように変更
デフォルトタグ数を32に変更
iSCSI処理中にCAMロックを保持しないように変更

パフォーマンス(ダイジェストなし):
# dd if=/dev/da4 of=/dev/null bs=1m count=1k
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 14.374117 secs (74699672 bytes/sec)
# dd if=/dev/zero of=/dev/da4 bs=1m count=1k
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 17.823493 secs (60243064 bytes/sec)

Read: 74MB/s Write: 60MB/s (at bs=1m)

ダウンロードリンク:
http://www.peach.ne.jp/archives/isboot/isboot-0.2.2.tar.gz

ダウンロードリンク(for testing purpose only):
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-7.3-RELEASE-amd64-isboot-0.2.2.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-7.3-RELEASE-i386-isboot-0.2.2.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RC2-amd64-isboot-0.2.2.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RC2-i386-isboot-0.2.2.iso
http://www.peach.ne.jp/archives/isboot/demo/unionfs-mkisboot.sh

gPXE + isboot + istgt(参考用):
http://lists.freebsd.org/pipermail/freebsd-scsi/2010-June/004432.html

isboot (iSCSI boot driver) version 0.2.1

2010年7月3日 土曜日

どうもiBFTが破損しているとカーネルごとお亡くなりになるようなので、
ロード処理を対応してみました。
処理のボトルネックになっていたコマンド実行数の制限を無くす為に、
キューイング処理を追加しました。
これにより読み込み速度が61MB/sから74MB/sに13MB/s程度改善しました。
また、R2Tコマンド、およびimmediateなしモードに対応したため、
istgt以外のiSCSIターゲットとの互換性が大幅にアップしています。
8.1-RC2が公開されたので、そちらの統合版も作成しました。

※FreeBSDのCAMの制限なのかVFSの制限なのか不明ですがTL>64KBで
処理をしてくれないようです。
CAM用のタグも64個用意しているけどdd bs=1mでは2個しか使っていないように
見えます。対処方法があったら教えてください。

istgt以外のiSCSIターゲットとの接続がうまくいかない場合は、
ブログコメントにでも残して頂けると助かります。

作成・アップグレード方法:

# cd /usr/src
# tar xvf /path/to/iscsi-2.2.4.tar.gz
# tar xvf /path/to/isboot-0.2.1.tar.gz

# make buildkernel
# make installkernel
or
# cd /usr/src/sys/modules/iscsi/isboot
# make obj
# make depend
# make clean
# make all
# make install

インストール後に、新モジュールを適用する為にサーバを再起動してください。
ログで iSCSI boot driver version 0.2.1 が表示される事を確認してください。

主な修正点:
CHAP/Mutual CHAPに対応しました。
タスクキューを実装しました。
immediateなしモード及びR2Tコマンドに対応しました。
iBFTチェックサムが破損している場合もモジュール登録するようになりました。

パフォーマンス(ダイジェストなし):
# dd if=/dev/da4 of=/dev/null bs=1m count=1k
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 14.374117 secs (74699672 bytes/sec)
# dd if=/dev/zero of=/dev/da4 bs=1m count=1k
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 17.823493 secs (60243064 bytes/sec)

Read: 74MB/s Write: 60MB/s (at bs=1m)

ダウンロードリンク:
http://www.peach.ne.jp/archives/isboot/isboot-0.2.1.tar.gz

ダウンロードリンク(for testing purpose only):
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-7.3-RELEASE-amd64-isboot-0.2.1.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-7.3-RELEASE-i386-isboot-0.2.1.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RC2-amd64-isboot-0.2.1.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RC2-i386-isboot-0.2.1.iso
http://www.peach.ne.jp/archives/isboot/demo/unionfs-mkisboot.sh

gPXE + isboot + istgt(参考用):
http://lists.freebsd.org/pipermail/freebsd-scsi/2010-June/004432.html

動作確認用のFreeNAS 0.7.2(7S-5252)版をアップしました

2010年7月1日 木曜日

更新>FreeNAS 0.7.2 5255版

7S/8Sから簡単にマージできるのものをSVNに取り込みました。
残りのものも準備中ですが、いろいろあってすぐには無理かも。
とりあえず、trunkが0.8用に再作成されました。
0.8出るまでの空白期間を埋めるのとiSCSIのテストに活用すると言う主目的は
実行してきたから、まぁ、あとはどうにかなるでしょう。

SVN変更点は以下を参照してください。
http://freenas.svn.sourceforge.net/viewvc/freenas/branches/0.7/?view=log

あくまで動作確認用ですのでテスト環境以外への導入はサポートできません。
SVN5252版に新チップ識別用コードの追加および
以下のバックポートドライバが含まれています。
なにか問題があれば報告をお願いします。

This unofficial version is using for test only.
It includes SVN r5252 + identifier fix
+ backport drivers + some ATA fixes.
If you have a problem, please report me about it.

Unofficial only:
ATI IXP700/IXP800 AHCI, IXP700 IDE
Intel ICH10 AHCI
NVIDIA MCP65/MCP67/MCP77/MCP79/MCP89 AHCI, MCP79 IDE
Realtek 8102EL/8168DP/8111DP/8168E/8111E GbE
Marvell 88SX6042/88SX7042/88SX6102/88SX6111/88SX6141

em driver 7.0.5/1.0.1 (Intel PRO/1000 family)
ixbge driver 2.2.0 (Intel 10 Gigabit family)
re 2010/05/07 (Realtek 8169/8111 etc.)
msk 2010/05/04 (Marvell Yukon)

ntfs-3g 2010.3.6

警告:ZFS version 13 にアップグレードすると過去の版で利用不可になります。
WARNING: If upgraded to ZFS version 13, you can not use from old version.

for 32bit version
7S-FreeNAS-i386-LiveCD-0.7.2.5252.iso

for 64bit version
7S-FreeNAS-amd64-LiveCD-0.7.2.5252.iso

※アップグレード手順はこちらを参考にしてください。
http://shell.peach.ne.jp/aoyama/archives/1038

MD5 (7S-FreeNAS-i386-LiveCD-0.7.2.5252.iso) = 1418f24442639543d2bb7340d95946bf
SHA256 (7S-FreeNAS-i386-LiveCD-0.7.2.5252.iso) = 92ca2a8f91378152d9c61c0d9fd41e961f8c8d334b30d4045607e7876544d950
MD5 (7S-FreeNAS-amd64-LiveCD-0.7.2.5252.iso) = 699cf42251d8fb25b016f71135765129
SHA256 (7S-FreeNAS-amd64-LiveCD-0.7.2.5252.iso) = 38f4f21d920066b947888e72f6d01d24a0fcd2683774f43c92748ac2adebbc43

isboot (iSCSI boot driver) version 0.1.3

2010年6月27日 日曜日

リカバリモードの処理を改善しました。
ターゲットの消失が一時的に起きても依然のように即パニックになる可能性が
ほぼなくなったと思います。
現在はCAM用mtxとタスク用mtxの取得順序の問題で、根本的なレース状態の
解決にはなっていません。今後の検討課題です。

CAMをロックしたままタスク用mtxをmsleepで待ちたいです。
根本的にこのロジックがダメなのでしょうか?
カーネルランドに詳しい人で、もしここを見ている人がいたら教えてください(切実)

作成・アップグレード方法:

# cd /usr/src
# tar xvf /path/to/iscsi-2.2.4.tar.gz
# tar xvf /path/to/isboot-0.1.3.tar.gz

# make buildkernel
# make installkernel
or
# cd /usr/src/sys/modules/iscsi/isboot
# make obj
# make depend
# make clean
# make all
# make install

インストール後に、新モジュールを適用する為にサーバを再起動してください。
ログで iSCSI boot driver version 0.1.3 が表示される事を確認してください。

主な修正点:
セッションリカバリの処理方法を改善しました。
ソケット消失時に処理がストールする事があったのを修正しました。

ダウンロードリンク:
http://www.peach.ne.jp/archives/isboot/isboot-0.1.3.tar.gz

ダウンロードリンク(for testing purpose only):
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-7.3-RELEASE-amd64-isboot-0.1.3.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-7.3-RELEASE-i386-isboot-0.1.3.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RC1-amd64-isboot-0.1.3.iso
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RC1-i386-isboot-0.1.3.iso
http://www.peach.ne.jp/archives/isboot/demo/unionfs-mkisboot.sh

isboot-0.1.1はバグがありました

2010年6月26日 土曜日

動かないとか思った人すみません。修正版を即上げなおしたので、
不幸にもダウンロードしてしまった人は闇に葬ってください(汗)

それだけではなんですから、FreeBSD 7.2 および 8.1-RC1のISOイメージに
isboot-0.1.2を統合した版を作りましたので、良かったら試してみてください。
作成スクリプトも上げておきますが、自己責任でよろしくお願いします。

IntelのiSCSI機能(iBFT)サポートNICはここで調べてください。
http://www.intel.com/support/network/adapter/pro100/sb/CS-028681.htm

起動に成功するとこんな感じのログ画面になります。

Boot NIC: em0 と Boot device: da1 の行にに注目。

この例だと em0 をiBFTで設定されたNIC0を用いて初期化します。
iBFTの仕様上IPv6でもIPv4でも行けるはずですが、IPv6は未確認です。
そしてda1を起動用として認識しているので、ここにインストールすれば、
NICのBIOSから起動して、isboot.koが引き継いで、OSを起動という
流れになります。
最終的にはisboot.koからiscsi_initiator.koに引き継ぎを出来ると
完璧なのだけど、現時点では出来ません。理由は前回書いた通り。

既存環境をiSCSIターゲットに移すにはloader.confで指定するか、
シェルから kldload isboot.ko を実行すると、設定がロードされて
デバイスが使えるようになるのでdump/restoreなどの方法でコピーします。

注意点としては、インストール中に起動NIC(例の場合はem0)にIPアドレス等を
設定しない事です。問題が発生する可能性があります。
isboot.koが作成するTCPコネクションはクリティカルパスですので、
経路消失した場合の動作は保障できません。
—————————————————————
iSCSI boot driver version 0.1.2
IS: Initiator name: iqn.2007-09.jp.ne.peach:pluto
NIC0: IP address: 192.168.3.48
NIC0: Prefix: 24
NIC0: Gateway: 0.0.0.0
NIC0: MAC address: 00:15:17:97:85:ab
TGT0: Target IP address: 192.168.3.36
TGT0: Target Port: 3260
TGT0: Target LUN: 2
TGT0: Target name: iqn.2007-09.jp.ne.peach:isboot1
Boot NIC: em0
Configure IPv4 by NIC0
Attempting to login to iSCSI target and scan all LUNs.
… cut …
da0 at isboot0 bus 0 scbus0 target 0 lun 0
da0: <FreeBSD iSCSI DISK 0001> Fixed Direct Access SCSI-5 device
da0: 40960MB (83886080 512 byte sectors: 255H 63S/T 5221C)
da1 at isboot0 bus 0 scbus0 target 0 lun 2
da1: <FreeBSD iSCSI DISK 0001> Fixed Direct Access SCSI-5 device
da1: 10240MB (20971520 512 byte sectors: 255H 63S/T 1305C)
da2 at isboot0 bus 0 scbus0 target 0 lun 3
da2: <FreeBSD iSCSI DISK 0001> Fixed Direct Access SCSI-5 device
da2: 1024MB (2097152 512 byte sectors: 64H 32S/T 1024C)
… cut …
Boot device: da1
—————————————————————

ダウンロードリンク:
http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-7.3-RELEASE-amd64-isboot-0.1.2.iso

http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-7.3-RELEASE-i386-isboot-0.1.2.iso

http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RC1-amd64-isboot-0.1.2.iso

http://www.peach.ne.jp/archives/isboot/demo/FreeBSD-8.1-RC1-i386-isboot-0.1.2.iso

http://www.peach.ne.jp/archives/isboot/demo/unionfs-mkisboot.sh

最新版をご利用ください。

動作確認用のFreeNAS 0.7.2(7S-5226-p4)版をアップしました

2010年6月25日 金曜日

 更新>FreeNAS 0.7.2 5252版

isboot-0.1.1 のデモを兼ねて作成しました。
ActiveDirectory問題を修正中です。先が長いです。

変更点:
arc_max < 1024MB の領域で arc_min = arc_max / 4 に再調整
ユーザ・グループの作成・更新ができない問題修正
ActiveDirectory認証を使うとsshdがクラッシュする問題修正
isboot-0.1.1を同梱(おそらくiBFT対応FreeBSD起動イメージは世界初です)
iSCSIターゲットへのインストール、起動を暫定的に対応。
(iSCSIの不具合等ありましたら報告お願いします)

SVN変更点は以下を参照してください。
http://freenas.svn.sourceforge.net/viewvc/freenas/branches/0.7/?view=log

あくまで動作確認用ですのでテスト環境以外への導入はサポートできません。
SVN5226版にHVパッチと以下の新チップ識別用コードの追加および
以下のバックポートドライバが含まれています。
なにか問題があれば報告をお願いします。

This unofficial version is using for test only.
It includes SVN r5226 + Hyper-V patch + identifier fix
+ backport drivers + some ATA fixes.
If you have a problem, please report me about it.

Unofficial only:
ATI IXP700/IXP800 AHCI, IXP700 IDE
Intel ICH10 AHCI
NVIDIA MCP65/MCP67/MCP77/MCP79/MCP89 AHCI, MCP79 IDE
Realtek 8102EL/8168DP/8111DP/8168E/8111E GbE
Marvell 88SX6042/88SX7042/88SX6102/88SX6111/88SX6141

em driver 7.0.5/1.0.1 (Intel PRO/1000 family)
ixbge driver 2.2.0 (Intel 10 Gigabit family)
re 2010/05/07 (Realtek 8169/8111 etc.)
msk 2010/05/04 (Marvell Yukon)

ntfs-3g 2010.3.6

警告:ZFS version 13 にアップグレードすると過去の版で利用不可になります。
WARNING: If upgraded to ZFS version 13, you can not use from old version.

for 32bit version
7S-FreeNAS-i386-LiveCD-0.7.2.5226-p4.iso
7S-FreeNAS-i386-LiveCD-0.7.2.5226-p4a.iso

修正版をご利用ください。

for 64bit version
7S-FreeNAS-amd64-LiveCD-0.7.2.5226-p4.iso
7S-FreeNAS-amd64-LiveCD-0.7.2.5226-p4a.iso

修正版をご利用ください。

※アップグレード手順はこちらを参考にしてください。
http://shell.peach.ne.jp/aoyama/archives/1038

MD5 (7S-FreeNAS-i386-LiveCD-0.7.2.5226-p4.iso) = 778b088edf3b414e03eaa70762dcdcf2
SHA256 (7S-FreeNAS-i386-LiveCD-0.7.2.5226-p4.iso) = 5e9e4afc82a5bcfc45ef61f32cf46e7f99a8aa656edd35c41b40ca392e8dbc53
MD5 (7S-FreeNAS-amd64-LiveCD-0.7.2.5226-p4.iso) = a87c36dc0de83421d9ac162930fbd500
SHA256 (7S-FreeNAS-amd64-LiveCD-0.7.2.5226-p4.iso) = 8f25513d7b0e8afb2ce95541ddc9d38201d6b3f82d2c745288ba14cd1d02ccfb

追記:
i386版でloader.confから読むとクラッシュする問題があったため
isboot-0.1.2に差し替えました。

MD5 (7S-FreeNAS-i386-LiveCD-0.7.2.5226-p4a.iso) = e2db342d6e2130ef911b1089de167a67
SHA256 (7S-FreeNAS-i386-LiveCD-0.7.2.5226-p4a.iso) = 642e9c30af3c555f9d1ea435d88ebbb8f3ce0d3bb12b5530c76a524f6e63541a
MD5 (7S-FreeNAS-amd64-LiveCD-0.7.2.5226-p4a.iso) = 174de4a193cb0b8f42b9a08c5351ad10
SHA256 (7S-FreeNAS-amd64-LiveCD-0.7.2.5226-p4a.iso) = 92def87652e90b7907dd0ebb851e3580bf813f1f7cda9a9d72463ff7efc9f90f

(おそらく)世界初のiBFT対応のFreeBSD起動ドライバの試作品ができました!

2010年6月25日 金曜日

これはWindowsで言う所のF6ドライバと言えば一部の人にはわかるでしょうか?
iBFTとは iSCSI Boot Firmware Table の略で見ての通りiSCSIで起動する為の
情報を詰め込んだものです。通常はNICのファームとして搭載されています。
未確認ですがgPXEでも使えるかと。

iBFTの仕様の詳細については Microsoft のサイトを参照してください。
http://www.microsoft.com/whdc/system/platform/firmware/ibft.mspx

Intel の CTデスクトップも対応しています。これについては少し前の
Windows7を起動させるブログエントリも参照してください。
NICのFirmware(BIOS)に情報を持つので、iSCSIターゲットがすでに存在すれば、
簡単にディスクレス構成が作れるようになります。
TFTP, NFS, DHCP, PXEといった特殊な設定は一切不要で、
NICの設定を間違えていなければローカルのSCSIハードディスクと同じように
アクセスすることが可能になります。

isboot.ko のモジュールはiBFTの処理部分および機能限定iSCSIイニシエータ
から成ります。イニシエータは、当初iscsi_initiator.koの機能を利用するのを
前提でのほほんとお手軽に作成してみましたが、カーネルモードからの
効率的なアクセス方法がわからず、結局自作する羽目に。
初回特典?ってことでしばらくはソース内に残して置くのでカーネルランド
開発の初心者がもがいた苦肉の策をご覧ください(笑)

なお、このイニシエータはキューイングも非同期アクセスもしない原始的な
1個づつ処理するタイプです。ただし、istgtで使っているノウハウを投入して
作ってあるので、普通に使う分には大丈夫かと思います。今後時間があれば
少しづつ改良していきます。

とりあえず、KLDを使ってやりたい事は他にあるので、これは通過点でしかないと
思って頂ければ幸いです。

作成方法ですが、上記のとおりiscsi_initiator.koに依存する予定だった為に
一部のデータ保持・処理方法がiscsi-2.2.4のヘッダファイルに依存しています。
iscsi_initiator.koを利用する、しないにかかわらず、ソースファイルを一緒に
展開しておく必要があります。
コンパイルしてできた isboot.ko 自体は単独で利用する事ができますので、
必要なマシンにコピーしても問題ありません。

以下に作成例を示します。

# cd /usr/src
# tar xvf /path/to/iscsi-2.2.4.tar.gz
# tar xvf /path/to/isboot-0.1.1.tar.gz

# make buildkernel
# make installkernel
or
# cd /usr/src/sys/modules/iscsi/isboot
# make obj
# make depend
# make all
# make install

以上で、/boot/kernel/isboot.ko が出来ているはずです。
モジュールとして使うには、/boot/loader.conf に、

isboot_load=”YES”

という行を追加するだけでOKです。
あとは、iSCSIターゲットを適当なマシンに作成して、NICのBIOSで
そのiSCSIターゲットの名前、IPアドレス等を設定すれば完了です。
マシンを再起動してNICがiSCSIターゲットを発見できれば、その後の処理は
isboot.koが全自動でよろしくやってくれます。

利用するiSCSIターゲットは特にこだわりがなければ、動作確認の取れている
istgt-20100407 以降をお勧めしておきます。

参考までに、
FreeNAS 0.7.1 5127 安定版 には istgt-20100407 が同梱、
FreeNAS 0.7.2 5226 p3 には istgt-20100606 が同梱されています。
FreeNAS 0.7.2 5226 p4 には istgt-20100606 + isboot-0.1.1 が同梱されています。

なお、直接インストールを試すにはOSインストーラにisboot.koの組み込みを
する必要があります。現時点でFreeBSD用イメージは作成していません。
FreeNAS 0.7.2 5226 p4 としてどういう感じになるのかと言う
デモストレーション用を作成しましたのでこちらもお試しください。
FreeNAS 0.7.2 5226 p4 をディスクレスのマシンで起動させれば、
インストールから起動まで試す事ができます。インストール後は、
もちろんFreeNASとしての機能を使えます。

isboot.ko が iBFTを発見してシステムに組み込まれると、以下のような
sysctl MIBが参照できるようになります。現在はすべて読み込み専用です。

net.isboot.version
net.isboot.nic
net.isboot.device
hw.ibft.nic_gateway
hw.ibft.nic_prefix
hw.ibft.target_lun
hw.ibft.target_port
hw.ibft.target_address
hw.ibft.target_name
hw.ibft.initiator_address
hw.ibft.initiator_name

sysctl実行例としてはこんな感じになります。
hw.ibftにNICで設定した値が、net.isbootにFreeBSDが割り当てたデバイス名が
見えるようになります。それぞれの値の意味は書くまでもないですよね…。

net.isboot.version: 0.1
net.isboot.nic: em0
net.isboot.device: da3
hw.ibft.nic_gateway: 0.0.0.0
hw.ibft.nic_prefix: 24
hw.ibft.target_lun: 2
hw.ibft.target_port: 3260
hw.ibft.target_address: 192.168.3.36
hw.ibft.target_name: iqn.2007-09.jp.ne.peach:isboot1
hw.ibft.initiator_address: 192.168.3.48
hw.ibft.initiator_name: iqn.2007-09.jp.ne.peach:pluto

さて、気になるパフォーマンスはというと、こんな感じでした。
Intel PRO/1000 PT Server Adapter を使って接続し、リード動作をさせると、

istgt 20100606 + isboot 0.1 ヘッダとデータダイジェスト双方(CRC32C)を有効
# dd if=/dev/da6 of=/dev/null bs=1m count=1k
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 20.452429 secs (52499477 bytes/sec)

istgt 20100606 + isboot 0.1 ヘッダダイジェストのみ有効
# dd if=/dev/da6 of=/dev/null bs=1m count=1k
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 17.684945 secs (60715022 bytes/sec)

istgt 20100606 + isboot 0.1 ダイジェスト無し
# dd if=/dev/da6 of=/dev/null bs=1m count=1k
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 17.508400 secs (61327239 bytes/sec)

見ての通り52MB/s~61MB/s程度がでます。原始的な試作品としてはまずまずの
結果ではないかと思いますがどうでしょうか?

現在の仕様・制限など:
最初の起動や再接続(接続からLUNの検索)に時間がかかることがある。
ifconfig(8),route(8)などで起動NICの値を修正するべきではないです。
ターゲットへのクリティカルパスが落ちるとどうにもならなくなります。
モジュールのアンロード機能を使うと死ぬ事が多いです。
IPv6機能はテストされていません。
DNSアドレスなどiBFTに規定されている値を設定しません。
現時点ではキューイングやCHAP認証機能がついていません。
静的データによる認証ぐらいはやるべきかも?
iSCSIのパラメータの調整がソース修正以外にできません。
ソケット接続が消失時に運悪く実行中だったXPTコマンドがたぶん停止できません。
iscsi_initiator.koとのセッション委譲などができません。
ソースコードがiscsi_initiator.koの構造体に依存しています。
(最初はこんな予定じゃなかったのですよ!まぁ、あきらめた。)
iscontrol(8)みたいな制御コマンドが付属しません。
接続したら最後、マシンをシャットダウンするか5時間ぐらい?経過するまで、
再接続要求を出しまくります。(デフォルトでは2秒の待機時間で9999回)
なにかしら致命的なエラーが出たら停止する可能性はありますが、
その場合はOSごとハングアップするかpanicしている可能性の方が高いです。
例によってドキュメントがまったくありません。構造と値の取扱いについては
RFC3720を見てください。
最後だけど、カーネルランド初心者なので、おかしい部分とかあったり、
こうしたほうが良いとか何かあれば教えてください。

ダウンロードはこちらから
isboot-0.1.1.tar.gz

http://www.peach.ne.jp/archives/isboot/isboot-0.1.1.tar.gz

isboot-0.1.2.tar.gz

http://www.peach.ne.jp/archives/isboot/isboot-0.1.2.tar.gz

最新版を使ってください。

FreeNAS 0.7.2 5226 p4
http://shell.peach.ne.jp/aoyama/archives/1181

danny さん作のiscsi initiator モジュール:
ftp://ftp.cs.huji.ac.il/users/danny/freebsd/iscsi-2.2.4.tar.gz

※補足※公開前にバグが出てしまった為に0.1から0.1.1にあがりました。

追記:
i386版でloader.confから読むとクラッシュする問題があったため
isboot-0.1.2に差し替えました。