VMware Workstation上のESXiをお手軽iSCSI Boot
Workstation8上の仮想環境(vSphere5)にて、iSCSIブート検証を行いたかったので、ESXi上の仮想NICをiPXEで「疑似iBFT対応HBA」に仕立ててみる。
iPXEはその名の通りPXEの拡張実装なので、本来はtftpサーバの準備などネットワークブート環境一式が必要なのだけれど、今回は専用Scriptを使用してお手軽に対処。
※ESXiに限らず、他のiBFT対応OSでもたぶん同じようにインストール&起動できるはず
■iBFT
Japanese VMware Documentation Library
http://pubs.vmware.com/vsphere-50/index.jsp?topic=/com.vmware.vsphere.storage.doc_50/GUID-404C622E-3EDD-4C19-B51D-27C3C7EBEDBB.html
iBFT iSCSI 起動の概要
ESXiをデプロイし、iSCSI SANから起動するには、iBFT(iSCSI Boot Firmware Table)形式をサポートしている、iSCSI起動対応のネットワーク アダプタがホストに必要です。iBFTは、iSCSI起動デバイスに関するパラメータをオペレーティング システムに伝える方法です。 ~中略~ iSCSI からはじめて起動するとき、システム上のiSCSI 起動ファームウェアがiSCSI ターゲットに接続します。ログインに成功すると、ファームウェアはネットワークとiSCSI起動のパラメータをiBFTに保存し、システムのメモリにそのテーブルを格納します。システムはこのテーブルを使用して、そのiSCSI接続とネットワークの構成、および起動を行います。
Oracle solaris 10 u9 iSCSI Boot
http://www.slideshare.net/satokaz/oracle-solaris-10u9iscsiboot20101111public
■準備
・Linuxマシン(iPXEビルド用)
・iSCSIストレージ
・ESXi5 インストールメディア
■検証環境
・仮想化ソフト VMware Workstation8 (Windows)
・ストレージNW 10.10.10.0/24
・ESXi
OS: ESXi 5.0
IP: 10.10.10.150
・iSCSI
OS: NexentaStor Community Edition 3.1.1
IP: 10.10.10.3
・ESXi5
VMware-VMvisor-Installer-5.0.0-469512.x86_64.iso
・Linuxマシン
OS:CentOS 6.2
■前提条件
・事前にESXi用仮想マシン(ガワのみ)を作成しておく。
・iSCSIブート用NICのタイプとして「e1000」、その他は「e1000e」を使用。
・Linuxマシンには開発環境とgitをインストールしておく。
・ストレージNWにて、DHCPが使用できる事。
・iSCSIストレージにて、ESX毎のiqnおよびLUNを作成しておく。
(検証では、1ホスト毎に1iqn&1lunを用意)
■設定手順
1. iPXEのダウンロード
※Linuxマシンにて作業を行う
# cd ~ # git clone git://git.ipxe.org/ipxe.git # cd ipxe/ # git pull -v
2. iPXE用スクリプトファイルの作成
※setで指定している値は環境に合わせる
# cd src/ # vi esx01.ipxe --- #!ipxe dhcp || fail_dhcp ifopen net0 ### Settings set hostname esx01 set net0/ip 10.10.10.150 set net0/netmask 255.255.255.0 set net0/gateway 10.10.10.254 set initiator-iqn iqn.2012-02.org.ipxe:ipxe-esx01 # root-path iscsi:${target-ip}:${target-protocol}:${target-port}:${target-lun}:${target-iqn} set root-path iscsi:10.10.10.3:::0:iqn.2012-02.com.nexenta:nexenta-esx01 ### echo +--------------------+ echo Boot from iSCSI Device echo +--------------------+ echo echo Hostname.....: ${hostname} echo Device IP....: ${net0/ip} echo Subnetmask...: ${net0/netmask} echo Gateway......: ${net0/gateway} echo Initiator Iqn: ${initiator-iqn} echo echo Root-Path....: ${root-path} echo sleep 5 set keep-san 1 sanhook ${root-path} || goto debug_iscsi_target sanboot || goto fail_sanboot exit :fail_dhcp echo No response from DHCP server goto drop_shell :fail_sanboot echo SAN boot fail. echo Go to next boot device (DVD Drive etc...) echo Press any key. prompt exit :debug_iscsi_target echo Can not attach an iSCSI Target. goto drop_shell :drop_shell echo Dropping to shell. prompt shell
※冒頭のDHCPによるアドレス取得は必要ないはずだが、この処理がないとうまく動かなかった。
3. iPXE(ROM版)のビルド
# cd src # make bin/8086100f.mrom EMBED=esx01.ipxe; echo $? # mv bin/8086100f.mrom ./esx01_e1000.mrom
出来上がったNIC ROMをWorkstationの稼働するPCへ移動する。
※他のホスト用ROMも必要に応じ作成しておく。
4. ESXiホストvmxファイル編集
仮想NIC関連の設定箇所へ以下のように追記、編集する。
NIC ROMのパスは環境に合わせる。
ethernet0.virtualDev = "e1000" ethernet0.opromsize = 262144 e1000bios.filename = "D:\shared\esx01_e1000.mrom
その他NICについては、以下のようにe1000eを指定。
指定しない場合はeth0と同様にe1000(ipxe ROM)が使用される。
ethernet1.virtualDev = "e1000e" ethernet2.virtualDev = "e1000e" ethernet3.virtualDev = "e1000e" ...
5.ブートデバイスの変更
起動後のPOST画面にて「F2」キーを押下しBIOS設定に入る。
デバイス起動順序にて「iPXE」を1st boot deviceに指定。
6.ブート
仮想DVDドライブにはOSのメディアをあらかじめセットしておく。
うまくいけば、こんな感じでDHCPにてアドレスを取得し、ブート処理を始める。
ipxe shellに落ちるようなら、ネットワークやiSCSI Targetの設定を再確認。
OSインストール後、問題なく起動できればOK
7.その他
・NICの設定変更
設定変更は、ROMの再ビルドにて対応。
今回は「疑似HBA的に」というコンセプトだったけれども、別途Apache+PHPなどアプリケーションサーバを用意し、動的に変更したiPXEスクリプトをhttp経由でロードする方法も取れる。
この場合下記例のようなスクリプトを書き込んだROM1種類を用意するだけで済む上、設定変更はWebサーバ上で行えるため便利。
(ただしアプリサーバがこけると、ホストがブートできなくなるリスクとトレードオフ)
#!ipxe dhcp echo "Load custom ipxe script..." chain http://10.10.10.100/boot.ipxe?mac=${net0/mac}
※chainロード時のクエリ(MACアドレス)をトリガに、返答するipxeスクリプトを変える。
・「Booting from SAN device 0x8?」で固まる(OSインストール前)
OSインストール時に、iSCSIディスクからのブート試行時点で固まり、次のブートデバイスに映らないときは、Attach先のLUNを作り直したり、partedなどでパーティションタイプを上書きしてみたりすると良いかも。
■参照
iPXE - open source boot firmware / Documentation
http://ipxe.org/docs
Network-booting machines over HTTP
http://jpmens.net/2011/07/18/network-booting-machines-over-http/
iPXEで複数台のiSCSIブートをまとめる
http://www3.atword.jp/osserpse/2012/02/11/
以上