Windows存储池无原生实时告警,但可用PowerShell实现容量监控:查使用率用Get-StoragePool命令,检虚拟磁盘预配用Get-VirtualDisk,超85%阈值可写日志并弹窗,需结合resmon与perfmon排查I/O瓶颈,并用Get-PhysicalDisk筛查硬盘健康状态。
windows 存储池(storage spaces)本身不带实时告警功能,但用 powershell 能稳定、低成本地实现容量动态监控。核心是定期采集数据、设阈值判断、触发响应动作,全程无需第三方软件。
查存储池实际使用率
运行以下命令,可一次性列出所有健康存储池的已用百分比:
Get-StoragePool | Where-Object {$_.OperationalStatus -eq "OK"} | Select FriendlyName, HealthStatus, @{Name="UsedPct";Expression={"{0:N1}%" -f ($_.AllocatedSize / $_.Size * 100)}}
该结果直接显示“UsedPct”,避免手动计算。若需同时查看底层虚拟磁盘是否过度预配,可追加:
Get-VirtualDisk | Select FriendlyName, ProvisionedSize, Size, ResiliencySettingName
重点关注 ProvisionedSize 远大于 Size 的情况,这说明存在空间预留但未实际占用,可能误导容量判断。
设阈值自动提醒
把检查逻辑写成脚本,例如当使用率 ≥ 85% 时写入事件日志并弹窗提示:
- 用 Get-StoragePool 获取目标池对象
- 计算
$used = $pool.AllocatedSize / $pool.Size - 满足
if ($used -ge 0.85)就执行 Write-EventLog 和 [System.Windows.Forms.MessageBox]::Show() - 保存为
Check-StoragePool.ps1,通过任务计划程序设为每15分钟运行一次
联动验证 I/O 状态
高使用率不等于瓶颈,需排除 I/O 延迟干扰:
- 打开 resmon → “磁盘”选项卡,观察各物理磁盘的“响应时间”和“活动时间”,确认是否由存储池驱动(进程名通常为 vds 或 storport)
- 在 perfmon 中添加计数器:
PhysicalDisk\Avg. Disk Queue Length,持续 > 2 表示队列积压,配合Get-PhysicalDisk查看单盘 HealthStatus 是否异常
补充物理盘健康检查
存储池降级常源于单块硬盘故障,PowerShell 无法直接读取 S.M.A.R.T.,但可快速筛查底层盘状态:
Get-PhysicalDisk | Select FriendlyName, MediaType, HealthStatus, OperationalStatus, Usage
重点关注 HealthStatus 为 "Unhealthy" 或 Usage 为 "Retired" 的磁盘。建议搭配 CrystalDiskInfo 手动扫描温度与重映射扇区,作为预防性维护环节。

















