PowerShellでディスクのスマートステータスを確認する方法

PowerShellでディスクのスマートステータスを確認する方法に対する実務上の答えは「Get-PhysicalDiskでHealthStatusとOperationalStatusを確認し、対応deviceはGet-StorageReliabilityCounterでtemperature、wear、read/write error等を読みます。値が空なら正常ではなくunsupportedの可能性を残します。」です。ここではStorage module対応deviceを対象にし、Win32_DiskDrive StatusだけをSMART詳細と説明しない前提を明示し、初回確認、sample実行、本番判定、元へ戻す条件をそれぞれ独立させます。

目次

PhysicalDiskとOS disk番号を対応付ける

ディスク健全性調査では、PhysicalDiskのFriendlyName、SerialNumber、UniqueIdをGet-Diskの番号と対応付けます。HealthStatusとOperationalStatusに加え、対応機器だけReliabilityCounterを取得し、未対応を正常値ゼロと解釈しません。警告が出た場合は書き込みテストを避け、バックアップと交換判断を優先します。

  • Get-DiskとGet-PhysicalDiskでNumber、FriendlyName、SerialNumberを対応付ける
  • bus type、media type、pool構成を確認する
  • Get-StorageReliabilityCounter対応有無と権限を確認する
  • backupの最終成功と復元可否を先に確認する

HealthStatusとOperationalStatusを別に読む

  • Win32_DiskDrive StatusをSMART詳細とする
  • nullを正常値とする
  • volumeとphysical diskを混同する
  • vendor raw属性を共通thresholdで比較する
  • 異常diskへ負荷testをかける

reliability counterの提供有無を確認する

physical disk health一覧

Get-PhysicalDisk | Select-Object FriendlyName,SerialNumber,MediaType,BusType,HealthStatus,OperationalStatus,Size

HealthStatus UnknownをHealthyと扱いません。

disk番号と対応付け

Get-Disk | Select-Object Number,FriendlyName,SerialNumber,BusType,HealthStatus,OperationalStatus,Size

volume letterとphysical diskを混同しません。

reliability counterを取得

Get-PhysicalDisk | Get-StorageReliabilityCounter |
  Select-Object DeviceId,Temperature,Wear,PowerOnHours,ReadErrorsTotal,WriteErrorsTotal

device/driverが値を提供しないpropertyは空です。

problemだけを候補表示

Get-PhysicalDisk | Where-Object { $_.HealthStatus -ne 'Healthy' -or $_.OperationalStatus -notcontains 'OK' } |
  Select-Object FriendlyName,SerialNumber,HealthStatus,OperationalStatus

warning候補であり故障確定ではありません。

Storage eventを確認

Get-WinEvent -FilterHashtable @{LogName='System';ProviderName='disk';StartTime=(Get-Date).AddDays(-7)} -MaxEvents 200 | Select-Object TimeCreated,Id,Message

provider名は実機ListProviderで確認し、StorPort等関連providerも環境に応じて調べます。

Temperature・Wear・error countを補足する

SMART属性のraw値とthresholdはvendor固有です。Get-StorageReliabilityCounterが標準化して返す項目もdeviceが未提供ならnullです。Win32_DiskDrive Status=’OK’だけで将来故障なしとは判断できません。Health、event、performance劣化、backup、vendor diagnosticを組み合わせます。

System logのdisk eventを期間限定で調べる

確認は読み取りですが、異常diskへ負荷test、firmware update、repairを行うと悪化する可能性があります。最優先でbackup成功と復元性を確認し、書込を減らしてvendor/supportへ連絡します。disk初期化やformat、未確認のrepairを実行しません。交換時は暗号化key、RAID/storage pool手順、rollbackを準備します。

null telemetryをHealthyへ読み替えない

vendor管理tool、UEFI diagnostic、Windows storage cmdlet、System eventをserial numberで照合します。取得時刻とbackup時刻を記録し、warningが増加傾向かを見る場合も同じdevice/fieldを比較します。UnsupportedはUnknownとして報告します。

UniqueId・health・eventを合わせて検収する

Get-PhysicalDiskのHealthStatus/OperationalStatusとGet-StorageReliabilityCounterのtemperature、wear、read/write error等をdiskのUniqueId/SerialNumberで対応付けます。UnknownやUSB/RAID非対応をHealthyへ置換せず、System logとvendor toolで補います。

storage healthとreliability値を一行にまとめる

$rows=Get-PhysicalDisk -ErrorAction Stop | ForEach-Object { $r=$_ | Get-StorageReliabilityCounter -ErrorAction SilentlyContinue; [pscustomobject]@{FriendlyName=$_.FriendlyName;UniqueId=$_.UniqueId;Health=$_.HealthStatus;Operational=($_.OperationalStatus -join ',');Temperature=$r.Temperature;Wear=$r.Wear;ReadErrors=$r.ReadErrorsTotal;WriteErrors=$r.WriteErrorsTotal} }
$rows

telemetry未提供をdevice故障と断定しない

  • health情報を取得:physical diskとGet-Diskを一意対応し、HealthStatus、OperationalStatus、reliability値を取得できる
  • telemetry非提供:reliability counterなしはUnsupportedとしてhealth正常とは別にする
  • storage・event error:Lost communication、Warning/Unhealthy、CIM/storage errorはUrgentReviewまたはReadErrorへ分類する

SMARTという一語で全deviceに同じattributeを期待しません。SerialNumberを公開reportへ載せず、Storage Spacesのvirtual diskとphysical diskを混同しません。確認後にInitialize/Repair/Resetを自動実行しません。

USB・virtual disk・null温度を試す

$rows | Where-Object { $_.Health -ne 'Healthy' -or $_.Operational -notmatch 'OK' -or $null -eq $_.Temperature } | Select-Object FriendlyName,Health,Operational,Temperature,Wear

Healthy/Warning/Unknown、counter非対応、RAID/USB、複数同名diskをtestします。UniqueIdのredacted値、health、error counter、temperature、event ID、取得errorを保存します。

Get-StorageReliabilityCounterのnullは故障でも正常でもなく、deviceが値を公開していない可能性があります。UniqueIdで対象を固定し、HealthStatus、event log、vendor診断を別evidenceとして扱います。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次