guidox / PC

Find Out Which Process Is Keeping the Disk Busy

TL;DR

Open **resmon**, go to the Disk tab, sort by **Total (B/sec)**, and read the file names under Disk Activity. Cross-check the process with **Get-Process** and its start time.

Before you start

Requirements

  • Windows 11
  • 5 minutes
Step by step

Instructions

01

Measure the disk load

Queue length and response time say whether the disk is saturated. A high queue with low throughput is a slow disk, not a busy one.

Get-Counter '\PhysicalDisk(*)\% Disk Time','\PhysicalDisk(*)\Avg. Disk Queue Length','\PhysicalDisk(*)\Avg. Disk sec/Transfer' -SampleInterval 1 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object InstanceName,Path,CookedValue
Get-PhysicalDisk | Select-Object FriendlyName,MediaType,HealthStatus,Size
02

Name the processes doing the I/O

**Get-Process** with the read and write counters shows the top talkers per process, which is the fastest way to spot a runaway indexer or an antivirus scan.

Get-Process | Sort-Object -Property @{e={$_.ReadOperationCount}} -Descending | Select-Object -First 10 Name,Id,@{n='ReadMB';e={[math]::Round($_.ReadTransferCount/1MB)}},@{n='WriteMB';e={[math]::Round($_.WriteTransferCount/1MB)}}
03

Find the files with Resource Monitor

The Disk tab lists every file with its read and write rate and the owning process. That is the bridge from a busy disk to an actual path.

resmon.exe
# Disk tab > Disk Activity > sort by Total (B/sec)
# read the File column and the Image column
Get-CimInstance Win32_Process | Where-Object Name -match 'SearchIndexer|MsMpEng|svchost' | Select-Object Name,ProcessId,CommandLine
04

Check the usual suspects

Windows Search, Defender, the update service and a backup tool cause most sustained I/O. Each has its own state and its own schedule.

Get-Service WSearch,WinDefend,wuauserv | Select-Object Name,Status,StartType
Get-ScheduledTask | Where-Object TaskName -match 'Defrag|Backup|Scan' | Select-Object TaskName,State,@{n='Last';e={($_ | Get-ScheduledTaskInfo).LastRunTime}}
Get-MpComputerStatus | Select-Object QuickScanStartTime,FullScanStartTime,RealTimeScanDirection
05

Correlate with the timing

A busy disk at 03:00 is maintenance; at 10:00 it is a problem. Matching the counters with the task schedule turns the observation into a cause.

Get-WinEvent -LogName System -MaxEvents 50 | Where-Object Id -in 1,2,3 | Select-Object TimeCreated,Id,ProviderName -First 5
Get-ScheduledTask -TaskName 'ScheduledDefrag' -ErrorAction SilentlyContinue | Get-ScheduledTaskInfo | Select-Object LastRunTime,NextRunTime,LastTaskResult
powercfg /getactivescheme
06

Resolve it without disabling everything

Move the maintenance window, pause the indexer for a folder, or limit the backup's throughput. Killing the service is a test, not a solution.

Get-ScheduledTask -TaskName 'ScheduledDefrag' | Disable-ScheduledTask
Get-Service WSearch | Stop-Service
Get-Service WSearch | Start-Service
Get-Counter '\PhysicalDisk(*)\Avg. Disk Queue Length' -SampleInterval 1 -MaxSamples 2 | Select-Object -ExpandProperty CounterSamples | Select-Object InstanceName,CookedValue
Troubleshooting

Common issues

Disk usage is 100 percent but throughput is tiny

The disk is failing or the driver is stuck. Check the SMART status and the event log for controller resets.

System process is the top writer

That is the kernel writing on behalf of something else. Use Resource Monitor's file list to find which file and which handle.

The activity stops when the network cable is out

Something is syncing or streaming. Check OneDrive, the browser cache and any backup agent.

It happens only after sign-in

Startup apps and profile loading. Check the startup impact column in Task Manager and the logon scripts.

FAQ

Frequently asked

Is a busy disk always slow?

No. A queue length under 2 with high throughput is normal for an SSD. Above that, the latency shows.

Can an SSD be too full to perform?

Yes. Keep at least 10 percent free so the controller has space for wear levelling and garbage collection.

Does defragmenting an SSD help?

No, and it costs writes. Windows sends TRIM instead of defragmenting on an SSD.

How to undo this

Re-enable any task you disabled with Enable-ScheduledTask and start WSearch again. The counters do not change anything.

Changelog · 1 entry
  1. 2026-11-01
    First version
Interactive version: checklist, feedback, related guides →

Free · no account needed · tracks your progress