File Share Physical Disk Health Monitor

Microsoft.SystemCenter.OperationsManager.Storage.2012R2.PhysicalDiskHealthFileShareSpacesMonitor (UnitMonitor)

File share spaces monitor based on physical disk health

Knowledge Base article:

Summary

This monitor tracks the health status of the file share based on the health of its physical disks. Either a physical disk has suffered an error or it has reported an impending failure.

Causes

• Lost communication issues can occur because the storage provider once had communication with the disk, but can no longer establish a connection to it. Alternatively, the storage provider may have knowledge of the disk, but has never been able to establish communication with it.

• A IO error can occur as a transient issue or arise from problems in Spaces configuration.

• Failed media can occur when damaged sectors in the physical disk exist.

Resolutions

• In the case of lost communication, if you have recently pulled a physical disk, ensure that it has been removed from the Storage Pool. If the loss of communication with the disk is unexpected, verify the physical connection of the disk. If the physical connection is secure and communication with the disk still cannot be established, the disk may be bad, and should be replaced.

• In the case of IO error, determine if this error has occurred multiple times for the same disk, and that the issue is not common for other disks in the enclosure. If this error has occurred as an uncommon event, please view this as a warning for transient issue. If this is error is seen repeatedly for this disk, and not for others in the enclosure within a 15 minute window, the disk may be failing and should be replaced.

• In the case of failed media, replace the disk.

To replace a disk:

First, get the storage pool for this physical disk:

$storagePool = Get-StoragePool -FriendlyName "StoragePoolName"

Next, identify the physical disks in this pool which are not healthy and may need replacing:

Get-PhysicalDisk –StoragePool $storagePool | Where-Object –FilterScript {$_.HealthStatus –ne “Healthy”}

Once you have determined the disks that need to be replaced, run the below to remove them from the pool:

$PDToRemove = Get-PhysicalDisk –FriendlyName “PhysicalDiskName”

Remove-PhysicalDisk -PhysicalDisks $PDToRemove -StoragePool $storagePool

Finally, physically replace the disks you have removed from the pool, and add the new disks to the pool:

$storagePool = Get-VirtualDisk -FriendlyName "VirtualDiskName" | Get-StoragePool

$PDToAdd = Get-PhysicalDisk -FriendlyName PhysicalDisk5

Add-PhysicalDisk -PhysicalDisks $PDToAdd –StoragePool $storagePool.

Once physical disk replacement is completed, the alert must be manually closed and the health state of affected storage pool(s) and file share(s) must be reset.

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.Storage.FileShare.Base
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateFalse
Alert Auto ResolveTrue
Monitor TypeMicrosoft.Windows.SingleEventLogManualReset2StateMonitorType
RemotableTrue
AccessibilityPublic
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.OperationsManager.Storage.2012R2.PhysicalDiskHealthFileShareSpacesMonitor" Accessibility="Public" Enabled="true" Target="SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.FileShare.Base" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Windows!Microsoft.Windows.SingleEventLogManualReset2StateMonitorType" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<OperationalStates>
<OperationalState ID="Warning" MonitorTypeStateID="EventRaised" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="ManualResetEventRaised" HealthState="Success"/>
</OperationalStates>
<Configuration>
<ComputerName>.</ComputerName>
<LogName>Operations Manager</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">8000</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Storage Monitoring Script</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<Value Type="String">$Target/Property[Type="SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.FileShare.Base"]/ShareName$</Value>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<XPathQuery Type="String">Params/Param[1]</XPathQuery>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</Configuration>
</UnitMonitor>