嵌套虚拟化(nested virtualization)是一种在虚拟机内部继续虚拟化的一种技术,Linux Kernel 文档 Nested VMX 对于嵌套虚拟化特性有详细说明。曾经一度认为嵌套虚拟化只支持同类虚拟化技术(例如VMware虚拟机内嵌套部署VMware虚拟机,知乎上也有人讨论过只要硬件给力理论上是能够无限嵌套的:虚拟机中运行虚拟机中运行虚拟机……如此循环能运行多少个?),最近在研究KVM虚拟机镜像制作的时候才发现 VMware 实际上也是支持虚拟化 KVM 的(当然,前提还是硬件支持),不过实际操作才发现有些过程并不像网上的文章那么简单(主要的坑在于 GDK 的 bug),这里汇总整理下完整的操作步骤。(本文部分内容引用自其他文章,详情列于文末以示感谢。)

NOTE:

本文基于 vSphere 6.0 版本操作,其他版本可类比操作;

应用嵌套虚拟化之后性能必然有所下降,也会带来一定的不稳定性,比较适用于需要在 VMware 环境模拟 KVM 的场景,不建议使用在生产环境。

1. 开启VMware虚拟机的CPU虚拟化选项

首先,在VMware中创建一台虚拟机(建议版本 10 以上),并安装 Linux 操作系统(本文安装的是CentOS 7.2系统),在虚拟机关机的情况下做如下配置:

1)登录VMware桌面客户端 vsphere client,编辑虚拟机,设置“CPU/MMU虚拟化”选项,配置“使用Intel VT-x/AMD-v进行指令集虚拟化并使用Intel EPT/AMD RVI进行MMU虚拟化”;

fig1

2)登录 VMware 网页客户端 vsphere web client 对虚拟机做其他配置(VMware 还是太分裂,强行将设置放在 web 端,所以这里建议 vSphere 版本在 6.0 以上,web 的支持相对好那么一点点,虽然也还是一样难用);

3)如果前面创建的虚拟机版本较低(版本9、10),这里还需要升级虚拟机的兼容性:在虚机上右键选择“兼容性”->“升级虚拟机兼容性”;

fig2

4)再次进入虚拟机的编辑设置界面,打开 CPU 选项卡,有一行“硬件虚拟化:向客户机操作系统公开硬件辅助的虚拟化”,将其打钩即可打开虚拟机的 CPU 虚拟化功能;

fig3

VMware 的配置操作到此结束,接下来是虚拟机内部操作。

2. 配置虚拟机 KVM 模块

1)打开虚拟机电源,登录虚拟机执行以下命令检查虚拟机是否支持虚拟化:

# grep vmx /proc/cpuinfo

如果该命令有信息输出,就说明 CPU 支持虚拟化,可以继续往下进行;否则 CPU 不支持的情况下无法进行嵌套虚拟化部署。

注意,由于大多数服务器基于 Intel CPU,本命令只针对 Intel CPU,对于 AMD CPU 将命令中的 vmx 改成 svm 即可。

2)执行以下命令查看是否加载KVM模块:

# lsmod | grep kvm

如果没有加载,依次执行以下命令:

# modprobe kvm

# modprobe kvm-intel(针对Intel CPU)或者 modprobe kvm-amd(针对AMD CPU)

# lsmod | grep kvm

3. 虚拟机环境安装

1)将虚拟机 Python 环境配置为 2.7 版本,并安装 KVM 与 virt-manager;

yum install qemu qemu-kvm

yum install virt-manager libvirt libvirt-Python python-virtinst libvirt-client virt-viewer -y

2)为防止出现 GDK 图形界面异常:

DEBUG (cli:257) Uncaught exception:

Traceback (most recent call last):

File "/usr/share/virt-manager/virtManager/createnet.py", line 830, in finish

self.set_finish_cursor()

File "/usr/share/virt-manager/virtManager/baseclass.py", line 272, in set_finish_cursor

cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress")

TypeError: constructor returned NULL

需要编辑 /usr/share/virt-manager/virtManager/baseclass.py 将其中涉及Gdk.Cursor.new_from_name行注释掉(简单粗暴的操作有时候意外的有效):

#cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress")

#gdk_window.set_cursor(cursor)

#cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "default")

#gdk_window.set_cursor(cursor)

同样编辑 /usr/share/virt-manager/virtManager/asyncjob.py 将其中涉及 Gdk.Cursor.new_from_name 行注释掉:

#gdk_window.set_cursor(

# Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress"))

3)在 Terminal 中运行 virt-manager 命令打开 Virtual Machine Manager:

fig4

4)如果没有图中的 connection,可以新建一个connection(QEMU/KVM);

5)对已有的 connection 创建NAT虚拟网络:

fig5

6)在控制台界面或者直接使用命令创建新的虚拟机。

创建虚拟机之后,为了防止打开控制台窗口出现无法连接到图形界面错误:

Error connecting to graphical console: could not get a reference to type class

需要设置显示模式为“vnc server”

fig6

随后,就可以按照正常的操作系统安装步骤配置安装虚拟机了。

Tips

virt-manager 的日志位于 /root/.cache/virt-manager/virt-manager.log,任何问题均可以查询日志。使用参数--no-fork打开virt-manager(virt-manager --no-fork)可以不输出日志。

Reference & 致谢

vmware嵌套虚拟化对服务器的影响,VMware 虚拟机嵌套部署 KVM 虚拟机小结相关推荐

  1. vmware 上部署 kvm虚拟机

    vmware 上部署 kvm虚拟机 1.新建虚拟机,并确保打开了cpu里面的支持vm虚拟化的3个选项. 2.mkdir /data 3.qemu-img create -f qcow2 /data/y ...

  2. KVM虚拟化技术(在Centos虚拟机里部署Centos虚拟机)

    文章目录 KVM 一.虚拟化技术 1.虛拟化技术概念 2.虚拟化技术发展 3.类型 (1)全虚拟化: (2)半虚拟化: (3)直通: 4.特性 二.KVM简介 概述 三.KVM架构及原理 1.KVM虛 ...

  3. 龙芯3A4000服务器部署kvm虚拟机指导

    一.部署环境和软件包准备 1.1 环要求 龙芯3A4000 1.2 软件包清单 qemu-kvm-ev-2.12.0-33.1.lns7.3.loongnix.mips64el libvirt-4.5 ...

  4. VMware Workstation 在此主机上不支持嵌套虚拟化。 模块“HV”启动失败。 未能启启动虚拟机

    win10下docker和虚拟机无法同时启动,当关闭docker准备启动虚拟机时,需要把hypervisorlaunchtype改为off,当关闭虚拟机准备启动docker时,需要把hyperviso ...

  5. KVM嵌套虚拟化 -- 在虚拟机中创建虚拟机

    嵌套虚拟化 一般情况下,我们是无法在KVM虚拟机里面再去创建虚拟机的,因为我们的KVM虚拟机的CPU默认情况下并不支持虚拟化功能,对于Inter的CPU来说,如果要支持虚拟化功能,必须要有一个叫vmx ...

  6. VMware Workstation 在此主机上不支持嵌套虚拟化。报错一秒解决

    VMware Workstation 在此主机上不支持嵌套虚拟化.这是由于VMware与Windows11自带的Hyper-V冲突所导致的.简单的解决方法是:将虚拟机设置中的CPU虚拟化取消勾选,如图 ...

  7. 嵌套虚拟化_下一代云的嵌套虚拟化

    十年前,当首次引入"云"主题时,重点是公共基础架构中的简单服务. 但是,正如技术中的典型特征一样,这些服务随其使用模型一起发展. 同样,在商用硬件上引入虚拟化也着眼于最简单的使用模 ...

  8. 服务器电脑能装虚拟机吗,戴尔服务器安装虚拟机并部署Windows 2003 Server

    关于免费ESXi 5.1的12G服务器安装和Windows 2003 Server的部署声明: 本文档仅描述在12G服务器上安装ESXi系统和部署Win2003虚拟机的过程,并不涉及项目前的规划/适用 ...

  9. VMware ESXi 嵌套虚拟化 部署问题总结

    转载:http://blog.sina.com.cn/s/blog_538c78d60102w1w6.html 一.如何对ESXi中的网卡进行Up 和Down操作 服务器安装了ESXi6.0,需要在交 ...

最新文章

  1. php ajax formdata 进度,使用formdata使用ajax将数据发送到PHP
  2. Microbiome:微生物组研究中优化方法和规避误区
  3. 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  4. 实验 7:流类库与输入输出
  5. linux shell if语句使用方法
  6. Java线程--扩展
  7. 如何为iPhone 5屏幕分辨率开发或迁移应用程序?
  8. i7 9750h和i7 8750h参数对比差多少
  9. 5种方法,加密你的Python代码 !
  10. 2023考研数学冲刺模拟卷资源———以及模拟卷难度评估
  11. CPen虚线无效问题
  12. 生成世界地图并在地图上画圆圈
  13. 左特征向量与右特征向量
  14. 数组14:分离整数各位
  15. bzoj 4605 崂山白花蛇草水
  16. 疲劳载荷与S-N曲线
  17. 代理模式(JDK、CGLIB)
  18. 【模拟CMOS集成电路】电路失调与CMRR—— 随机失调与系统失调分析(1)
  19. select count(1) 、select count(*) 、select count(字段)的区别、及性能
  20. 利用正态分布进行异常点检测

热门文章

  1. mysql账号相关的操作和安全管理
  2. Python nltk包
  3. 使用docker部署vue_如何使用Vue,Docker和Azure进行持续交付
  4. 区块链数学建模_试图通过高中数学课程来解释区块链
  5. goldilocks数据库_如何找到您的开源Goldilocks区域
  6. 机器学习recall含义_机器学习的业务含义
  7. 用Python做一个简单的翻译工具
  8. 双向链表的增、删、查、改、python实现,超详细讲解
  9. Flink SQL 1.11 新功能与最佳实践
  10. 通货膨胀时是否提前还本付息--郎咸平