Microsoft System Center Operations Manager Physical Disk I/O has been Timed Out

Microsoft.SystemCenter.OperationsManager.Storage.PhysicalDisk.IOError.TimeOut.Rule (Rule)

Rule to collect physical disk I/O Time Out related storage spaces events.

Knowledge Base article:

Summary

This alert indicates that IO has been timed out on the physical disk.

Causes

Windows has detected a drive that is not responding to IO requests within recommended timeouts. Windows will continue to use this drive.

Resolutions

If this is the first time this drive has experienced this problem, try power-cycling or reseating it. If the problem persists, replace the drive

To replace the drive, please:

• Disconnect the drive from the system

• Add a replacement drive to the storage pool

• Run the following Powershell commands:

$pool = $drive | Get-StoragePool

$pool | Remove-PhysicalDisk -PhysicalDisks $drive

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.Storage.FileServer
CategoryCustom
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
An I/O request to a drive timed out

A request for drive '{0}' timed out.

Use the PowerShell below to determine which drive is experiencing the issue.
$drive = Get-PhysicalDisk | ? ObjectId -Match {1}
$drive | fl

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.SystemCenter.PhysicalDiskMonitoringDS Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SystemCenter.OperationsManager.Storage.PhysicalDisk.IOError.TimeOut.Rule" Enabled="true" Target="SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.FileServer" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>Custom</Category>
<DataSources>
<DataSource ID="DS" TypeID="Microsoft.SystemCenter.PhysicalDiskMonitoringDS">
<ComputerName>.</ComputerName>
<LogName>Microsoft-Windows-Storage-Storport/Operational</LogName>
<ScriptName>GetStorageEventDetails.ps1</ScriptName>
<Parameters>
<Parameter>
<Name>VMMServer</Name>
<Value>$Target/Property[Type="SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.FileServer"]/VMMServer$</Value>
</Parameter>
<Parameter>
<Name>domain</Name>
<Value>$RunAs[Name="PROV2Library!Microsoft.SystemCenter.VirtualMachineManager.2012.VMMServerConnectionRunAsProfile"]/Domain$</Value>
</Parameter>
<Parameter>
<Name>Username</Name>
<Value>$RunAs[Name="PROV2Library!Microsoft.SystemCenter.VirtualMachineManager.2012.VMMServerConnectionRunAsProfile"]/UserName$</Value>
</Parameter>
<Parameter>
<Name>Pass</Name>
<Value>$RunAs[Name="PROV2Library!Microsoft.SystemCenter.VirtualMachineManager.2012.VMMServerConnectionRunAsProfile"]/Password$</Value>
</Parameter>
<Parameter>
<Name>EventId</Name>
<Value>$Data/EventDisplayNumber$</Value>
</Parameter>
<Parameter>
<Name>StorageDeviceId</Name>
<Value>$Data/Params/Param[5]$</Value>
</Parameter>
<Parameter>
<Name>StatusCode</Name>
<Value>$Data/Params/Param[6]$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>3000</TimeoutSeconds>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">500</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SystemCenter.OperationsManager.Storage.PhysicalDisk.IOError.TimeOut.Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/Property[@Name='Friendly Name']$</AlertParameter1>
<AlertParameter2>$Data/Property[@Name='ObjectId Guid']$</AlertParameter2>
<AlertParameter3>$Data/Property[@Name='DeviceId']$</AlertParameter3>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/Property[@Name='ObjectId Guid']$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>