我用Hyper-V创建的Ubuntu试图在virtualbox + vagrant上再创建另一个Ubuntu
首先
在团队开发中,我们使用VirtualBox + Vagrant + Ansible在本地构建开发环境。由于只有我一个人在使用Windows系统,所以在构建开发环境时需要做一些调整(因为Ansible不支持Windows作为控制机器,而VirtualBox不支持嵌套虚拟化)。
当时,我在WSL上操控着在Windows操作系统上安装的VirtualBox和Vagrant,并在WSL上运行Ansible。
我认为可能有更好的方法,于是在通过Windows + Hyper-V创建的虚拟机中尝试了VirtualBox + Vagrant。
最终目标是追求以下的构成。
-------------------------------
| Ubuntu (VirtualBox + Vagrant) |
---------------------------------------
| Ubuntu (Hyper-V) |
----------------------------------------------
| Windows |
------------------------------------------------
环境
主机端
Windows 10 专业版
Hyper-v
Intel Core i7-3770k
客人方
Ubuntu 16.04 版本
VirtualBox 6.0.0 版本
Vagrant 2.2.2 版本
将VirtualBox更改为Hyper-V。
由于VirtualBox和Hyper-V管理器使用的虚拟机技术不同(INTEL VT-x和Hyper-V),它们无法共存。
由于Docker for Windows 使用了 Hyper-V 技术,因此如果在使用VirtualBox时安装了 Docker for Windows,那么在从VirtualBox启动虚拟机时可能会导致蓝屏。这是由于使用了不同的虚拟化技术所引起的蓝屏问题。
Microsoft 公司对于启用 Hyper-V 进行了介绍。
Hyper-V を利用してUbuntu をたてる
Hyper-V を利用してUbuntu を入れる。
ここもMicrosoftさんが説明してくれている。
インストールが済んだあとVirtualBox とVagrant を導入する。
Vagrant up してみる
ハマりポイント1
vagrant init ubuntu/xenial64
vagrant up
然后
The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:
VirtualBox is complaining that the kernel module is not loaded. Please
run `VBoxManage --version` or open the VirtualBox GUI to see the error
message which should contain instructions on how to fix this error.
となり、起動できない。
原因はHyper-Vマネージャの設定 > ハードウェア > セキュリティ の”セキュアブートが有効” にチェックがついていることが原因だった。
なので、この設定を無効にする。
迷上了两大亮点。
重新启动虚拟机。
vagrant init
vagrant up
随后
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.
Command: ["startvm", "f59d4b5a-ecdb-4755-9918-77db8ed472d3", "--type", "headless"]
Stderr: VBoxManage: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
如果怀疑是作为VM机的一侧设置有问题,可以进行调查。我发现了一个被嵌套在Microsoft内的基于虚拟化的虚拟机执行的Hyper-V功能,我试试看。
请在Windows端以管理员权限启动PowerShell。
PS C:\WINDOWS\system32> Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
尝试执行。
重新启动虚拟机。
vagrant up
尝试之后,虚拟机成功启动。
总结
最初本来选择不使用Windows的话,但是最近Windows上也能做很多有趣的事情,例如WSL,所以我试着用了一下。
我觉得这样比之前用的方式更简单地进行虚拟机上的虚拟机操作。
Windows包括WSL在内,提供了一些开发友好的功能,所以尝试一下也是个不错的选择。