サーバいじくり雑記

2012年12月6日

Windows7をiSCSIターゲットへインストールしたい

Filed under: ソフト, Windows — bompopo @ 8:52 PM

さてさて、実に1週間ほど食っちゃ寢しながらやっとこ実現しました。Web上には「gPXEやiPXE使えばすんなり入れられるぜよ!」って情報ばかりで、実はそれではまったく入れられない環境に関しては情報が少なかったです。
私的に結構ハマった感じなので雑記しときます。インストールメモというかトラブルシューティングかな。

まず、よく情報が出てくるiPXEやgPXEを使用した以下の方法がうまく行く人はそのままやってください。このエントリを読む必要無し!
1.PXEブートでgPXEやiPXEをダウンロード
2.gPXE(iPXE)でiSCSIターゲットのブートを指定して失敗させる
3.次のブートデバイスをCDROM(DVD-ROM)を指定しておいてWin7のインストーラを起動させる
4.インストール先にiSCSIターゲットが普通のHDDのように見えて簡単インストール

iSCSIターゲットへのインストールがうまくいかない人は次の点のどれかで頭をひねっていると思います。
症状1:PXEがgPXEやiPXEをダウンロードしてくれない
症状2:gPXE/iPXEでブートさせようとすると「Initializing devices…」まで出てフリーズする
症状3:gPXE/iPXEでブート失敗しても次のブートデバイス(DVDドライブ)に行かない(Windows7のインストーラに行かない)
症状4:Windows7インストーラの起動はするんだけどHDD(iSCSIターゲット)が無いのでインストールが実行できない
症状5:Windows7インストーラが起動しHDDも見えるんだけど、このHDDにはインストールできないって言われる

これについてそれぞれ対応策を雑記します。

●症状1 PXEがgPXEやiPXEをダウンロードしてくれない
PXEブートをBIOSで設定しているのに…なぜ?と一瞬わけがわからなくなるかもです。ちょっと待ってください。少し設定が違うのかもです。
オンボードLANのPXE有効っぽいのが2つあるM/Bの場合どちらか一方しか機能しない可能性があります。
どちらかをDisableにするかブート順序で2つ出てくるLANの順番を入れ替えてみてください。

●症状2 gPXE/iPXEでブートさせようとすると「Initializing devices…」まで出てフリーズする
あなたのNICはコントローラがRealteck(通称「蟹(カニ)」)製ではありませんか?
カニの一部のコントローラのファームにバグがあるようでgPXE-1.0.1以上/iPXEではそのNICは使えません。
そのNICを窓から捨てて別のNICに交換するかgPXE-1.0.0以下を使うならちゃんと動くようです。というか私のM/Bのオンボがそうでしたorz.

過去のバージョンはhttp://rom-o-matic.net/から取ってこれます。

※iPXEが使えるならiPXEがオススメ。gPXEは開発が終わってるしiPXEのスクリプトはかなり使える!

●症状3 gPXE or iPXEでブート失敗しても次のブートデバイス(DVDドライブ)に行かない(Windows7のインストーラに行かない)
これについてはWeb上の情報のほとんどがちゃんと次のブートデバイスに行くことを当然と書いていることから、一部のM/BかBIOSもしくはNICの問題ではないかと思われます。

どうしようも無いのか?と思いきや、syslinuxと数行のプログラムを使うことで解決します。

ようは0x19割り込みすればいいんだろ?これでどーだ?ってのが見つかりまして。以下のプログラムです。

#include <syslinux/boot.h>
#include <stdlib.h>
#include <com32.h>

int main(int argc, char *argv[])
{
        uint8_t vector = 0x19;
        static com32sys_t ireg;
        __intcall(vector, &ireg, NULL);
        return 0;
}

なるほど!これをsyslinuxのcom32/samplesのディレクトリにmylocalboot.cとして保存。Makefileにコンパイルされるように記述してgmake。FreeBSDではエラーでmakeできないのでlinuxバイナリ互換環境でmakeしましょう。

利用方法は、gPXE/iPXEブート時にCtrl+Bでプロンプトに入り以下の手順で実行です。

> dhcp net0                               # DHCP経由で各情報取得
> set keep-san 1                          # ブートに失敗してもSAN情報キープ
> sanboot ${root-path}                    # iSCSIターゲットでブート実行。失敗しますがそれでOK
> kernel /com32/mylocalboot.c32           # tftp経由で先のmylocalbootをコンパイルしたものをカーネルとしてロード
> boot mylocalboot.c32                    # mylocalbootカーネルでブート。0x19割り込みを投げます。

以上でiSCSIターゲットを認識した状態で次のデバイスでブートします。

情報源:Diskless Windows 7 iSCSI boot from OpenSolaris 2009.06 ZFS Server

●症状4 Windows7インストーラの起動はするんだけどHDD(iSCSIターゲット)が見えないのでインストールが実行できない
この症状は知る限り2つに原因がわかれます。

原因a そのNICがそのバージョンのWindowsでは使えないor標準で認識しない。
確認方法はインストーラ起動時にCtrl+F10を押してコマンドプロンプトを表示しipconfigしてNICがみえなければNGです。
NIC変えるかドライバを組み込んだWindowsPEを作るかやれるかどうかわかりませんがインストール時にドライバ読み込ませてみてください。

原因b ドライバかNICの出来がウンコでTCP/IP的に問題がある。
これは私も発症してないので確認できてないのですがこのリンク先の方法を試してみるのも手です。

●症状5 Windows7インストーラが起動しHDDも見えるんだけど、このHDDにはインストールできないって言われる
このメッセージは私が試した限り2種類ある。

・メッセージa

このディスクにWindowsをインストールすることはできません。iBFTで参照されているNICのうち、NT表示可能な実際のデバイスに解決できるものがないため、iSCSI展開は無効です。
このディスクにWindowsをインストールすることはできません。このコンピューターのハードウェアでは、このディスクでの起動がサポートされていない可能性があります。コンピュータのBIOSメニューで、このディスクのコントローラーが有効になっていることを確認してください。

これはiSCSIイニシエータを内蔵させたブートイメージで起動してから手動でiSCSI接続を行なってからそのターゲットにインストールしようとした場合にでました。
つまり無理やりやんな!ってことです。その方法は放棄しましょう。

例)iSCSIイニシエータ内蔵のWinPEを作ってそのイメージからブート後MSISCSIにiSCSIターゲットを認識させてWindows7のsetup.exeを実行

ちなみに蛇足かもですがMSの公式ドキュメントのiSCSI内蔵WinPEの作り方の手順ではNICが消える現象が起きる場合がある。というか私のPCがそう。原因はレジストリいじる箇所の以下の部分

[HKEY_LOCAL_MACHINE\PE_Sys\ControlSet001\Services\netbt]
"Start"=dword:00000000

これが存在するとNICが消えて使い物にならなくなる。これが無くてもiSCSI機能的には問題はなさそう。

・メッセージb

このディスクにWindowsをインストールすることはできません。このコンピューターのハードウェアでは、このディスクでの起動がサポートされていない可能性があります。コンピュータのBIOSメニューで、このディスクのコントローラーが有効になっていることを確認してください。

これはM/B上のコントローラがどのモードで動いているかに左右されるようです。私の場合はSATAコントローラAHCIオンリーにしたらインストールできるようになりました。(つまりiSCSIにはAHCIコントローラが使われている?)

以上!ちょっと文章が見難い感じですが、まー雑記なんで!そのうちまとめます!

広告

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。