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

已经测试第一个链接,也就是微软的官方文档。在WSL2 Ubuntu20里测试都是正常的,步骤也很简单,Windows下载GitHub的msi安装,wsl里apt安装一些包。中间可能会提示要更新wsl ,直接运行wsl --update等待更新完成。测试系统是Windows10 21H2

2022-10-17更新

缩小虚拟机占用空间

hyper-v使用的磁盘文件格式是vhd、vhdx,如果设置了动态扩展,这两种磁盘文件只会增大空间,而不会缩小空间,即使你虚拟机里已经删除了很多文件。

解决方法:

右键选择设置,选择的硬盘驱动器,右侧点编辑
在这里插入图片描述
接着下一步,然后选择压缩。 下一步即可
在这里插入图片描述
有时候点压缩会一闪而过,什么也没发生。

这需要先在宿主机上挂载整个磁盘,在磁盘管理器里附加VHD,注意需要勾选只读
在这里插入图片描述
然后再文件管理器中右键本地磁盘->属性,选择优化。选择刚才附加的虚拟磁盘优化即可。
win10无法优化虚拟磁盘,优化后就可以压缩了
看之后的那篇文章,这步操作非必要,可以跳过,也可以试下
在这里插入图片描述
接着重新执行上面的压缩操作就可以减小哪个vhdx的大小了,之后将挂载的磁盘脱离即可

还有一种是使用powershell命令来操作,参考链接:https://www.sikich.com/insight/how-to-compact-dynamic-vhd-and-vhdx-files-in-hyper-v-2012-and-newer/

大概就是在powershell里依次执行三个命令:

以只读挂载磁盘(和上面在设备管理器手动附加VHD是一样的)
Mount-VHD -Path "C:\ClusterStorage\Volume1\VM1\Virtual Hard Disks\VM1.vhdx" -ReadOnly
优化磁盘
Optimize-VHD -Path "C:\ClusterStorage\Volume1\VM1\Virtual Hard Disks\VM1.vhdx" -Mode Full
卸载磁盘
Dismount-VHD "C:\ClusterStorage\Volume1\VM1\Virtual Hard Disks\VM1.vhdx"

Windows10操作有问题,C盘怎么弄都无法减少空间,只有虚拟机的D盘这么操作才有用。上面测试用的Windows11,没什么问题

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hyper-V 是微软的一款虚拟化平台,可以用于批量建立虚拟机。在 Hyper-V 中,我们可以使用 PowerShell 脚本来实现批量建立虚拟机的操作,以下是一个示例的代码: ```powershell # 定义虚拟机基本参数 $VMNamePrefix = "MyVM" $VMCount = 5 $VMGeneration = 2 $VMSwitch = "ExtenalSwitch" # 建立虚拟机循环 for($i = 1; $i -le $VMCount; $i++) { # 使用 New-VM 命令创建虚拟机 $VMName = $VMNamePrefix + $i New-VM -Name $VMName -Generation $VMGeneration -SwitchName $VMSwitch # 配置虚拟机的内存和处理器 Set-VM -Name $VMName -MemoryStartupBytes 2GB -ProcessorCount 2 # 创建虚拟硬盘并连接到虚拟机 $VHDPath = "C:\HyperV\$VMName.vhdx" New-VHD -Path $VHDPath -Dynamic -SizeBytes 100GB Add-VMHardDiskDrive -VMName $VMName -Path $VHDPath # 设置启动顺序,使虚拟机从 VHD 启动 Set-VMFirmware -VMName $VMName -FirstBootDevice $VHDPath # 启动虚拟机 Start-VM -Name $VMName } ``` 上述代码中,我们首先定义了虚拟机基本参数,比如虚拟机名称前缀、虚拟机数量、代际和虚拟交换机。然后使用 `New-VM` 命令循环创建虚拟机,并使用 `Set-VM` 命令配置虚拟机的内存和处理器。接着,使用 `New-VHD` 命令创建虚拟硬盘,并使用 `Add-VMHardDiskDrive` 命令将虚拟硬盘连接到虚拟机。最后,使用 `Set-VMFirmware` 命令设置虚拟机的启动顺序,使虚拟机从虚拟硬盘启动,并使用 `Start-VM` 命令启动虚拟机使用以上代码,我们可以轻松批量建立指定数量的 Hyper-V 虚拟机,并进行相应的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值