PowerShellでディスクの断片化状態を確認する方法

PowerShellでディスクの断片化状態を確認する方法で重要なのは、実行例を増やすことより、対象と戻し方を先に確定することです。結論は「Get-VolumeにFragmentationPercentage propertyはありません。Optimize-Volume -DriveLetter C -Analyze -Verboseで分析し、media typeとWindowsの自動最適化policyを確認してから必要性を判断します。」。ここではdrive letterだけでなくmedia type、filesystem、Storage Spaces/virtual diskを確認し、SSDへHDDと同じ判断をしない条件を前提に、2026年7月17日時点の公式仕様から、現場で再現できる判断順を組み立てます。

目次

volumeとphysical mediaの対応を確認する

Optimize-Volume -Analyzeの入力、出力、変更有無を一文で書き、host、user、current directory、実行時刻を添えます。analysis結果は同じOS版とmedia種別で比較し、HDDとSSDの判断基準を混ぜません。

  • Get-Volumeでfilesystem、health、size、free spaceを確認する
  • Get-PhysicalDiskでMediaTypeとbusを確認する
  • Get-ScheduledTaskのDefrag taskと最終実行を確認する
  • backup、maintenance、BitLocker、storage構成を確認する

HDD・SSD・virtual diskを区別する

volume概要

Get-Volume | Select-Object DriveLetter,FileSystemLabel,FileSystem,HealthStatus,Size,SizeRemaining,DriveType

FragmentationPercentageはこのobjectの標準propertyではありません。

media typeを確認

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

volumeとのmappingが単純でないStorage Spaces等を考慮します。

C volumeを分析

Optimize-Volume -DriveLetter C -Analyze -Verbose

-Analyzeは分析です。管理者権限、filesystem対応、現在の負荷を確認します。

defrag scheduled taskを読む

Get-ScheduledTask -TaskPath '\Microsoft\Windows\Defrag\' | Get-ScheduledTaskInfo

taskを無効化・変更せず状態だけを読みます。

volume healthも確認

Get-Volume -DriveLetter C | Select-Object DriveLetter,HealthStatus,OperationalStatus,Size,SizeRemaining

断片化と容量不足、disk healthを混同しません。

Optimize-Volume -Analyzeだけを実行する

Optimize-Volumeはmediaに応じてdefrag、retrim等の適切なoperationを選びます。SSDでもWindowsの最適化taskが必要な場合があり、「SSDは何もしない」と決めつけません。分析結果の文言やpercentはfilesystemとversionに依存します。performance問題はfragmentationだけでなくfree space、storage latency、healthも確認します。

Defrag scheduled taskの履歴を読む

-Analyzeは読み取り中心ですが、-Defrag、-ReTrim、-SlabConsolidate等はstorage I/Oを伴います。業務時間中に一括実行せず、backup、health、free space、maintenanceを確認します。途中で強制電源断しません。問題時は追加最適化を重ねず、eventとstorage healthを調査します。Get-Volumeの存在しないpropertyを空値の正常結果として保存しません。

volume healthと空き容量を補足する

  • Get-Volume.FragmentationPercentageを使う
  • SSDとHDDを同じ処理にする
  • 分析なしでdefragする
  • automatic maintenanceを無効化する
  • storage health問題を断片化とする

Defrag・ReTrim実行を分析から切り離す

Optimize-Volume -Analyze -Verbose結果、Defrag task履歴、Get-Volume health、Performance Monitor latencyを照合します。最適化した場合は前後分析とevent、業務latencyを比較し、対象volumeとoperationを記録します。

Windows volumeのfragmentation分析を定期化するなら、正常件数、警告境界、停止条件を数値化します。

media type・analysis・task結果を検収する

Get-VolumeとGet-PhysicalDiskでvolume、filesystem、media type、healthを対応付け、Optimize-Volume -Analyze -Verboseは分析だけに限定します。SSDではtrim/retrim、HDDではfragmentationという違いがあり、分析結果から即defragを自動実行しません。

C volumeのanalyze出力を保存する

$v=Get-Volume -DriveLetter C -ErrorAction Stop
$r=Optimize-Volume -DriveLetter C -Analyze -Verbose -ErrorAction Stop 4>&1
[pscustomobject]@{Drive=$v.DriveLetter;FileSystem=$v.FileSystem;Health=$v.HealthStatus;Analysis=($r -join [Environment]::NewLine)}

media非対応をstorage errorと混同しない

  • analysis取得:対象driveが一意でhealth正常、media/file systemを確認後にAnalyzeが完了する
  • media非対応:unsupported/virtual/removable volumeはNotApplicableとして0% fragmentationへ置換しない
  • volume・task error:access denied、dirty volume、offline、analysis errorはmaintenance reviewへ送る

PhysicalDiskとdrive letterが単純一対一でないStorage Spaces/RAIDを考慮します。SSDへHDD同様の頻繁なdefragを強制せず、scheduled taskのLastTaskResultとOS自動最適化も確認します。

driveなし・SSD・virtual diskを試す

Get-PhysicalDisk | Select-Object FriendlyName,UniqueId,MediaType,BusType,HealthStatus,OperationalStatus
Get-ScheduledTask -TaskPath '\Microsoft\Windows\Defrag\' | Get-ScheduledTaskInfo | Select-Object LastRunTime,LastTaskResult,NextRunTime

HDD/SSD/virtual/removable、unsupported filesystem、non-admin、dirty volumeをtestします。volume ID、media type、Analyze output、task result、healthを保存します。

Analyzeの結果を見ずにOptimizeやDefragへ進みません。media type、volume health、scheduled taskの最終結果を合わせ、SSDへHDDと同じ断片化判断を当てないようにします。

公式情報・参考資料

この記事を書いた人

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

コメント

コメントする

目次