适用场景
本文整理于 2026-10-22,适用于已经安装操作系统、可以从虚拟硬盘正常启动的 Hyper-V 第二代虚拟机。典型现象是每次开机先出现网络引导提示,等待一段时间后才进入系统。完成操作后,虚拟机将优先尝试系统盘,减少不必要的网络引导等待。
如果屏幕提示找不到任何操作系统,或者虚拟硬盘文件已经丢失,应先排查磁盘关联与系统引导文件。调整顺序只能改变尝试设备的先后,不能修复损坏的启动分区。
原理:先尝试哪个设备,由固件决定
第二代虚拟机使用统一可扩展固件接口,即 UEFI。固件维护一个启动列表,里面可能包含硬盘、虚拟光驱、网卡以及操作系统建立的启动项。网卡排在前面时,固件会先尝试预启动执行环境,即 PXE 网络引导。
Microsoft 提供两种相关设置方式:指定首个启动设备,或者重新提交完整启动列表。后者会移除没有列入新列表的现有启动条目。本文使用指定首个设备的方式,并事先保存完整顺序,降低误删启动条目的可能性。参数行为见 Set-VMFirmware 官方文档。
准备工作
安排允许虚拟机正常关机的时间,保存来宾系统内的文件,并确认已有可用备份。检查点不能代替独立备份。本文针对只有一块虚拟硬盘的入门环境;如果存在多块磁盘,应先根据系统内磁盘布局和虚拟磁盘路径确认系统盘。
在宿主机使用具有 Hyper-V 管理权限的 PowerShell。以下代码通过交互输入读取实际虚拟机名称,不需要填写任何登录信息。整个调整和回退过程应保留在同一个 PowerShell 会话中。
分步骤操作
第一步:确认目标和代数
执行以下只读查询:
$vmName = Read-Host '请输入实际虚拟机名称'
$vm = Get-VM -Name $vmName -ErrorAction Stop
$vm | Format-List Name, Generation, State
Get-VMHardDiskDrive -VMName $vmName |
Format-Table ControllerType, ControllerNumber, ControllerLocation, Path
变量 $vmName 保存实际输入的名称,$vm 保存查询到的虚拟机对象。确认代数为 2,并核对磁盘路径属于目标虚拟机。不要因为名称相似就继续操作。
第二步:记录原始配置
使用以下命令保存启动列表,同时将设备详情显示出来:
$before = Get-VMFirmware -VMName $vmName
$oldOrder = @($before.BootOrder)
$oldOrder | Format-List *
$oldOrder 是当前会话中的回退资料。另将输出保存到维护记录,或在 Hyper-V 管理器的设置中截图记录固件顺序。查询方式见 Get-VMFirmware 官方文档。
第三步:正常关机并调整首个设备
从来宾系统执行正常关机,等待管理器显示关闭状态,再运行:
$vm = Get-VM -Name $vmName
if ($vm.Generation -ne 2 -or $vm.State -ne 'Off') {
throw '请确认目标是已关闭的第二代虚拟机'
}
$disks = @(Get-VMHardDiskDrive -VMName $vmName)
if ($disks.Count -ne 1) {
throw '当前不是单磁盘环境,请先人工确认系统盘'
}
Set-VMFirmware -VMName $vmName -FirstBootDevice $disks[0]
(Get-VMFirmware -VMName $vmName).BootOrder | Format-List *
代码发现多块磁盘就停止,避免把数据盘误设为首个设备。磁盘查询字段可参阅 Get-VMHardDiskDrive 官方文档。
第四步:启动并观察控制台
在 Hyper-V 管理器中打开连接窗口,再启动虚拟机。重点观察是否直接进入原系统,以及磁盘和应用是否正常。保存一次配置前后的启动现象记录,便于判断此次修改是否解决了原问题。
验证方法
验证应同时包括配置和实际行为。配置层面确认硬盘位于启动列表首位;行为层面在正常关机后重新开机,确认不再先等待 PXE,且进入的是原有系统。一次成功启动不代表磁盘健康已经得到全面检查。
如果设置后仍然跳到网络引导,可能是前面的硬盘没有可用引导程序。此时应检查磁盘是否关联正确、系统是否采用适合第二代虚拟机的启动方式,并记录具体报错。
常见错误
第一代虚拟机使用不同的固件配置方式,不能直接套用本文命令。另一个错误是将完整启动顺序只写成一块硬盘,从而移除了其他启动条目。还有人看到引导失败就关闭安全启动,这会改变另一项安全设置,无法证明启动顺序本身是否有问题。
安全与回退
不要为了修改顺序强制断电,也不要同时改安全启动模板、磁盘控制器和磁盘文件。每次只改变一个因素,结果更容易判断。
需要恢复时,先正常关闭虚拟机,在原 PowerShell 会话执行:
Set-VMFirmware -VMName $vmName -BootOrder $oldOrder
(Get-VMFirmware -VMName $vmName).BootOrder | Format-List *
如果原会话已经关闭,则根据维护记录,在虚拟机设置的固件(Firmware)页面恢复原顺序。恢复后再次启动核验;若仍不能进入系统,应转入引导故障排查。
参考资料与转载说明
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?