KVMとiSCSIによるSANブート環境の構築[ゲスト:WindowsXP]

インストーラiscsiに対応していないので、
1.ローカルディスクにインストール
2.iscsiブート可能なInitiatorを導入する
3.iscsiのLUNにローカルディスクのデータをコピー
の順に作業を行う。

必要なもの
XPインストールメディア

あると便利なもの
LinuxKVMゲスト(ddとgPartedを使いたい。LiveCDでもいいかと)

インストール
nicはe1000を指定。virtioは残念ながら自分のiSCSIブート環境では使えなかった。
ディスクイメージはなるべく小さくする。
4GB程度で十分と思うが、SP3などの場合は6〜8GBくらいあると安心。
サイズが大きくても時間がかかるだけで特に問題はない。
インストール後、IntelのサイトからXP用e1000ドライバを導入する。
なお、XPの標準ドライバでは認識されないので、e1000のみで起動した場合、ファイルの受け渡しに困る。
事前にドライバ配置済みのディスクを一時的に追加するなり、model=virtio&virtio-win.isoマウントでe1000ドライバDL後にnic差し替えて起動しなおすなり、
なんとか導入する。

次にInitiator-2.08-boot-build3825-x86fre.exeを導入。
途中出てくる“Microsoft MPIO Multipathing Support for iSCSI”はチェックが外れていることを確認する。
マルチパス構成ではiscsiブートできない。
http://www.microsoft.com/downloads/en/details.aspx?familyid=12cb3c1a-15d6-4585-b385-befd1319f825&displaylang=en
で入手できる。Iscsi Boot Initiator 2.08 X86Freをクリック。
gPXEのWikiにはchk推奨と書いてあるが、相当やる気のある人以外Checked Buildである必要はない。と思う。

ここまでやったら仮想マシンを落としてとりあえずイメージをバックアップする。
スナップショットとか逆に面倒なので普通にtar.gzで固めた。

バックアップをとったら、用意していたLinuxKVMゲストにXPをインストールしたディスクをくっつけて起動。
もしくはホストのマシンがxとか入ってゴテゴテしているならkpartx使ってそのままマウントしても良い。
とにかくどこかのLinuxマシンにくっつけたら、そこでさらに転送先のiSCSIターゲットデバイスもマウントする。

# iscsiadm --mode=discovery --type=sendtargets --portal=xxx.xxx.xxx.xxx
# iscsiadm -m node --targetname iqn.yyyy-mm.:aaa.bbb.ccc.ddd --portal xxx.xxx.xxx.xxx:xxxx --login

ディスクを複製する。
基本的にhttp://etherboot.org/wiki/sanboot/transferにある通りにやればよい。

# fdisk -l /dev/sdX
  Disk /dev/sdX: 80.0 GB, 80026361856 bytes
  255 heads, 63 sectors/track, 9729 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  
     Device Boot      Start         End      Blocks   Id  System
  /dev/sdX1   *           1        1825    14659281    7  HPFS/NTFS

で、シリンダ当たりのバイト数(8,225,280)とパーティションの最後のシリンダ番号(1,825)を調べて

dd if=/dev/sdX of=/dev/sdY bs=8225280 count=1825

とすればよい。
sdXはXPをインストールしたディスク(NTFSになっているはず)、sdYは複製先のiSCSIターゲット(空のはず)を指定する。
転送が終わったらgPartedでNTFSを拡張する。
パフォーマンスの問題もあるしとりあえずLUNいっぱいに広げればいいと思うが、何個かのパーティションに切ってもそれぞれ認識する。
あとはFedoraの時と同様にDHCPサーバにrootへのパスを仕込む。<書きかけ>