前言
之前一段时间从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
端口转发
将虚拟机的某个端口服务转发到主机的某个端口
一般都是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