2013年10月20日日曜日

Windows7のiSCSI boot

世間はすでにWindows8.1の話題ですね。
そんな中、約1年くらいずっと悩んでたWindows7のiSCSI Bootに成功したので、その話をしてみます。
今更感たっぷりですがお付き合いください。

環境

今回使用した機材は次のとおり

iSCSI Target :
 Server: DELL PowerEdge R410
 OS : Scientific Linux release 6.2  (2.6.32-220.17.1.el6.x86_64)

Client: Intel DC3217IYE  
 OS: Windows 7 Home Edition

基本的にはWindowsの iSCSI Boot の方法を参照してください。
このBlogでは苦労した点について中心に記述します。

iPXEとgPXEの違い

iPXEとgPXEの両方がやる方として出てくるので、どちらを使うか迷いました。
google先生で聞くところ、iPXEのほうが開発が活発であるとのこと。
今回の環境ではiPXEを使いましたが、違いはあまりないと思われます。

#ちなみにgPXEではカーソルキーの↑でコマンドヒストリが出てきませんが、iPXEではコマンドヒストリが出てくるようです。

sanboot コマンドパラメータ

検索する情報現ほとんどがLUNの記述がありませんでしたが、今回の環境ではLUNを設定しないと、iSCSIDriveとして正しく認識をされませんでした。

sanboot --drive 0x80 --keep iscsi:192.168.1.10:::1:iqn.2011-10.local.home:windows7

--driveオプションと--keepオプションはおまじないです。実際にはこのコマンドの前に「set keep-san 1」を入れています。

WindowsインストーラにNICが認識されない

今回利用したクライアントはNICが新しすぎて標準のWindowsインストーラから認識されませんでした。
KVM上Windows7をインストールしたイメージをBootしようと試みたりしましたがうまくいきいかなかったので、正攻法でNICドライバをインストーラ起動時に入れることで認識し、あっさり解決しました。

通常はDiskドライバを入れて認識させる機能にNICドライバをインストールすることでiSCSIドライブが認識するというのはなかなか想像が結びつかないですが、同様な問題が発生した場合はやってみる価値がありそうです。

chainを使って試行錯誤

今回iPXEはUSBメモリに入れて実行しました。
iPXEの対話モードで毎回コマンドを入れるのが面倒だったので、iSCSI TargetにApacheをインストールし、boot.ipxeファイルを作成して、chainコマンドをつかうことで試行錯誤のスピードが上がります。

> dhcp net0
> chain http://192.168.1.10/boot.ipxe

iPXEイメージにスクリプトを埋め込む

自動起動をさせる場合にスクリプトをiPXEのイメージに入れる必要がありますが、めんどくさいなと思ってたら便利なサイトが見つかりました。

Generate iPXE images - http://rom-o-matic.eu/

USBイメージの場合は「Choose an output format:」をUSBKeyImageを選択し、「Embedded script:」に起動したいスクリプトを書きます。
今回は以下のように書きました。

#!ipxe

dhcp net0
set keep-san 1
sanboot --drive 0x80 --keep iscsi:192.168.1.10:::1:iqn.2011-10.local.home:windows7


参考: