Solution:
Root Cause: Unrecoverable Read/Write Bad Sectors on Physical Media When Windows Shell (File Explorer) copies a file, it reads sequential disk blocks. When encountering physical damage—such as uncorrectable ECC errors, magnetic degradation on HDDs, or dead NAND flash blocks on SSDs—the storage controller spends seconds or minutes retrying the I/O request. The Windows kernel I/O manager pauses progress at 99% (the final payload block) while waiting for the disk firmware to exhaust hardware read retries before throwing a hardware I/O timeout.
Diagnostic Verification: Open PowerShell as Administrator and query S.M.A.R.T. drive counters using WMI: Get-WmiObject -Namespace root\wmi -Class MSStorageDriver_FailurePredictStatus
Open Windows Event Viewer (eventvwr.msc), navigate to Windows Logs > System , and filter for Event ID 7 , 11 , or 154 sourced from disk or stornvme. Look for entries stating: *The device, \Device\Harddisk0\DR0, has a bad block.* Step-by-Step Fix: 1 Open an elevated Command Prompt by pressing Win + X and choosing Terminal (Admin) or Command Prompt (Admin) .
2 Run an offline surface scan and sector recovery pass on the affected drive letter (replace D: with your target drive letter):
Copy
cmd
chkdsk D: /f /r /x
3 Type Y if prompted to dismount the volume or schedule the check on the next system restart.
4 If CHKDSK detects elevated counts of Bad Sectors (0 KB in bad sectors is expected for healthy drives), use Robocopy to perform an unbuffered copy that bypasses bad sectors without hanging File Explorer:
Copy
cmd
robocopy C:\SourcePath D:\TargetPath /J /R:1 /W:1 /REG
*(Note: The
/J switch enables unbuffered I/O, bypassing system caching;
/R:1 limits retries on bad sectors to 1 second).* For official documentation on command flags, see the
Microsoft Official Support Guide .
5 If bad sectors continue expanding, replace the drive immediately as mechanical or NAND degradation is irreversible.
Prevention & Long-Term Monitoring: Set up automated S.M.A.R.T. monitoring tools to alert on non-zero values for *Reallocated Sectors Count (ID 05)*, *Current Pending Sector Count (ID C5)*, or *Uncorrectable Sector Count (ID C6)*.