PowerShellを使ってディスクエラーを修復する初心者ガイド

disk scanとrepair判断では、表示名ではなくDriveLetter・filesystem・backup世代・physical healthを最初の対象キーにします。変更や集計へ進む前にGet-Volumeとscan-only結果・Chkdsk eventを保存し、別対象を同じ結果へ混ぜないことが出発点です。

この手順の合格条件は「scan結果とHealthStatusを確認し必要時だけmaintenanceへ移る状態」です。Microsoft Learn:Repair-Volumeのscan modeとchkdskのonline/offline repair optionが定義するRepair-Volumeのscan modeとchkdskのonline/offline repair optionを根拠にし、画面へ値が出たことだけを成功とは判定しません。

停止条件:boot volume・SMART異常・read error・backup未検証。該当するときは操作を進めず、repairをundoせず検証済みbackupからrestoreするを実行可能な形で確認してから再計画します。

目次

disk scanとrepair判断|結論を検証可能な形にする:scan結果とHealthStatusを確認し必要時だけmaintenanceへ移る状態

対象はDriveLetter、volume UniqueId/path、filesystem、partitionとphysical-disk mappingで一意にします。power plan GUIDやfilesystem/partition値はvolume識別子ではありません。

診断前にverified backup、BitLocker recovery keyの保管確認、volume identity、physical disk healthを記録します。scan失敗時は後続表示を成功扱いしません。

判断要素ディスクエラーの診断と修復判断で記録する内容
対象の識別デバイス名、volume UniqueId、filesystem/partition区分、現在値
最初の確認Get-Volume
変更または操作chkdsk.exe
再確認Get-Volume
中止条件電源断や再起動に備えられず、重要処理や暗号化解除が未確認

disk scanとrepair判断|変更前snapshotを残す:Get-Volumeとscan-only結果・Chkdsk event

scan結果はclean、logical errors、I/Oまたはphysical-health疑いへ分岐します。repairはverified backup後の別maintenance承認で、system/boot volumeをこの例から除外します。

$driveLetter = 'D' # verified backup済みの非system data volumeだけ
$volume = Get-Volume -DriveLetter $driveLetter -ErrorAction Stop
$partition = Get-Partition -DriveLetter $driveLetter -ErrorAction Stop
$disk = $partition | Get-Disk -ErrorAction Stop
$systemDrive = $env:SystemDrive.TrimEnd(':')
if ($driveLetter -eq $systemDrive -or $partition.IsBoot -or $partition.IsSystem) { throw 'This repair example excludes system and boot volumes' }
$backupEvidence = Read-Host 'Enter VERIFIED-BACKUP only if restore was tested'
if ($backupEvidence -cne 'VERIFIED-BACKUP') { throw 'Verified backup evidence is required before diagnosis or repair' }
[pscustomobject]@{ DriveLetter=$volume.DriveLetter; UniqueId=$volume.UniqueId; Path=$volume.Path; FileSystem=$volume.FileSystem; HealthStatus=$volume.HealthStatus; DiskNumber=$disk.Number; DiskHealth=$disk.HealthStatus; VerifiedBackup=$true }
if ((Read-Host 'Type RECOVERY-KEY-SAFE after confirming BitLocker recovery material') -cne 'RECOVERY-KEY-SAFE') { throw 'Recovery evidence missing' }

修復後は同じUniqueIdのRepair-Volume -Scanを再実行し、exit/statusとevent logを保存します。物理故障兆候があればrepair反復ではなくdisk交換へescalateします。

disk scanとrepair判断|対象を一件へ固定する:DriveLetter・filesystem・backup世代・physical health

  • ディスクエラーの診断と修復判断: 実行端末と現在ユーザーを記録する
  • Get-Volume: Source、Version、利用可能なパラメーターを確認する
  • デバイス名、volume UniqueId、filesystem/partition区分、現在値: 変更前の値を日時付きで保存する
  • volume path、filesystem/partition値、デバイスの現在値、BitLocker回復手段: 復旧に使えることを読み取り確認する(ディスクエラーの診断と修復判断では管理者の範囲でGet-Volumeが返す固有値を基準にします)。
  • 電源断や再起動に備えられず、重要処理や暗号化解除が未確認: 該当すれば本番実行を見送る

ディスク診断はGet-VolumeのDriveLetter、FileSystem、HealthStatusを保存し、Repair-Volume -Scanでfilesystem errorを読む段階から始めます。物理diskの故障兆候とfilesystem修復を分け、検証済みbackupがない状態でOfflineScanAndFixへ進みません。

ディスクエラーの診断と修復判断の「ディスクエラーとは」では、Get-Volumeの取得時刻と対象件数を残します。後からGet-Volumeを実行したとき、ディスクエラーとはの差分理由を説明できる形にします。

ディスクエラーの一般的な原因の確認結果はディスクエラーの診断と修復判断の変更可否に直結します。電源断や再起動に備えられず、重要処理や暗号化解除が未確認なら、ディスクエラーの一般的な原因の調査記録を残して実行を見送ります。

修復手順は対象DriveLetterとボリューム識別子を一件へ固定し、読取可能なバックアップを確認してからRepair-Volume -Scanなど診断操作を先に行います。稼働中サービスへの影響と再起動要否を評価せず、いきなりOfflineScanAndFixへ進みません。

環境の準備の確認結果はディスクエラーの診断と修復判断の変更可否に直結します。電源断や再起動に備えられず、重要処理や暗号化解除が未確認なら、環境の準備の調査記録を残して実行を見送ります。

ディスクエラー確認ではGet-VolumeのHealthStatus、FileSystem、SizeRemainingに加え、Get-PhysicalDiskと関連イベントを別経路で採取します。ファイルシステム正常と物理媒体正常を同義にせず、バックアップが未確認なら修復コマンドを保留します。

ディスクエラーの診断と修復判断でGet-Volumeが利用できない場合、Editionやモジュールを確認します。存在しない代替コマンドを作らず、公式の設定経路へ切り替えます。

Get-PhysicalDiskのHealthStatusとOperationalStatusはStorage providerが公開する範囲の情報です。FriendlyNameや表示順だけで対象ボリュームと結び付けず、DeviceId、SerialNumber、BusTypeを照合できない装置は物理診断未確定として扱います。

Get-WinEventではDisk、Ntfs、StorPortなど対象期間のイベントをRecordId付きで保存し、同じエラーの再発時刻を確認します。イベントが継続し物理healthも悪化している場合は修復の反復を止め、負荷を外して媒体交換とデータ救出へ切り替えます。

disk scanとrepair判断|rollback可能性を実行前に測る:repairをundoせず検証済みbackupからrestoreする

disk scanとrepair判断|最小scopeで操作を組み立てる:DriveLetter・filesystem・backup世代・physical health

ディスクエラーの診断と修復判断でchkdsk.exeを使う例は一対象に限定しています。WhatIfを利用できる場合は先に対象を表示し、外部コマンドでは読み取りオプションか検証端末を使います(ディスクエラーの診断と修復判断では管理者の範囲でGet-Volumeが返す固有値を基準にします)。

$expectedUniqueId = $volume.UniqueId
$chkdskOutput = & chkdsk.exe ("$driveLetter`:") /scan 2>&1
$chkdskExit = $LASTEXITCODE
$chkdskOutput | ForEach-Object { Write-Host $_ }
if ($chkdskExit -ne 0) { throw "chkdsk /scan failed or reported a non-clean result; exit=$chkdskExit. Stop and review before repair." }
try { $repairScanResult = Repair-Volume -DriveLetter $driveLetter -Scan -ErrorAction Stop } catch { throw "Repair-Volume -Scan failed for $driveLetter`: $($_.Exception.Message)" }
$afterScanVolume = Get-Volume -DriveLetter $driveLetter -ErrorAction Stop
if ($afterScanVolume.UniqueId -ne $expectedUniqueId) { throw 'Volume identity changed during scan' }
[pscustomobject]@{ DriveLetter=$driveLetter; UniqueId=$afterScanVolume.UniqueId; ChkdskExit=$chkdskExit; RepairScanResult=$repairScanResult; HealthStatus=$afterScanVolume.HealthStatus; OperationalStatus=($afterScanVolume.OperationalStatus -join ',') }

chkdsk.exeの出力では対象件数、警告、終了コードを確認します。途中まで成功した場合は、変更済みと未変更を分けて記録します。

disk scanとrepair判断|利用側の結果まで確かめる:scan結果とHealthStatusを確認し必要時だけmaintenanceへ移る状態

$mode = 'DIAGNOSIS_ONLY' # evidence review後だけ APPROVED_REPAIR
$current = Get-Volume -DriveLetter $driveLetter -ErrorAction Stop
if ($current.UniqueId -ne $expectedUniqueId) { throw 'Refusing action on a different volume' }
if ($mode -eq 'DIAGNOSIS_ONLY') { Write-Host 'Clean scan: no repair is run. Archive scan output and monitor.' }
elseif ($mode -eq 'APPROVED_REPAIR') {
  if ($driveLetter -eq $env:SystemDrive.TrimEnd(':') -or $partition.IsBoot -or $partition.IsSystem) { throw 'System/boot volume repair requires a separate boot-maintenance plan' }
  if ((Read-Host "Type REPAIR-$driveLetter-$($disk.Number) after verified backup and maintenance approval") -cne "REPAIR-$driveLetter-$($disk.Number)") { throw 'Cancelled' }
  $repairResult = Repair-Volume -DriveLetter $driveLetter -OfflineScanAndFix -ErrorAction Stop
  $postRepair = Repair-Volume -DriveLetter $driveLetter -Scan -ErrorAction Stop
  $verified = Get-Volume -DriveLetter $driveLetter -ErrorAction Stop
  if ($verified.UniqueId -ne $expectedUniqueId -or $verified.HealthStatus -eq 'Unknown') { throw 'Post-repair verification failed' }
  [pscustomobject]@{ RepairResult=$repairResult; PostRepairScan=$postRepair; UniqueId=$verified.UniqueId; HealthStatus=$verified.HealthStatus }
} else { throw 'Unsupported mode' }
  • Get-Volume: 同じ対象IDを再取得できた
  • ディスクエラーの診断と修復判断: 意図した値または件数だけが変化した
  • 機器の対応可否、現在値、変更後値、scan/repair/post-scan resultを同じ条件で確認する: 関連機能も異常がない
  • 外付け機器、メーカー固有制御、Modern Standby、WMI非公開: 取得失敗をゼロ件として扱っていない(ディスクエラーの診断と修復判断では管理者の範囲でGet-Volumeが返す固有値を基準にします)。
  • ファイルシステム論理エラーと物理ディスク故障は別。異音、SMART異常、I/Oエラーがある媒体へ書き込み修復を繰り返さない。: 環境固有の制約に反していない

disk scanとrepair判断|続行しない境界を明示する:boot volume・SMART異常・read error・backup未検証

Get-Volumeの結果が空なら、外付け機器、メーカー固有制御、Modern Standby、WMI非公開を一つずつ確認します。ErrorActionで隠した例外をゼロ件として集計しません。

ディスクエラーの診断と修復判断で予想外の警告が一件でも出たら、対象数と時刻を記録して停止します。別の設定変更で警告を相殺しようとしません。

disk scanとrepair判断|rollback後も同じ検証を行う:repairをundoせず検証済みbackupからrestoreする

スキャンは先にバックアップを確認する。オフライン修復や再起動を伴う操作は電源と復旧媒体を確保し、結果に応じて別保守として承認する。

disk scanとrepair判断|監査で追える証拠をまとめる:Get-Volumeとscan-only結果・Chkdsk event

  • Get-Volumeの実行時刻、対象件数、エラー件数を残した
  • デバイス名、volume UniqueId、filesystem/partition区分、現在値で対象を一意に特定した
  • volume path、filesystem/partition値、デバイスの現在値、BitLocker回復手段を変更前に保存して読めることを確認した(ディスクエラーの診断と修復判断の判断では「ファイルシステム論理エラーと物理ディスク故障は別」を優先し、Get-Volumeが空なら成功扱いしません)。
  • chkdsk.exeの対象を一端末・一ユーザー・一設定に限定した
  • Get-Volumeと実利用テストの両方を確認した
  • 電源断や再起動に備えられず、重要処理や暗号化解除が未確認場合は実行を中止した

断定できません。ディスクエラーの診断と修復判断では外付け機器、メーカー固有制御、Modern Standby、WMI非公開でも空になります。エラーを表示し、権限とスコープを確認してからGet-Volumeまたは別の公式な取得方法で照合します。

disk scanとrepair判断|例外条件を質問から整理する:chkdsk /scanとRepair-Volumeの選択

権限だけが原因とは限りません。ファイルシステム論理エラーと物理ディスク故障は別。異音、SMART異常、I/Oエラーがある媒体へ書き込み修復を繰り返さない。 電源断や再起動に備えられず、重要処理や暗号化解除が未確認なら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(ディスクエラーの診断と修復判断では管理者の範囲でGet-Volumeが返す固有値を基準にします)。

公式情報・参考資料

この記事を書いた人

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

コメント

コメントする

目次