Windows Server 2025 / 调整 Hyper-V 虚拟机的 CPU、内存与 VHDX 磁盘
虚拟机(virtual machine,VM)的 CPU、内存和磁盘配置需要同时考虑来宾工作负载与主机剩余能力;增加资源并不保证性能提高。先记录原始配置,每次只更改一个项目,才能比较结果并恢复原来的设置。
区分主机能力与来宾资源
虚拟处理器(vCPU)是呈现给来宾系统的处理器,不等于为它独占保留一个物理核心。内存可以采用固定或动态分配;VHDX 则是 Hyper-V 向来宾呈现的虚拟磁盘文件。多个来宾共享主机资源,主机存储空间不足或延迟升高可能同时影响它们。下表分别列出主机与来宾的观察点;来宾卷的可用空间和存放 VHDX 的主机卷可用空间是两回事。
| 资源 | 主机观察点 | 来宾观察点 |
|---|---|---|
| 处理器 | 其他虚拟机、CPU 配置和资源竞争。 | 同一工作中的处理器使用率与响应。 |
| 内存 | 可用容量及分配给来宾的内存。 | 内存使用、分页与应用需求。 |
| 存储 | VHDX 大小、物理可用空间与延迟。 | 卷容量、文件系统与可用空间。 |
使用上一课已创建并安装完成的 HVTEST01 测试虚拟机,其中不得存放重要数据。测试机并不意味着其系统盘可以清空。在 HV1 上以管理员身份操作,并保留控制台访问方式。每次调整前先在来宾中正常关闭 Windows,确认 State 为 Off,而不是已保存或已暂停;本课不依赖热调整。将查询结果另存留档后再操作。恢复已记录的 CPU 或内存值,与缩小已经写入数据的磁盘是不同的操作。
用同一项工作比较虚拟处理器数量
Get-VM -Name 'HVTEST01' | Select-Object Name,State,ProcessorCount
Get-VMProcessor -VMName 'HVTEST01' | Select-Object Count,Reserve,Maximum,RelativeWeight
- 记录查询中的处理器数量及 Reserve、Maximum、RelativeWeight,不修改后三项。示例以创建时的两个 vCPU 为起点;若实际配置不同,应保留真实原值并调整计划,不要假定两个就是原始值。
- 确认 HVTEST01 为 Off,在 Hyper-V 管理器中打开设置 → 处理器,仅将数量由两个改为一个。再次确认目标是测试虚拟机后应用。
- 启动来宾,重复同一项有限的管理操作,例如查看相同的本地服务器信息。保持工作量与条件可比;小型查询不能测出最大处理能力。
- 记录来宾使用率、操作时长、主机后台活动及条件变化。可以在任务管理器中查看逻辑处理器数量;没有明确证据时,不要声称性能有所提高。
- 正常关闭来宾并确认 Off。如果原值确为两个 vCPU,则恢复为两个。重新查询 ProcessorCount 并确认正常启动,再进行内存试验。
同一项小型操作在一个或两个 vCPU 下可能没有明显差别,不能据此为所有服务作性能排名,也不能承诺增加 vCPU 一定更快。多个来宾争用主机处理器时,过多分配反而可能加重竞争。不要为了制造差异而增加意外负载。如果工作量、缓存或后台任务发生变化,应记录比较条件不一致,而不是将所有差异归因于处理器数量。
按目标选择固定或动态内存
动态内存在配置范围内根据需求与主机条件调整分配;Startup 表示启动内存,Maximum 不会为虚拟机独占预留对应的物理内存。应确认来宾与应用支持情况,并为同时启动多台虚拟机预留能力。Set-VMMemory 官方参数说明解释了各项设置;下方 2/4/6 GB 是本课选择的示例值,并非微软原例或推荐配置。PowerShell 中它们采用二进制吉比字节(GiB)单位,满足最小值 ≤ 启动值 ≤ 最大值。在虚拟机 Off 时先执行 Get-VMMemory,将 DynamicMemoryEnabled、Minimum、Startup 和 Maximum 保存到窗口之外,再执行 Set-VMMemory:
Get-VMMemory -VMName 'HVTEST01' | Select-Object DynamicMemoryEnabled,Minimum,Startup,Maximum
Set-VMMemory -VMName 'HVTEST01' -DynamicMemoryEnabled $true -MinimumBytes 2GB -StartupBytes 4GB -MaximumBytes 6GB
启动后同时观察 Hyper-V 中的已分配内存与需求、来宾内存使用和分页,以及主机可用内存。重复同一项有限的工作,不要故意耗尽内存。启动失败可能与启动内存不足有关,但应先记录错误消息和上下文,不能直接断定原因。比较结束后正常关闭并确认 Off。只有原设置确实为固定 4 GiB 时,下面的命令才会恢复该模式及启动内存:
Set-VMMemory -VMName 'HVTEST01' -DynamicMemoryEnabled $false -StartupBytes 4GB
上面的返回命令只修改 DynamicMemoryEnabled 和 StartupBytes,不会恢复 Minimum、Maximum 或其他已更改的属性。保留原始记录,必要时通过虚拟机的内存属性或 Set-VMMemory 相应参数恢复这些值,再用 Get-VMMemory 核对。如果原来采用其他固定值或动态内存,就不能把 4 GiB 当作通用原值。即使固定模式下最小值和最大值暂不生效,也应在再次启用动态内存前复核。不要将这条命令的结果登记为全部属性已完整恢复。
检查虚拟容量与文件增长
固定磁盘在创建时分配指定空间,动态磁盘随写入增长,差分磁盘则依赖父磁盘,整个依赖链必须保持完整。即使来宾仍显示有空闲空间,文件增长也需要主机上的真实空间。在 HV1 上先查看已连接磁盘的路径。Get-VHD 用于读取磁盘对象;文件正在使用或从其他主机查询导致的错误,不代表该文件为空或可以删除:
Get-VMHardDiskDrive -VMName 'HVTEST01' | Select-Object ControllerType,ControllerNumber,ControllerLocation,Path
Get-VMHardDiskDrive -VMName 'HVTEST01' | ForEach-Object { Get-VHD -Path $_.Path } | Select-Object Path,VhdType,FileSize,Size,ParentPath
Size 是虚拟容量,FileSize 是文件在主机上的大小,都不是来宾剩余空间。删除来宾文件不一定立即缩小 VHDX。ParentPath 表示父磁盘依赖,以上查询不会递归展示整条链。检查点的 AVHDX 及其父磁盘也属于依赖链。不要为腾出空间而手动删除、重命名或修改这些文件,也不要直接修改仍被差分磁盘使用的父磁盘。
添加新磁盘并区分卷扩展
- 关闭前先在来宾运行 diskmgmt.msc,记录磁盘、容量和盘符。正常关闭 HVTEST01 并确认 Off,使用 Get-VMHardDiskDrive 记录系统盘路径及控制器位置,同时检查备份需求和主机真实可用空间。
- 打开设置 → SCSI 控制器 → 硬盘驱动器 → 添加。确认所选位置,不要误选已连接的系统盘。
- 选择新建,在计划的位置创建独立的 20 GB 动态 HVTEST01-Data.vhdx,并事先确认该路径不存在同名文件。如果已存在就停止,不要覆盖或将它当作新空盘。检查摘要后应用。
- 启动来宾并打开 diskmgmt.msc。比较添加前后的清单,根据容量和上下文识别新磁盘。不要固定假定它是磁盘 1,RAW 状态也不是可以清除原数据的依据。
- 只有明确识别新磁盘后,才将其初始化为 GUID 分区表(GPT),创建简单卷,选择未占用的盘符并格式化为 NTFS;不要初始化其他磁盘。核对容量和盘符,在新卷创建 DataLab52.txt 并写入“HVTEST01 测试”。保存、关闭再重新打开,确认内容一致。断开之前保存所需文件。
VHD 创建参数区分新建、固定、动态及差分磁盘。添加磁盘不会扩大 C:。扩展现有 VHDX 是另一项操作,事前需具备可恢复的备份,并检查检查点和控制器条件,之后还要扩展来宾的分区与卷。使用磁盘管理扩展基本卷时,未分配空间需要位于同一磁盘上并紧邻该卷之后,文件系统应符合要求,例如 NTFS 或 ReFS。中间存在恢复分区可能阻止扩展,不应未经分析就删除它以继续操作。
不要在一次试验中混合缩小、转换和强制断开操作。移除新数据盘连接之前先保存所需文件,正常关闭 HVTEST01 并确认 Off。在设置中只移除指向 HVTEST01-Data.vhdx 的新 SCSI 连接,并与此前记录的系统盘路径核对。确认系统盘仍保持连接,虚拟机可以正常启动。断开连接不会删除 VHDX;若之后单独删除文件,必须先检查其他虚拟机和差分磁盘链是否依赖它。不要仅为恢复原容量而缩小系统盘。




