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が返す固有値を基準にします)。

コメント