FreeBSD on Hyper-V
FreeBSD 10.0-RELEASE で各種仮想化対応が GENERIC カーネルに入ったことにより、カスタムカーネルを作らなくても freebsd-update で仮想化対応カーネルが利用できるという、非常に楽な感じになってくれました。
とはいえ、旧来環境を何も考えずにアップデートすると 2 箇所ほどハマる点があります。
ネイティブネットワークアダプターを利用する場合
Hyper-V のネイティブネットワークアダプターが利用できるようになりますが、これを利用する際、ガシーネットワークアダプター (de) からネイティブのネットワークアダプター (hn) に名前が変わるため、この点に注意する必要があります。
最低限 rc.conf で hn0 などへアドレスを付けることとなるかと思いますが、Hyper-V マネージャーなどからレガシー NIC を削除せずに起動する場合、依然として de が残ることとなります。
このため、アドレスの付け替えは再起動後に hn が生えていることを確認してから、一括で行った方が諸々簡単な感じです。
また、アドレスの付け替え以外にも、ファイアウォールのルールの他、例えば munin などで NIC のトラフィックやエラー状況を監視している状況などがあり得ます。
場合によっては IPv6 アドレスで ff02::1%de0 などのような指定があったり、daemon に割り付けるアドレスを「特定のインターフェースが持っているアドレス」としている場合もあるかもしれません。
こうした部分の変更を忘れると、監視系からエラーが飛びまくるなどの悲しい状況が発生します。
パーティションが見つからなくなる
Hyper-V ストレージ統合サービスをインストールすると (GENERIC カーネルで起動すると)、ストレージのデバイス名が変わる場合があります。この結果、kernel を読み込んだ後にパーティションのマウントに失敗します。
FreeBSD Integration Services for Hyper-V を見ると fstab を UUID ベースで指定する必要がある、ということとなっています。
が、実は良く見ると SCSI ストレージとしてアタッチされているので、ada0 なら da0 にするだけでも通ったりします。
dmesg 的にはこんな感じ。
da0 at blkvsc0 bus 0 scbus1 target 0 lun 0 da0: <Msft Virtual Disk 1.0> Fixed Direct Access SCSI-4 device da0: 300.000MB/s transfers da0: Command Queueing enabled da0: 204800MB (419430400 512 byte sectors: 255H 63S/T 26108C)
Hyper-V マネージャー側で IDE コントローラーの下に HDD をぶら下げていても da0 にアタッチされるので、Hyper-V マネージャーでコンソールを開けない状態でこの辺りを弄らずにうっかり再起動すると、かなり悲しいことになる可能性があります。