2008年10月3日 のアーカイブ

FreeBSD 7.1 on Windows Server 2008 + Hyper-V

2008年10月3日 金曜日

G33/C2Q6600 と 690G/Athlon64 X2 5200+ の構成で、
ちょこっと触ってみたけど、FreeBSDを再起動できないな;;
そのままだと仮想マシンが停止してしまう。
そこで触らぬ神にたたりなし?ってわけでPCIアドレスレジスタを
いじらないようにする怪しげなパッチを作成してみた。

diff -aur src-orig/sys/dev/pci/pci.c src/sys/dev/pci/pci.c
--- src-orig/sys/dev/pci/pci.c 2008-08-23 12:40:49.000000000 +0900
+++ src/sys/dev/pci/pci.c 2008-10-02 23:53:03.000000000 +0900
@@ -3590,6 +3590,11 @@
  struct pci_devinfo *dinfo = device_get_ivars(child);
  pcicfgregs *cfg = &dinfo->cfg;
 
+ /* 0x1011: DEC, 0x0009: 21140, 0x10: PCIR_BARS, 0x28: PCIR_CIS */
+ if (dinfo->cfg.vendor == 0x1011 && dinfo->cfg.device == 0x0009)
+  if (reg >= 0x10 && reg < 0x28)
+   return;
+
  PCIB_WRITE_CONFIG(device_get_parent(dev),
      cfg->bus, cfg->slot, cfg->func, reg, val, width);
 }

用意するもの:
Hyper-Vが動くCPU搭載のパソコン
Windows Server 2008 64ビット版
FreeBSDイメージ 7.1-PRERELEASE-200809-i386-disc1.iso など
パッチファイル fbs71-200809-hvpatch.bz2

FreeBSDは以下からダウンロードしておく。
ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/200809/

Windows Server 2008 をインストールして、
Windows Update をかけて最新にする。
サーバーマネージャの役割から Hyper-V を追加する。
Hyper-V マネージャから仮想マシンを作成する。
仮想マシンの設定を開いてネットワーク アダプタを削除する。
ハードウェアの追加からレガシ ネットワーク アダプタを追加する。
お好みでプロセッサ数やメモリを変更する。

FreeBSD を仮想マシンにインストールする。
パッチを適用してカーネルを更新する。

# cd /usr/src
# bzcat < /path/to/fbs71-200809-hv.patch.bz2 | patch -p1
# make buildkernel
# make installkernel
# shutdown -r now

初回カーネルを更新するまで再起動で停止してしまうので、
タスクマネージャのプロセスのタブからvmwp.exeを見つけて終了させる。

おまけ:
Windows2000もHyper-Vで動くようだけど、
ネットワークを触りにいったとたんに反応なくなります…。
フリーズしたまま5分ほど放置すると何事もなかったように動きます(汗)
以後、仮想マシンを再起動するまでは平気な模様。
Server 2003、2008、XPでは起こらないので2000固有の問題かと。
(Vistaは未確認)

追記:
vmwp.exeの終了のしかたはこちらの記事を参考にしてください。