はじめに
一昨年の BitVisor Advent Calendar で HyperV 上で BitVisor を動かそうとして挫折した記事を書きました. 記事の最後には, 時間があればリベンジするかも.
などと書いていましたが完全に放置していたので,今回再挑戦してみようと思った次第です.
残念ながら,今も時間があるわけではないので,ほとんど一昨年の手順をもう一度試すだけになりました… 一昨年挑戦したときの記事–> https://qiita.com/deep_tkkn/items/7f55e507cbe2009c854c
結論
今年も結局動きませんでした...
動作環境
動作環境は一昨年と同じです.(そろそろ新しいマシンが欲しい)
- マシン: Thinkpad X220
- CPU: Intel Core i5-2520M CPU @ 2.50GHz
- RAM: 16 GB
- Host OS: Windows 10 Version 1903
- Guest OS: Ubuntu 18.04.2 with
- Guest kernel: Linux ubuntu1804 4.15.0-70-generic #79-Ubuntu SMP Tue Nov 12 10:36:11 UTC 2019 x8664 x8664 x8664 GNU/Linux
Nested Virtualization の有効化
一昨年の記事で Nested Virtualization を有効にする方法が説明されていたページをリンクしていたんですが,リンク切れしていたのでもう一度ここに書きます.
UI では Nested Virtualization に関する設定項目が全然見えないものの,CLI コマンドから設定できます. まずは今の設定を PowerShell (管理者権限で実行) で確認してみます.
PS C:\WINDOWS\system32> Get-VMProcessor ubuntu1804
VMName Count CompatibilityForMigrationEnabled CompatibilityForOlderOperatingSystemsEnabled
------ ----- -------------------------------- --------------------------------------------
ubuntu1804 1 False False
PS C:\WINDOWS\system32> Get-VMProcessor ubuntu1804 | Select *
VMCheckpointId : 00000000-0000-0000-0000-000000000000
VMCheckpointName :
ResourcePoolName : Primordial
Count : 1
CompatibilityForMigrationEnabled : False
CompatibilityForOlderOperatingSystemsEnabled : False
HwThreadCountPerCore : 0
ExposeVirtualizationExtensions : False
EnablePerfmonPmu : False
EnablePerfmonLbr : False
EnablePerfmonPebs : False
EnablePerfmonIpt : False
Maximum : 100
Reserve : 0
RelativeWeight : 100
MaximumCountPerNumaNode : 4
MaximumCountPerNumaSocket : 1
EnableHostResourceProtection : False
OperationalStatus : {}
StatusDescription : {}
Name : プロセッサ
Id : Microsoft:3E72556C-C387-40DF-A048-AB1E53C1DB27\b637f346-6a0e-4dec-af52-b
d70cb80a21d\0
VMId : 3e72556c-c387-40df-a048-ab1e53c1db27
VMName : ubuntu1804
VMSnapshotId : 00000000-0000-0000-0000-000000000000
VMSnapshotName :
CimSession : CimSession: .
ComputerName : WIN-45QGET4E7K9
IsDeleted : False
VMProcessor の ExposeVirtualizationExtensions
というのを True
じゃないといけないが, False
ですね,はい… というわけでこれを設定するために PowerShell で以下のようにする.
PS C:\WINDOWS\system32> Set-VMProcessor -VMName ubuntu1804 -ExposeVirtualizationExtensions $true
もう一度確認
PS C:\WINDOWS\system32> Get-VMProcessor ubuntu1804 | Select *
VMCheckpointId : 00000000-0000-0000-0000-000000000000
VMCheckpointName :
ResourcePoolName : Primordial
Count : 1
CompatibilityForMigrationEnabled : False
CompatibilityForOlderOperatingSystemsEnabled : False
HwThreadCountPerCore : 0
ExposeVirtualizationExtensions : True
EnablePerfmonPmu : False
EnablePerfmonLbr : False
EnablePerfmonPebs : False
EnablePerfmonIpt : False
Maximum : 100
Reserve : 0
RelativeWeight : 100
MaximumCountPerNumaNode : 4
MaximumCountPerNumaSocket : 1
EnableHostResourceProtection : False
OperationalStatus : {}
StatusDescription : {}
Name : プロセッサ
Id : Microsoft:3E72556C-C387-40DF-A048-AB1E53C1DB27\b637f346-6a0e-4dec-af52-b
d70cb80a21d\0
VMId : 3e72556c-c387-40df-a048-ab1e53c1db27
VMName : ubuntu1804
VMSnapshotId : 00000000-0000-0000-0000-000000000000
VMSnapshotName :
CimSession : CimSession: .
ComputerName : WIN-45QGET4E7K9
IsDeleted : False
OK そうですね.
参考 URL
- https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/nested-virtualization
- https://www.gmo.jp/report/single/?art_id=202
とりあえず試す
- Hyper-V 上で VM, Guest OS を用意
- 今回は別用で用意したものを流用
- 第一世代の VM (BIOS boot)
- BitVisor のバイナリをダウンロード, boot 以下に置く https://bitvisor.org の
Nigtyly Build
からダウンロード - grub の設定
-
/etc/grub.d/40_custom
に以下を追記menuentry "BitVisor" { multiboot /boot/bitvisor.elf }
-
/etc/default/grub
-
GRUB_TIMEOUT_STYLE
をhidden
からmenu
に -
GRUB_TIMEOUT
を0
から10
に
$ diff -u default_grub.backup /etc/default/grub --- default_grub.backup 2019-12-02 22:56:16.648771785 +0900 +++ /etc/default/grub 2019-12-02 22:56:29.527069551 +0900 @@ -4,8 +4,8 @@ # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 -GRUB_TIMEOUT_STYLE=hidden -GRUB_TIMEOUT=0 +GRUB_TIMEOUT_STYLE=menu +GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="splash quiet" GRUB_CMDLINE_LINUX=""
-
-
sudo grub-mkconfig -o /boot/grub/grub.cfg
-
結果
起動しませんでした… エラーも一昨年の記事と同じ…
どうでもいいんですが,この状態で VM に接続するとキーボードの Caps Lock のライトが点滅するんですよね… しかも光っている時に VM からフォーカスを外すと Caps Lock が入った状態になる… 地味に困ります.
32bit ビルドも試す
Nigtyly build はたぶん 64 bit 向けバイナリだと思いますが,一昨年の結果では 64 bit は厳しそうということだったので 32 bit 向けバイナリも試します.
- https://bitvisor.org/ からlatest のコードをダウンロード (bitbucket から clone してもいいと思います)
- make config して
64
を disable - make
- bitvisor.elf を差し替え
結果は...
こちらも去年と同じ結果でした orz …
おわりに
HyperV のバージョンなどは上がっていると思いますが,残念ながら一昨年と同じ結果になってしまいました.
(というか VMEntry Failure は調べるの辛すぎるから Intel さんもっと細かい情報をエラーコードで返してお願い…)
VMEntry Failure から調べるのは難しそうだったので,Windows のイベントビューアとか弄ってみてたのですが,時間切れになってしまいました...
おまけ
↓こういうことがなければもう少し調べられていた気がする(いいわけ)