hyper-v虚拟机的基本使用

前言

之前一段时间从Vmware换成了hyper-v,最直观的感受就是蓝屏变多了(机械革命不能用驱动软件装驱动,最好使用官网的)。其他用着还可以,配合remoteApp的话很完美。什么东西都可以放虚拟机,使用起来也和在主机一样的效果。

这样操作可以方便迁移,基本上的环境都装在虚拟机。以后重装系统,只需要开启hyper-v,然后导入虚拟机即可。

在这里插入图片描述
注意看任务栏的图标,右下角多个小圆圈的软件都是安装在虚拟机的软件,但是用起来和安装在主机是一样的。唯一的缺点是有时候操作文件不方便,虽然剪切板是共用的,但有些软件并不支持直接粘贴文件

下面那个图标也可以去掉,在任务栏设置里把显示角标去掉就能和宿主机的效果一模一样

可以专门弄个虚拟机来放流氓软件。

基本使用

开启hyper-v

开启hyper-v功能就不多说了,就是控制面板-》程序-》程序和功能-》启用或关闭Windows功能里开启Hyper-V,我一般会把适用于Linux的Windows子系统虚拟机平台Windows虚拟机监控程序平台都打开。

开启完功能后电脑重启后,就可以在搜索里找到hyper-v管理器
在这里插入图片描述

安装系统

这个操作也很简单,基本和Vmware一样。准备一个iso镜像,填一些参数就可以。有个指定代数的选项:我一般安装Windows选择第二代,安装Linux选择第一代。不太清楚两个有什么本质的区别,用起来会有什么不一样的感觉

如果选择第二代,第一次启动的时候需要按F2才能进入安装界面

修改默认存储路径,操作-》Hyper-v设置-》虚拟机 选择一个路径即可

想用ghost文件来安装虚拟机,会麻烦一点,具体请看另一篇文章:hyper-v安装ghost备份文件

如果是其他机器备份的ghost文件,大概率安装完成后是无法正常使用的,比如很卡,这是因为驱动不兼容。

虚拟机交换机

在这里插入图片描述
Windows10开启虚拟机的话,会有一个Defaullt Switch的默认网路,这个网络会给虚拟机自动分配ip和dns,奇葩的是每次分配的IP都是不固定的。

所以需要自己建个网络,让虚拟机里的IP固定。有三种网络:外部(桥接)、内部(Nat)和专用(不知道)。一般选择内部(Nat)就足够了,桥接的话有一些小问题,比如只支持有线网卡桥接。

新建虚拟机网络交换机-》内部-》改个名字点应用就创建完成了。

然后打开网络适配器,右键刚才创建的网络(如,vEthernet(hyper-Nat)),属性,然后选择Internet协议版本4,输入一个192.168.x.1的内网IP地址。
在这里插入图片描述
如果虚拟机内只使用自己创建的网络,需要设置IP和dns,因为没有DHCP服务并不会自动分配ip和dns。Windows虚拟机的话设置步骤和上面的图一样,只需要IP改成192.168.x.2这种,再在下面设置下国内的dns(114.114.114.114)。

为了避免这么麻烦,所以我一般给虚拟机分配两个网络适配器,一个是默认的用于连接互联网,一个是我创建的内部网络,用于虚拟机和主机间的通信
在这里插入图片描述
和Vmware一样,Nat网络基本可以满足日常的需求了。虚拟机可以随意访问局域网的东西,如果外部计算机需要访问虚拟机的服务,就需要在主机做端口转发

如果需要桥接请看:https://blog.51cto.com/u_15162069/2761935

端口转发

将虚拟机的某个端口服务转发到主机的某个端口

微软官方教程:https://docs.microsoft.com/en-us/windows-server/networking/technologies/netsh/netsh-interface-portproxy

一般都是ipv4转发到ipv4,所以以这个为例

netsh interface portproxy add v4tov4 listenport=主机端口 connectaddress=虚拟机IP connectport=虚拟机端口 listenaddress=主机IP protocol=tcp
比如需要转发虚拟机3389端口到主机的33333端口,假设虚拟机IP为192.168.158.100

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=33333 connectaddress=192.168.158.100 connectport=3389

这样内网的其他的机器就可以通过主机的IP:33333连接到虚拟机了

netsh interface portproxy show v4tov4 列出v4tov4的所有转发规则
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=33333 删除这个转发规则

注意这个命令并不是hyper-v专用的,其他任何服务都可以使用,包括Vmware里的服务也可以这么设置,不过Vmware Nat网络里可以设置端口转发规则

hyper-v保留端口

hyper-v会预留一些端口,做什么用不清楚。如果你正打算分配的端口在预留端口内,就会造成端口冲突。

所以需要设置让他预留的那部门端口在不常使用的那一段,详细请看这篇文章

查看预留端口
netsh int ipv4 show dynamicport tcp
查看已经被使用的端口
netsh int ipv4 show excludedportrange protocol=tcp
设置预留端口,起始为49152,总量为16384
netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384

只要避免使用49152-65535范围内的端口,就不会出现冲突了

导入导出虚拟机

直接在界面上选择导出,然后指定一个文件夹即可导出,实际上应该只是复制了虚拟机的文件,如果你把虚拟机的文件拷贝到另一个机器直接导入也是可以的。

导入也很方便,选择刚才导出的文件夹下一步即可。这里有个选择导入类型,如果是其他机器拷过来的虚拟机就直接选第一个就地注册,如果是你刚才本地导出的虚拟机,想导入复制一个则选择复制虚拟机。

虚拟机目录下有三个子目录

  • Snapshots: 快照的存放目录(检查点)
  • Virtual Hard Disks: 虚拟机磁盘的存放目录
  • Virtual Machines:这个应该是虚拟机设置的存放目录

实际上只需要Virtual Hard Disks就可以在另一个机器导入这个虚拟机。就是会丢失快照信息和虚拟机配置信息。在Virtual Hard Disks目录有两种格式的磁盘文件,.vhdx和.avhdx,前者是虚拟机磁盘,后者是快照磁盘。要先将两种文件进行合并,教程请看:合并hyper-v快照

大概就是先用Get-VHD获取这个磁盘的信息(磁盘间的层级关系),然后用Merge-VHD合并(顺序要一致)。这个一般用不到,只是我刚开始用的时候不知道有导出和导入的功能了,直接加载的.vhdx磁盘,发现已经安装的好多软件都没有了,然后合并其他的avhdx文件才正常了。

usb连接

hyper-v可以直连主机的硬盘,先在主机的磁盘管理里选中需要的磁盘右键脱机,然后在虚拟机设置里就可以添加这个脱机的磁盘。

但是hyper-v无法直接其他usb设备,比如我想在虚拟机里用usb使用adb命令就做不到,当然这个可以用WiFiAdb来代替。hyper-v是用于服务器的虚拟,没有这个功能也很正常。

百度了一番,有些软件可以做到,比如usbip,我还没测试,先放下这些软件的链接

https://docs.microsoft.com/en-us/windows/wsl/connect-usb
https://github.com/dorssel/usbipd-win
https://github.com/cezanne/usbip-win
https://yadom.in/archives/usb-passthrough-hyper-v-and-wsl2.html


版权声明:本文为Qwertyuiop2016原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。