[3] 操作系统 · 2021年8月1日

虚拟机[VMware/KVM/VirtualBox]

winapps & KVM

KVM虚拟机

kvm安裝準備

想要运行超过 2GB 内存的客户机,你必须拥有一个 64位主机系统。

在继续安装之前,确保你的 Ubuntu 主机支持 KVM 虚拟化。这个系统必须拥有 支持 VT-x(vmx)的 Intel 处理器 或者支持 AMD-V (svm) 技术的 AMD 处理器。

输入下面的 grep 命令来看看你的吹气是否支持硬件虚拟化:

grep -Eoc '(vmx|svm)' /proc/cpuinfo

如果你的 CPU 支持硬件虚拟化,这个命令将会打印出大于0的数字,这代表 CPU 核心数目。否则,如果输出为0,它意味着这个 CPU 不支持硬件虚拟化。

想要检查 VT 是否在 BIOS 中启用了,使用kvm-ok工具,它被包含在cpu-checker软件包。以 root 或者其他有 sudo 权限用户身份运行下面的命令,安装这个软件包:

sudo apt update
sudo apt install cpu-checker

一旦安装完成,检查你的系统是否可以运行硬件加速的 KVM 虚拟机:

kvm-ok

如果处理器虚拟化能力没有在 BIOS 中被禁用,命令将会打印出:

INFO: /dev/kvm exists
KVM acceleration can be used

否则,这个命令将会打印一个失败信息,和一个关于如何启用这个组件的简短消息。启用 AMD-V 或者 VT 技术的过程依赖于你的主板和处理器类型。根据你的主板文档信息来配置你的系统 BIOS。

在 Ubuntu 20.04 上安装 KVM

运行下面的命令安装 KVM,和额外的虚拟化管理软件包:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
  • qemu-kvm – 为 KVM 管理程序提供硬件模拟的软件程序
  • libvirt-daemon-system – 将 libvirt 守护程序作为系统服务运行的配置文件
  • libvirt-clients – 用来管理虚拟化平台的软件
  • bridge-utils – 用来配置网络桥接的命令行工具
  • virtinst – 用来创建虚拟机的命令行工具
  • virt-manager – 提供一个易用的图形界面,并且通过libvirt 支持用于管理虚拟机的命令行工具

运行下面的指令可以让 KVM 以非 root 用户运行

sudo sed -i "s/#user = "root"/user = "$(id -un)"/g" /etc/libvirt/qemu.conf
sudo sed -i "s/#group = "root"/group = "$(id -gn)"/g" /etc/libvirt/qemu.conf
sudo usermod -a -G kvm $(id -un)
sudo usermod -a -G libvirt $(id -un)
sudo systemctl restart libvirtd
sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/

一旦软件包被安装好,libvirt 守护程序将会自动启动。你可以通过运行下面的命令,验证它:

sudo systemctl is-active libvirtd

输出:

active

想要创建和管理虚拟机,你需要添加你的用户到“libvirt” 和 “kvm” 用户组。输入:

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

$USER是一个环境变量,用来记住当前登录用户的名字。

登出,并且重新登录,以便用户组被刷新。

安装 Windows 系统

需要安装 Windows 10 专业版系统,首先下载系统镜像以及一个工具:

  • Windows 10 ISO:https://www.microsoft.com/en-us/software-download/windows10ISO
  • KVM VirtIO drivers:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

下载完成后,打开虚拟系统管理器

接下来,选择编辑->首选项,然后选中 Enable XML editing。选中后直接新建一个虚拟机:

(如果创建失败,以管理员权限运行)

接下来按照图中选择:

然后选择下载好的 Win10 镜像:

官方推荐内存和CPU设置如下,实际上应该可以更多,按需选择:

选择虚拟机占用空间大小,这里是指最大空间,实际上虚拟机用多少它会占多少。上面的选项会自动在默认位置创建一个磁盘镜像,也可以选下面那个选项自己选择存储位置:

下一步尤其注意:把名称改为 RDPWindows,这样之后的操作时 FreeRDP 会自动找到你的虚拟机。同时选中在安装前自定义配置

接下来在 CPUs 选项卡中选中复制主机CPU配置

然后在去 XML 标签页,找到 <clock> 部分,将内容改为如下:

<clock offset="localtime">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="yes"/>
    <timer name="hypervclock" present="yes"/>
</clock>

点击 应用

然后在内存选项卡中将 当前分配 改为官方推荐的1024,如果内存多可以更高。

引导选项 中选中主机引导时启动虚拟机。

SATA 磁盘 1 中的高级选项里,将 磁盘总线 选为 VirtIO

NIC 中将 设备型号 改为 virtio

选择添加硬件,选择存储,选择之前下载的那个工具,然后将 设备类型 改为 CDROM 设备 :

完成后就可以开始安装了,安装过程和一般系统安装过程大同小异,一步一步来即可,注意要安装 专业版,只有专业版才有远程桌面。

到了选择安装位置这一步,你会发现没有位置让你选,此时按照下图操作:

这样就 OK 了,后面选择网络时不要连网,现在还连不上网。

系统设置

安装完成进入系统后,还是进入挂载着刚刚下载的工具的磁盘,安装 virtio-win-gt-x64.exe

装完就可以联网了,联网后需下载一个文件 RDPApps.reg,这个文件在 GitHub 上,网络原因可能下载不下来,可以到 gitee 上找到一个此项目的镜像来下载:https://gitee.com/Nucleon14_N14/winapps/raw/develop/install/RDPApps.reg,直接 Ctrl+s 保存。下载后右击该文件,选择合并,把这个文件合并到注册表里去。

接下来在系统设置中,找到 关于 ,然后 重命名这台电脑 把名字改成 RDPWindows ,但先不要重启,在远程桌面选项卡启用远程桌面。此时即设置完毕。

直接使用虚拟机

安装和网络配置

win7 使用 virtio-win-0.1.126.iso,virtio-win下载

  • virto硬盘寻找
  • 网卡在设备管理器更新

ubuntu主机 kvm win7共享目录

sudo apt install samba

sudo smbpasswd -a liupei

sudo vim /etc/samba/smb.conf

sudo systemctl status smbd.service

sudo vim /etc/samba/smb.conf,后面添加

[share]
path = /home/liupei/
#available = yes
browseable = yes
#public = yes
writable = yes

win7 下 windows+R 输入: \\samba服务器的ip\共享目录 然后回车即可连接。

参考文献:网卡驱动安装(太阳以西),samba配置,win7下samba访问(百度一下

winapps项目

WinApps 安装准备

运行下面的指令下载软件和依赖:

sudo apt-get install -y freerdp2-x11
git clone https://github.com/Fmstrat/winapps.git

创建 WinApps 配置文件

创建文件 ~/.config/winapps/winapps.conf,加入如下内容:

RDP_USER="MyWindowsUser"
RDP_PASS="MyWindowsPassword"
#RDP_DOMAIN="MYDOMAIN"
#RDP_IP="192.168.123.111"
#RDP_SCALE=100
#RDP_FLAGS=""
#MULTIMON="true"
#DEBUG="true"

各参数的作用可以去 GitHub 上 官方文档 里去看。

运行 WinApps installer

首先要验证 RDP 连接:

mv winapps .config/ -vi
cd .config/winapps
bin/winapps check

正常的话应该会输出让你选择是否接受证书,选择y即可,然后会弹出一个 Windows 的文件管理器,说明连接正常。接下来就可以安装 Win 下的软件了:

./installer.sh

运行完成后你应该就可以看到 Win 下的应用出现在了 Linux 里,简直和原生的一样。

挂载硬盘到虚拟机

更改上面的配置文件 ~/.config/winapps/winapps.conf,在 RDP_FLAGS 中填入内容,如下:

RDP_USER="MyWindowsUser"
RDP_PASS="MyWindowsPassword"
#RDP_DOMAIN="MYDOMAIN"
#RDP_IP="192.168.123.111"
#RDP_SCALE=100
RDP_FLAGS="/drive:D,/media/D /drive:E,/media/E /drive:F,/media/F"
MULTIMON="true"
#DEBUG="true"

/drive:GuestPath,HostPath 其中的参数 GuestPath 是指映射到虚拟机下的位置,HostPath 是指要映射过去的文件夹的位置

參考文獻:騰訊雲mond’s_page

KVM常用命令

实例

liupei@hpc:~$ virsh list
 Id   Name         State
----------------------------
 1    RDPWindows   running

liupei@hpc:~$ virsh suspend RDPWindows 
Domain RDPWindows suspended

liupei@hpc:~$ virsh list
 Id   Name         State
---------------------------
 1    RDPWindows   paused

liupei@hpc:~$ virsh resume RDPWindows 
Domain RDPWindows resumed

liupei@hpc:~$ virsh list 
 Id   Name         State
----------------------------
 1    RDPWindows   running

liupei@hpc:~$ virsh suspend RDPWindows 
Domain RDPWindows suspended

liupei@hpc:~$ virsh list 
 Id   Name         State
---------------------------
 1    RDPWindows   paused

说明

virsh list –all查看虚拟机和状态
virsh start  test 启动该虚拟机
 virsh reboot test        重启虚拟机
virsh  suspend test 虚拟机处于paused暂停状态,一般情况下是被admin运行了virsh suspend才会处于这种状态,但是仍然消耗资源,只不过不被超级管理程序调度而已。
virsh resume test把虚拟机唤醒,使其恢复到running状态
virsh shutdown test 关闭指令,是虚拟机进入shutoff状态,系统提示虚拟机正在被关闭,却未必能成功
virsh destroy test 强制关闭该虚拟机,但并非真的销毁该虚拟机,只是关闭而已。
virsh save test a 将该虚拟机的运行状态存储到文件a中
virsh restore a 根据文件a恢复被存储状态的虚拟机的状态,即便虚拟机被删除也可以恢复(如果虚拟机已经被undefine移除,那么恢复的虚拟机也只是一个临时的状态,关闭后自动消失)
virsh undefine test                                                  移除虚拟机,虚拟机处于关闭状态后还可以启动,但是被该指令删除后不能启动。在虚拟机处于Running状态时,调用该指令,该指令暂时不生效,但是当虚拟机被关闭后,该指令生效移除该虚拟机,也可以在该指令生效之前调用define+TestKVM.xml取消该指令
virsh edit test 修改TestKVM的配置文件,效果等于先dumpxml得到配置文件,然后vi xml,最后后define该xml文件(建议关机修改,修改完virsh define防止不生效)
virt-clone -o test -n test01 –file   /data/test01.img                                                                                                                                                 在-o后面为被克隆虚拟机名称,-n后克隆所得虚拟机名称,file为克隆所得虚拟机镜像存放地址。
克隆的好处在于,假如一个虚拟机上安装了操作系统和一些软件,那么从他克隆所得的虚拟机也有一样的系统和软件,大大节约了时间。
参考文献:运维工匠实战

VMware

VMware安装

sudo ./VMware-Workstation-Full-14.1.0-7370693.x86_64.bundle

vmware卸载

  1. vmware-installer -l 看装的什么产品
  2. sudo vmware-installer -u <产品名>, 即可卸载相应产品

wmware tool 增强功能灰化

问题描绘

解决办法如下:

1.关闭虚拟机;

2.在虚拟机设置分别设置CD/DVD、CD/DVD2和软盘为自动检测三个步骤;

3.再重启虚拟机,灰色字即点亮。

无法自动安装共享文件夹等

无法自动安装Virtual Machine Communication Interface(VMCI)驱动程序

问题出现原因

这个问题是由于微软从2019年12月3日已将Windows驱动程序签名更改为使用SHA-2算法,不支持SHA-2代码签名的旧版Windows系统将无法通过驱动程序签名验证。也就是说你的win7或者Windows Server 2008 系统中缺少使用新算法的签名,原来的SHA-1算法过时了。
详情见https://support.microsoft.com/en-us/topic/sha-2-code-signing-support-update-for-windows-server-2008-r2-windows-7-and-windows-server-2008-september-23-2019-84a8aad5-d8d9-2d5c-6d78-34f9aa5f8339

解决方案
可以从Microsoft Update Catalog下载KB4474419和 KB4490628这两个补丁,然后安装到win7虚拟机中。在没有成功安装VMware Tools的情况下,传文件不太方便,可以用虚拟机里浏览器访问下载页面,然后直接在虚拟机里下载安装。

下载地址:
KB4474419
KB4490628

安装补丁后,重启虚拟机,然后重新VMware Tools即可。

制作成iso,通过CD/DVD加载到虚拟机,

百度盘下载:01life/software/linux/vmware16.1/win7_vmware_share64.iso

链接: https://pan.baidu.com/s/1pbdDGoux1Nz06c2nwwYj_w 密码: 13um

参考文献:1

hardware graphics accelleration is not available

  1. 确保宿主机显卡驱动安装正常。Ubuntu和Debian系操作系统可以一键安装。其他操作系统自行百度。

检查驱动是否正常方法:控制台输入“glxinfo | grep -i Direct”命令,输出显示“direct rendering: Yes”则安装成功,如图所示。

liupei@T470:~$ glxinfo | grep -i Direct
direct rendering: Yes
    GL_AMD_gpu_shader_int64, GL_AMD_multi_draw_indirect, 
    GL_ARB_depth_clamp, GL_ARB_derivative_control, GL_ARB_direct_state_access, 
    GL_ARB_draw_elements_base_vertex, GL_ARB_draw_indirect, 
    GL_ARB_half_float_vertex, GL_ARB_indirect_parameters, 
    GL_ARB_multi_draw_indirect, GL_ARB_occlusion_query2, 
    GL_AMD_multi_draw_indirect, GL_AMD_performance_monitor, 
    GL_ARB_direct_state_access, GL_ARB_draw_buffers, 
    GL_ARB_draw_indirect, GL_ARB_draw_instanced, GL_ARB_enhanced_layouts, 
    GL_ARB_half_float_vertex, GL_ARB_indirect_parameters, 
    GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture, 
    GL_EXT_demote_to_helper_invocation, GL_EXT_direct_state_access, 

2. 编辑vmware的preferences文件,路径一般为home目录下的.vmware文件夹中,在preferences文件最后一行加入“mks.gl.allowBlacklistedDrivers = “TRUE””。

echo 'mks.gl.allowBlacklistedDrivers = "TRUE"' >>  ~/.vmware/preferences

3. 重启vmware即可。

参考文献:sevenfal’s web

VMware移动

产品 VMware Station Pro 16.0

  1. 确认所有虚拟机文件都存储在虚拟机目录中。
  2. 关闭客户机操作系统和虚拟机。
  3. 将虚拟机文件复制到新位置。
  4. 如果您将虚拟机移动到同一主机系统的其他位置,请从虚拟机库中移除该虚拟机,选择文件 > 打开,然后浏览到新位置中的虚拟机配置 (.vmx) 文件。
  5. 如果您将虚拟机移动到其他主机系统,请启动新主机系统上的 Workstation Pro,选择文件 > 打开,然后浏览到虚拟机配置 (.vmx) 文件。
  6. 当您确定虚拟机能在新位置正常工作后,请从原始位置删除虚拟机文件。
  7. 如果虚拟机无法正常工作,请确认您已将所有虚拟机文件复制到新位置。您可以检查虚拟机设备的设置来确定是否有任何关联文件指向了无法从新位置访问的位置。

参考文献:VMware Doc