1

My Situation

I am running VirtualBox v5.2.32 on an Ubuntu 18.04 host. I have created a Windows 10 (64-bit) guest. I installed VirtualBox v6.0.10 in the Windows 10 guest (Windows 10 Pro - v1903 - 64-bit). I am trying to create an Ubuntu (64-bit) guest inside the Windows 10 guest. I only see 32-bit options inside the Windows guest. After several attempts to resolve this, I am still only seeing 32-bit options.

My Intention

The purpose for creating a VM inside a VM is to be able to ensure that VirtualBox is working so that I can test Vagrant configuration inside a Windows 10 environment. Our Vagrant config is using 64-bit base images, so I need to be able set up 64-bit guests inside this Windows 10 guest.

What I Have Already Tried

...on the Ubuntu Host

I have checked Enable VT-x/AMD-V on the System > Acceleration tab in the Ubuntu host's VirtualBox config for the Windows 10 guest machine.

...on the Windows Guest

In the Windows guest machine, I can see that the host's physical CPU details are passed through in Settings > System > About and it shows as a "64-bit operating system, x64-based processor".

This is a vanilla Windows 10 Pro installation, no additional software (i.e., no addon virus protection software).

I inspected Windows Features to ensure that the following are not checked:

  • Guarded Host
  • Hyper V
  • Virtual Machine Platform
  • windows Hypervisor Platform
  • Windows Subsystem for Linux

...because my googleing seems to indicate that some or all of these might be an issue.

Based on a VirtualBox forum (I have a 64bit host, but can't install 64bit guests), using gpedit.msc, I set Local Computer Policy > Computer Configuration > Administrative Templates > System > Device Guard > Turn on Virtualization Based Security to Disabled. I also check that Windows Security > Device Security > Core Isolation Details is set to Off.

I have "repaired" the VirtualBox installation. I have uninstalled VirtualBox, rebooted, reinstalled, and then rebooted again.

Related Stack Exchange Questions and Other References

I looked at these related, previously asked questions and followed their suggestions as indicated in the steps above. Everything I am finding seems to be related to a Windows 64-bit host running directly on the host machine, not dealing with a Windows host which is itself a guest VM.

2

I am running VirtualBox v5.2.32 on an Ubuntu 18.04 host. I have created a Windows 10 (64-bit) guest. I installed VirtualBox v6.0.10 in the Windows 10 guest. I am trying to create an Ubuntu (64-bit) guest inside the Windows 10 guest. I only see 32-bit options inside the Windows guest. After several attempts to resolve this, I am still only seeing 32-bit options.

VirtualBox does not support hosting a 64-bit virtual machine within another virtual machine.

I have enabled VT-x/AMD-V in the Ubuntu host's VirtualBox config for the Windows 10 guest machine.

While you have VT-x/AMD-V enabled, which is the reason you are able to run the first 64-bit virtual machine, it is not being passed through to the virtual machine. VirtualBox nested virtualization does not support, exposing the virtualization technology x86 extension, to a nested virtual machine. This is the reason you are unable to run a 64-bit operating system within the second virtual machine.

Everything I am finding seems to be related to a Windows 64-bit host running directly on the host machine, not dealing with a Windows host which is itself a guest VM.

This is due to the fact what you want is extremely niched. What you want is not possible with VirtualBox using your current hardware.

Oracle VM VirtualBox supports nested virtualization on host systems that run AMD CPUs. This feature enables the passthrough of hardware virtualization functions to the guest VM. That means that you can install a hypervisor, such as Oracle VM VirtualBox, Oracle VM Server or KVM, on an Oracle VM VirtualBox guest. You can then create and run VMs within the guest VM.

**However, even with nested virtualization enabled, what you want is not possible with the AMD hardware you currently have. In order for VirtualBox to be used your processor must support Rapid Virtualization Indexing.

Rapid Virtualization Indexing (RVI), known as Nested Page Tables (NPT) during its development, is an AMD second generation hardware-assisted virtualization technology for the processor memory management unit (MMU).

AMD-V is considered the first generation hardware virtualization. In order to enable nested virtualization, on a system with the required processor, you must use the --nested-hw-virt option with the modifyvm command.

Source: Nested Virtualization

Host machine is an AMD Opteron 6338P. Enable VT-x/AMD-V is checked in the VM config for the Windows guest machine. So, VT-x should be exposed to the Windows guest.

VT-X only exists on Intel hardware. Your AMD Opteron 6338P only supports AMD-V. However, the option you have selected, allows you to run a 64-bit operating system within the virtual machine. It does not actually enabled what limited nested virtualization VirtualBox supports.

| improve this answer | |
  • Technically, my comment about nested virutalization was incorrect, since ESXi would also support nested virtualization. However, ESXi is an entirely different beast, when compared to VMWare Workstation, Hyper-V, and VirtualBox. – Ramhound Aug 20 '19 at 16:42
  • Ah, so it would seem that what I am trying to do is just not possible with my current stack (i.e: VirtualBox). – Karl Wilbur Aug 20 '19 at 16:49
  • running 32-bit guests doesn't need VT-x or AMD-V because it can be done with simple dynamic binary translation. So you can always run a 32-bit guest without VT-x, but that doesn't mean that nested virtualization is enabled – phuclv Aug 20 '19 at 16:54
  • 1
    @phuclv - I Appreciate you pointing out that processor the author does not support the correct AMD hardware virtualization that VirtualBox requires to support nested virtualization. Was able to better refine my answer due to that commenatary. – Ramhound Aug 20 '19 at 17:07
  • Doing a little more research, it seems that it may be possible with VirtualBox v6+ on the host machine. Since VBox v5- doesn't support nested virtualization. I misunderstood that thought that I needed VBox v6+ on the guest to handle nested virtualization. Ref: docs.oracle.com/cd/E97728_01/F12470/html/… – Karl Wilbur Aug 20 '19 at 17:07
1

64-bit virtual machines need VT-x to run, therefore if VT-x was not exposed to the VM then you cannot run another VM inside the current VM. You need to enable nested virtualization in the Windows VM by running

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

Of course you need to check if your CPU supports nested virtualization or not first

But it looks like VirtualBox only supports nested virtualization on AMD so you'll need to use another hypervisor

See also

| improve this answer | |
  • This is a good answer, but it's important to point out the command you suggest, only helps if the hypervisor was Hyper-V. It doesn't any anything, since the author is using VirtualBox. – Ramhound Aug 20 '19 at 16:40
  • Host machine is an AMD Opteron 6338P. Enable VT-x/AMD-V is checked in the VM config for the Windows guest machine. So, VT-x should be exposed to the Windows guest. The Windows guest does see that it is running on the host CPU. – Karl Wilbur Aug 20 '19 at 16:41
  • 1
    @KarlWilbur are you sure to check the "Enable Nested VT-x/AMD-V" in the Processor tab, instead of the "Enable VT-x/AMD-V" in the Acceleration tab. Anyway it looks like the Opteron 6338P doesn't support nested virtualization. The ones that support are listed with "Rapid Virtualization Indexing" – phuclv Aug 20 '19 at 16:52
  • @phuclv: Thanks! Yeah, it seems that I don't have the right hardware to support what I wanted. That while it is possible, just not on my host machine. – Karl Wilbur Aug 20 '19 at 17:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.