How to Monitor Mirrored Disk Health and Implement SMART Alerts in Windows Server 2003


4 views

When dealing with Windows Server 2003 dynamic disks, seeing a "Failed Rd" status in DISKPART is particularly alarming. The example shows:

Volume 0     X   xDrive       NTFS   Mirror       233 GB  Failed Rd

This indicates the mirror volume has failed redundancy, meaning one disk in the mirror set has failed but the volume remains accessible through the remaining disk.

Windows Server 2003 provides several methods to check disk health:

  • Disk Management MMC: Right-click My Computer → Manage → Disk Management
  • DISKPART utility: As shown in the example
  • Event Viewer: Check System logs for disk-related events (Event ID 7, 9, 11, 15)

To configure email alerts for disk failures, you'll need to create a scheduled task that runs a VBScript:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
Set objEmail = CreateObject("CDO.Message")

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_DiskDrive")

For Each objDisk in colDisks
    If objDisk.Status <> "OK" Then
        objEmail.From = "server@domain.com"
        objEmail.To = "admin@domain.com"
        objEmail.Subject = "Disk Failure Alert: " & objDisk.Caption
        objEmail.Textbody = "Disk " & objDisk.Caption & " has failed with status: " & objDisk.Status
        objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.domain.com"
        objEmail.Configuration.Fields.Update
        objEmail.Send
    End If
Next

For SMART monitoring in Windows Server 2003, you'll need third-party tools. Here's how to use smartmontools:

@echo off
smartctl.exe -a /dev/sda | find "SMART overall-health" > status.txt
for /f "tokens=6" %%a in ('type status.txt') do (
    if not "%%a"=="PASSED" (
        blat status.txt -to admin@domain.com -subject "SMART Test Failed" -server smtp.domain.com
    )
)

For critical servers, consider these additional measures:

  • Regularly check the disk status using WMIC: wmic diskdrive get status
  • Implement a daily script to verify mirror status
  • Schedule monthly manual verification of all disks
  • Consider upgrading from dynamic disks to Storage Spaces in newer Windows versions

When you encounter "Failed Rd", follow these steps:

DISKPART
LIST DISK
SELECT DISK 1 (assuming this is the failed disk)
OFFLINE DISK
ONLINE DISK
RESCAN

If the disk doesn't come back online, you'll need to break the mirror and recreate it after replacing the failed disk.


When your Windows Server shows a "Failed Rd" status for a mirrored volume (as shown in the DISKPART output), it means one member of the mirror has failed but the system is still operating in degraded mode. Immediate action is required to prevent data loss.

# PowerShell command to check disk status
Get-Disk | Select-Object Number, OperationalStatus, HealthStatus

# Check specific mirrored volume
Get-Volume -DriveLetter X | Format-List *

While Windows doesn't natively support SMART alerts, we can use PowerShell with smartmontools:

# Install smartmontools via Chocolatey
choco install smartmontools -y

# Check SMART status
smartctl.exe --health /dev/sda

# PowerShell wrapper for scheduled SMART checks
$smartResult = & smartctl.exe --health /dev/sda
if ($smartResult -match "FAILED") {
    # Trigger alert actions
}

Create a PowerShell script for email notifications:

# Email notification script
$smtpServer = "smtp.yourdomain.com"
$mailParams = @{
    From = "alerts@yourdomain.com"
    To = "admin@yourdomain.com"
    Subject = "Mirror Volume Failure Alert"
    Body = (Get-Volume -DriveLetter X | Out-String)
    SmtpServer = $smtpServer
}

# Check volume status and send alert
$volStatus = (Get-Volume -DriveLetter X).HealthStatus
if ($volStatus -ne "Healthy") {
    Send-MailMessage @mailParams
}

Create a scheduled task to run these checks hourly:

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\scripts\diskMonitor.ps1"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)
Register-ScheduledTask -TaskName "Disk Mirror Monitor" -Action $action -Trigger $trigger

Track disk performance metrics for proactive monitoring:

# Create a data collector set for disk monitoring
logman create counter DiskPerf -o "C:\perflogs\diskmon.blg" -c "\PhysicalDisk(*)\*" -f bin -v mmddhhmm -si 00:15:00
logman start DiskPerf

When you encounter a failed mirror, follow these steps:

# Identify the failed disk
Get-Disk | Where-Object {$_.OperationalStatus -ne "OK"}

# Remove the failed disk from mirror
Remove-Mirror -DiskNumber 1 -Confirm:$false

# Add new disk to mirror
Add-Mirror -DiskNumber 3 -Confirm:$false

For enterprise environments, consider:

  • Windows Admin Center with storage monitoring
  • PRTG Network Monitor with custom disk sensors
  • Nagios with NSClient++ for Windows monitoring