Game was patching slow (Helldivers 2)
Low mbps (200) taking forever
Game disk was SSD but Steam using old Game Location (HDD) and Random IO was slow
Made Script to Improve:
- MAKE SURE TARGET SSD HAS ENOUGH SPACE
- MAKE SURE BOTH FILE SYSTEM TYPES ARE 'NTFS'
# Move-Steam-Downloading-To-SSD.ps1# Run PowerShell "As Administrator"$D = "D:\SteamLibrary\steamapps\downloading"$E = "E:\SteamLibrary\steamapps\downloading"function Assert-Admin {$isAdmin = ([Security.Principal.WindowsPrincipal] `[Security.Principal.WindowsIdentity]::GetCurrent() `).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)if (-not $isAdmin) {throw "Run this script as Administrator (needed for mklink)."}}function Ensure-Dir($path) {if (-not (Test-Path $path)) {New-Item -ItemType Directory -Path $path | Out-Null}}Assert-AdminWrite-Host "Attempting to stop Steam (ignore errors if it's already closed)..."Get-Process steam -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue# Ensure parent directories existEnsure-Dir (Split-Path $D -Parent)Ensure-Dir (Split-Path $E -Parent)# If E:\...\downloading exists, rename it to downloading.old (with timestamp if needed)if (Test-Path $E) {$oldBase = Join-Path (Split-Path $E -Parent) "downloading.old"$old = $oldBaseif (Test-Path $old) {$stamp = Get-Date -Format "yyyyMMdd-HHmmss"$old = "$oldBase.$stamp"}Write-Host "Renaming SSD folder:`n $E`n-> $old"Rename-Item -Path $E -NewName (Split-Path $old -Leaf)}# If D path is a junction already, remove it (so we can move/create cleanly)if (Test-Path $D) {$item = Get-Item $D -Forceif ($item.Attributes.ToString().Contains("ReparsePoint")) {Write-Host "D folder is a reparse point (junction/symlink). Removing it:`n $D"Remove-Item -Path $D -Force}}# Move D:\...\downloading to E:\...\downloading (if it exists)if (Test-Path $D) {Write-Host "Moving HDD folder:`n $D`n-> $E"Move-Item -Path $D -Destination $E} else {Write-Host "No HDD downloading folder found at $D (creating empty target on SSD)."Ensure-Dir $E}# Create junction from D to EWrite-Host "Creating junction:`n $D`n=> $E"cmd /c "mklink /J `"$D`" `"$E`""Write-Host "`nVerification:"cmd /c "dir `"$([System.IO.Path]::GetDirectoryName($D))`""cmd /c "fsutil reparsepoint query `"$D`""Write-Host "`nDone."Write-Host "Steam should now see D:\...\downloading, but it will actually use the SSD at E:\...\downloading."
"Why did I have to create this script and move the data? Why was steam using the D: for the Download Cache instead of the E: drive even though the game is installed on the E: drive? This seems like the wrong drive."
The key idea: Steam updates aren’t written straight into the game folder. Steam typically uses a staging area (steamapps\downloading, sometimes plus other cache folders) to download chunks, unpack/decrypt, and apply deltas. Steam picks where that staging lives based on library association and configuration, not on where you think the game “is.”
Common “why did it pick D?” reasons:
-
The app is logically associated with the D: library (even if you manually moved the game files at some point, or the manifest stayed on D:). Steam uses the library containing the app’s
appmanifest_*.acfto decide staging. If the manifest is underD:\SteamLibrary\steamapps, Steam will stage under D. -
D: was your default / primary library at the time of install/update. Steam will keep using that library for that app unless you explicitly “Move install folder” inside Steam.
-
Steam client caches can live where Steam itself is installed. Even if the game is on E:, certain caches (
appcache,depotcache) may still hammer the drive that containssteam.exe. -
Steam doesn’t automatically optimize for SSD vs HDD. It follows its rules: “use the library/client path I’m configured for,” not “use the fastest disk.”
So it feels like “the wrong drive,” but it’s Steam behaving consistently with its internal mapping: game location and staging/cache location are related, but not guaranteed to match.
Why your script/junction helps:
-
If Steam insists on using
D:\SteamLibrary\steamapps\downloading, you can “lie” to it safely with a junction so it still uses the path it expects, while the I/O lands on E:. This is especially helpful becausedownloadingis often random-I/O heavy, where an SSD can be dramatically faster than an HDD.
If you want a “Steam-native” fix (no junction), the usual solution is:
-
Steam → Settings → Storage → select the game → Move to the E: library
-
Also set E: as the default library
-
Ensure the relevant
appmanifest_*.acfends up underE:\SteamLibrary\steamapps\
But if Steam keeps choosing D: for staging anyway, your junction approach is a perfectly logical workaround.
No comments:
Post a Comment