Windows high disk usage: diagnose and fix it from the command line

A step-by-step problem-fix guide for Windows: identify your disks, rule out failing hardware, find the process or service hammering the disk, optimize the drive, and verify the file system is clean.

WindowsProcessessvchoststoragediskpowershellhealthLow risk
Start by inspecting your disks with Get-Disk to see their health status and whether the system drive is an SSD or HDD — that determines what '100% disk usage' means in your case.

What this covers

Disk usage pegged at or near 100% makes Windows feel unusable, but the cause varies enormously depending on your hardware and what's running. This guide walks through a disciplined order: understand your disks, rule out a failing drive, identify the process or service responsible, check for memory pressure, then optimize the drive and verify the file system. Every step uses read-only or built-in Windows tools, so it's safe to work through in order.

Symptom

?Task Manager shows the disk at or near 100% for long stretches, the PC feels sluggish, apps freeze or take ages to open, and the disk light (if any) stays solid. Sometimes it happens only after boot, sometimes constantly.

Identify your disks and their bus type

Before anything else, get a read-only picture of every physical disk: model, bus type (SSD vs HDD matters a lot for what 'high disk usage' means), health and partition style. An older SATA HDD running near 100% is often just fragmentation or background indexing, while an SSD pegged at 100% points to a failing drive or a runaway process. You worked through this step correctly when you can list each disk with a Healthy status and know which one is the system drive.

Read-only PowerShell view of each disk's model, bus type, health and partition style.

Command
$ Get-Disk | Format-Table Number, FriendlyName, BusType, HealthStatus, PartitionStyle, @{n='SizeGB';e={[math]::Round($_.Size/1GB)}} -AutoSize

Rule out a failing or worn-out drive

High disk usage with sluggish performance is a classic symptom of a dying drive. Check each physical disk's health status and reliability counters — temperature, wear, and read errors. If a disk reports Unhealthy or shows climbing error counts, fixing software won't help; back up and replace the drive first. Success looks like every disk showing HealthStatus 'Healthy' and no alarming reliability counters.

Query health status, media type, and reliability counters (temperature, wear, errors) for every physical disk in PowerShell.

Command
$ Get-PhysicalDisk | Select-Object FriendlyName, MediaType, HealthStatus, OperationalStatus, Size
Get-PhysicalDisk | Get-StorageReliabilityCounter | Select-Object DeviceId, Temperature, Wear, ReadErrorsTotal

Find what's actually hammering the disk (svchost deep dive)

In Task Manager the culprit is often just 'System' or 'svchost.exe', which tells you nothing. Use tasklist with the /SVC flag to see which Windows services live inside each svchost process, so you can tie the disk activity to a concrete service (Windows Update, Superfetch/SysMain, Windows Search). When you can name the specific service behind the disk churn, you've found your target.

Use tasklist /SVC to reveal the services hosted inside every process, especially svchost.exe.

Command
$ tasklist /SVC /FI "IMAGENAME eq svchost.exe"

Check whether memory pressure is driving disk I/O

If your RAM is exhausted, Windows pages constantly to disk and disk usage spikes even though no single process looks busy. Query the page file's allocated size, current usage and peak usage. If current usage sits close to the allocated size, the real problem is memory, not the disk — close memory-hungry apps or add RAM before touching disk settings.

Query Win32_PageFileUsage to see page file size, current usage, and peak usage — how close you are to memory exhaustion.

Command
$ Get-CimInstance Win32_PageFileUsage | Select-Object Name, AllocatedBaseSize, CurrentUsage, PeakUsage

Confirm whether a specific app is the culprit

If you suspect a particular program (a browser, a backup tool, an antivirus scan), check whether it's actually running right now and grab its PID. This confirms the process you saw loading the disk in Task Manager is still alive, and gives you the PID you need to investigate or kill it. You know it worked when the process name and PID appear in the output.

Check if a program is running and get its process ID using tasklist with findstr or the /FI filter.

Command
$ tasklist | findstr /i chrome    ::  or filtered directly:  tasklist /FI "IMAGENAME eq chrome.exe"

Optimize the drive: defrag HDDs, trim SSDs

Once you've ruled out failing hardware and identified background services, run Windows' built-in optimization. On a mechanical HDD this consolidates fragmentation, which is a very common cause of sustained 100% disk usage; on an SSD it issues a TRIM pass instead. Watch the progress output and let it finish — the disk will stay busy during the run, so judge the result after it completes.

Run fragmentation consolidation on HDDs or the trim pass on SSDs, with progress output.

Command
$ defrag C: /O /U /V

Verify the file system is clean

Finally, run an online scan of the system drive to confirm no file system errors or bad sectors are forcing repeated retries (a hidden cause of high disk usage). The /scan flag checks the volume while Windows keeps running. If the scan reports no errors and your disk usage has settled back to normal levels after the optimization, the problem is resolved.

Diagnose NTFS file system errors and bad sectors on any volume — including the system drive while Windows is running — before committing to a repair.

Command
$ chkdsk C: /scan
!Don't 'fix' disk usage by deleting files or disabling services at random — a dying drive can masquerade as high disk usage, so check drive health first and back up important data before making changes.

How to confirm it worked

After optimizing, disk usage in Task Manager should settle back to low single digits or teens during idle, apps should open promptly, and a chkdsk scan should report no file system errors.

Sources

  • Get-PhysicalDisk
    Microsoft Learn · vendor-doc · 2026-09-17
    Evidence: Documents HealthStatus and OperationalStatus properties on disk objects.
  • TaskList — List processes running on the machine
    SS64 · technical · 2026-09-17
    Evidence: Documents /SVC: 'List services hosted within each process' — useful for identifying the services inside svchost.exe instances.
  • chkdsk | Microsoft Learn
    Microsoft · vendor-doc · 2026-09-17
    Evidence: Microsoft documents chkdsk /scan as running an online scan on a volume, and /f with /r as locating bad sectors and recovering readable information.
  • Get-StorageReliabilityCounter
    Microsoft Learn · vendor-doc · 2026-09-17
    Evidence: Documents temperature, wear, and error counters piped from Get-PhysicalDisk.
  • Win32_PageFileUsage class
    Microsoft Learn · vendor-doc · 2026-09-17
    Evidence: Win32_PageFileUsage exposes AllocatedBaseSize (current MB), CurrentUsage and PeakUsage for each page file on the system.
  • Get-Disk (Storage)
    Microsoft Learn · vendor-doc · 2026-09-17
    Evidence: Documents Get-Disk, which returns disk objects with FriendlyName, SerialNumber, BusType, HealthStatus, PartitionStyle and Size.
  • tasklist
    Microsoft Learn · vendor-doc · 2026-09-17
    Evidence: Syntax includes /svc which 'Lists all the service information for each process' — i.e. services hosted inside each process.
  • defrag - Windows Commands
    Microsoft Learn · vendor-doc · 2026-09-17
    Evidence: Documents defrag, including /O to perform the proper optimization (trim on SSDs), /U for progress and /V for verbose output.

Last verified: 2026-09-21

Related guides