PowerShell管理虚拟机存储需区分Hyper-V宿主机与Azure云环境:前者用Get-VMHardDiskDrive等命令操作VHDX及SCSI控制器,后者用Add-AzVMDataDisk等管理托管磁盘生命周期与性能配置,均需跨层验证与初始化。PowerShell 管理虚拟机存储接口,核心是区分**宿主机视角的存储管理**(如 Hyper-V 主机上的虚拟磁盘、存储池)和**云环境视角的存储管理**(如 Azure VM 的托管磁盘、数据磁盘)。两者操作对象、命令模块和逻辑完全不同,需按场景选择。
一、在 Hyper-V 主机上管理本地 VM 存储接口
适用于 windows server 或启用了 hyper-v 的 windows 10/11,直接控制物理磁盘、虚拟硬盘(vhdx)、控制器及连接关系。
-
查看 VM 的存储控制器与磁盘连接状态:使用
Get-VMHardDiskDrive -VMName "MyVM"列出所有已挂载的虚拟硬盘,含控制器类型(IDE/SCSI)、控制器编号、位置(如 SCSI 0:1)和 VHD 路径。 -
添加新 VHDX 到指定控制器:例如为 VM 添加一块 100GB 动态扩展 VHDX 到 SCSI 控制器第 2 个插槽:
Add-VMHardDiskDrive -VMName "MyVM" -Path "D:\VMs\MyVM\Data.vhdx" -ControllerType SCSI -ControllerNumber 0 -ControllerLocation 2 -
更换或断开磁盘连接:先用
Remove-VMHardDiskDrive移除旧磁盘,再用Add-VMHardDiskDrive挂载新磁盘;也可直接修改路径(需确保 VM 已关机或支持热插拔且启用了相应功能)。 -
管理存储控制器本身:默认 IDE 支持最多 4 个设备,SCSI 支持更多;如需增加 SCSI 控制器,运行
Add-VMScsiController -VMName "MyVM"。
二、在 Azure 中管理 VM 的托管磁盘接口
面向云环境,重点是磁盘生命周期(创建、挂载、卸载、删除)与性能配置,不涉及底层控制器细节。
-
将新托管磁盘附加到运行中的 VM:使用
Add-AzVMDataDisk命令,并明确指定 LUN(逻辑单元号),例如:
$vm = Get-AzVM -ResourceGroupName "rg1" -Name "vm1"<br> $vm = Add-AzVMDataDisk -VM $vm -Name "disk2" -Lun 1 -CreateOption Empty -DiskSizeGB 128 -StorageAccountType Premium_LRS<br> Update-AzVM -VM $vm -ResourceGroupName "rg1"
-
验证磁盘是否成功挂载:登录 VM 后运行
Get-Disk | Where BusType -eq "Storage Spaces"(仅限 Storage Spaces 类型)或更通用的Get-PhysicalDisk;Azure 环境中建议在 VM 内执行diskpart → list disk或Get-Disk查看新增磁盘是否显示为“脱机”并需初始化。 -
分离磁盘但保留数据:调用
Remove-AzVMDataDisk并更新 VM,磁盘文件仍保留在存储账户中,可后续挂载到其他 VM。 -
调整磁盘性能层级:通过
Update-AzDisk修改StorageAccountType(如从 Standard_LRS 升级为 Premium_LRS),注意需先停止 VM(除非使用支持热升级的磁盘类型)。
三、统一验证与故障排查要点
无论本地还是云端,挂载后 VM 内部识别异常是常见问题,需跨层检查。
- 宿主机侧确认磁盘已绑定(
Get-VMHardDiskDrive或Get-AzVM -Expand Resources输出中含 dataDisks); - VM 内检查磁盘状态:若显示“脱机”且分区样式为 RAW,需手动初始化(
Initialize-Disk)并新建卷(New-Partition + Format-Volume); - Azure VM 若无法识别新磁盘,确认 OS 是否启用 磁盘在线策略(注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\disk\Parameters下EnableAutomaticMount设为 1); - Hyper-V 中若 SCSI 磁盘未被 Guest OS 识别,检查 VM 集成服务是否最新,以及 Guest OS 是否安装了 Hyper-V SCSI 控制器驱动(Windows 默认支持,Linux 需启用 hv_storvsc 模块)。
四、进阶:自动化存储接口配置
可封装为可复用脚本,例如批量为一组 VM 添加相同规格数据磁盘:
- 定义参数(VM 名称列表、磁盘大小、LUN 起始值、资源组);
- 循环调用
Get-AzVM→Add-AzVMDataDisk→Update-AzVM; - 附加后通过
Invoke-AzVMRunCommand在 VM 内远程执行初始化与格式化(需提前部署自定义脚本或使用内置命令如Initialize-Disk -PassThru | New-Partition -UseMaximumSize | Format-Volume -FileSystem NTFS -Confirm:$false)。

















