Situatie
Identificarea problemei, unde se duce spatiul.
In powershell ca admin:
Vedere rapidă — top foldere mari (PowerShell)
# Top 20 foldere pe C:\ sortate dupa dimensiune
Get-ChildItem C:\ -Recurse -ErrorAction SilentlyContinue |
Where-Object { -not $_.PSIsContainer } |
Group-Object DirectoryName |
Select-Object Name, @{N='MB';E={[math]::Round(($_.Group | Measure-Object Length -Sum).Sum/1MB,1)}} |
Sort-Object MB -Descending |
Select-Object -First 20 |
Format-Table -AutoSize
Verifică rapid fișierele sistem mari ascunse
# Fisiere sistem mari: pagefile, hiberfil, swapfile
Get-Item -Path C:\pagefile.sys, C:\hiberfil.sys, C:\swapfile.sys `
-Force -ErrorAction SilentlyContinue |
Select-Object Name, @{N='GB';E={[math]::Round($_.Length/1GB,2)}}
# Dimensiune WinSxS (raportata — include hardlink-uri, nu e exacta)
"{0:N2} GB" -f ((Get-ChildItem C:\Windows\WinSxS -Recurse -Force `
-ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1GB)
Foldere de loguri și alte spatii cunoscute ca mari
1C:\Windows\Logs\CBS\ — loguri Component-Based Servicing (update-uri)
2C:\ProgramData\Microsoft\Windows\WER\ReportQueue\ — crash reports în așteptare
3C:\ProgramData\Microsoft\Windows\WER\ReportArchive\ — rapoarte arhivate
4C:\Windows\SoftwareDistribution\Download\ — update-uri descărcate de Windows Update
5C:\Windows\Temp\ și %TEMP% — fișiere temporare sistem și utilizator
6C:\inetpub\logs\LogFiles\ — loguri IIS (pot ajunge la zeci de GB pe servere web)
7C:\Windows\memory.dmp — kernel memory dump complet (egal cu RAM-ul serverului)
Solutie
Pasi de urmat
Pagefile.sys este memoria virtuală a sistemului. Pe serverele cu RAM mare, poate ocupa zeci de GB inutil. Regula veche “1.5× RAM” nu se mai aplică pe sisteme moderne cu 32+ GB RAM.
Verifică dimensiunea curentă (PowerShell)
# Dimensiune pagefile curent Get-WmiObject Win32_PageFileUsage | Select-Object Name, AllocatedBaseSize, CurrentUsage, PeakUsage | Format-Table -AutoSize # Configuratie setata (System managed sau custom) Get-WmiObject Win32_PageFileSetting | Select-Object Name, InitialSize, MaximumSize
Strategie recomandata pe server
Evita Autogestionat de Windows — poate creste la infinit și stă pe C:\
Recomandat Dimensiune fixă (initial = maxim), pe un disc separat față de OS
Server SQL Dezactivează autogestionarea, setează manual pe disc de date, nu pe C:\
Setare manuală pagefile prin PowerShell (ca Administrator)
# Pas 1: dezactiveaza autogestionarea pentru toate discurile
$cs = Get-WmiObject Win32_ComputerSystem -EnableAllPrivileges
$cs.AutomaticManagedPagefile = $false
$cs.Put()
# Pas 2: sterge configuratia existenta de pe C:
$existing = Get-WmiObject Win32_PageFileSetting | Where-Object { $_.Name -like "C:\*" }
if ($existing) { $existing.Delete() }
# Pas 3: creeaza pagefile pe D:\ cu dimensiune fixa (ex. 8192 MB = 8 GB)
# Ajusteaza litera discului si dimensiunea dupa RAM
$pf = ([WMIClass]"Win32_PageFileSetting").CreateInstance()
$pf.Name = "D:\pagefile.sys"
$pf.InitialSize = 8192 # MB
$pf.MaximumSize = 8192 # MB — aceeasi = fara fluctuatie
$pf.Put()
Write-Host "Repornire necesara pentru aplicarea modificarilor."
Setare prin interfata grafica (alternativa)
1Click dreapta pe This PC → Properties → Advanced system settings
2Performance → Settings → Advanced → Virtual memory → Change
3Debifează “Automatically manage paging file size for all drives”
4Selectează C:\ → No paging file → Set
5Selectează D:\ → Custom size, Initial = Max = valoarea dorită → Set → OK
6Repornire obligatorie pentru a elibera pagefile.sys vechi de pe C:\
Nu elimina complet pagefile-ul chiar dacă ai RAM mare. Unele aplicații și crash dump-urile de tip kernel au nevoie de el. Minim 4–8 GB este recomandat chiar și pe sisteme cu 64+ GB RAM.
Cleanmgr.exe este utilitarul nativ de curățare Windows. Pe Windows Server 2016+ este disponibil implicit. Pe versiunile mai vechi necesită instalarea componentei “Desktop Experience”.
# Copiere binare de pe un sistem Windows 10/11 sau instalare Desktop Experience # Alternativa rapida prin copiere manuala: # Copiaza cleanmgr.exe si cleanmgr.exe.mui din C:\Windows\System32\ # de pe un PC Windows 10 pe serverul tau in aceleasi locatii # Sau instaleaza Desktop Experience (necesita restart): Install-WindowsFeature Desktop-Experience
Mod interactiv — selectie manuala categorii
# Deschide interfata grafica pentru drive C: cleanmgr.exe /d C # Cu optiunea "Clean up system files" inclusa # (necesita rulare ca Administrator) cleanmgr.exe /d C /sageset:0 Mod automat complet — fara interfata grafica (recomandat pentru servere)
# Pas 1: configureaza setarile (se salveaza in registry) # Numarul 99 e un identificator arbitrar — poate fi orice intre 0-9999 cleanmgr.exe /sageset:99 # Se deschide interfata — bifeaza TOT ce vrei sters, apoi OK # (Windows Error Reporting, Temp Files, Old Chkdsk Files, etc.) # Pas 2: ruleaza cu setarile salvate, fara GUI cleanmgr.exe /sagerun:99 # Alternativa: curatare automata totala fara nicio configuratie prealabila cleanmgr.exe /verylowdisk
Automatizare prin Task Scheduler (lunar)
# Creeaza task programat lunar, la ora 02:00, ca SYSTEM schtasks /create /tn "DiskCleanup_Monthly" /tr "cleanmgr.exe /sagerun:99" ` /sc monthly /d 1 /st 02:00 /ru SYSTEM /f # Verifica task-ul creat schtasks /query /tn "DiskCleanup_Monthly" /fo LIST Categorii importante de selectat în cleanmgr
Sigur Temporary Files — fișiere temp din %TEMP% și C:\Windows\Temp
Sigur Windows Error Reporting — rapoarte crash trimise sau în așteptare
Sigur Delivery Optimization Files — cache Windows Update pentru alte PC-uri
Sigur Recycle Bin — coșul de gunoi
Sigur Thumbnails — cache miniaturi Explorer
Atenție Windows Update Cleanup — șterge versiunile vechi ale update-urilor (nu mai poți face rollback)
Atenție System Error Dump Files — șterge crash dump-urile (păstrează-le dacă investighezi erori)
Evita Downloads — folderul Downloads al utilizatorilor, verifică înainte.
WinSxS (Component Store) poate ajunge la 15–25 GB după update-uri acumulate. DISM este singurul mod sigur și suportat de Microsoft pentru a-l reduce — nu șterge manual din el.
# Analiza dimensiunii reale a WinSxS (ruleaza ca Administrator) Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore # Output relevant: # Windows Explorer Reported Size : X.XX GB (cu hardlink-uri — supraestimat) # Actual Size of Component Store : X.XX GB (dimensiunea reala) # Backups and Disabled Features : X.XX GB (recuperabil) # Cache and Temporary Data : X.XX MB (recuperabil) # Component Store Cleanup Recommended: Yes/No
# Elimina componentele superseded mai vechi de 30 zile Dism.exe /Online /Cleanup-Image /StartComponentCleanup # Varianta agresiva: elimina imediat, fara asteptarea de 30 zile Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase /ResetBase este ireversibil — după aceea nu mai poți face rollback la versiunile de update anterioare. Fă un snapshot/backup înainte pe VM-uri.
# Elimina fisierele de backup ale Service Pack-ului (SP1, SP2 etc.) # Dupa asta SP-ul nu mai poate fi dezinstalat Dism.exe /Online /Cleanup-Image /SPSuperseded
# Listeaza toate rolurile instalate
Get-WindowsFeature | Where-Object { $_.Installed -eq $true } | Format-Table Name, DisplayName
# Dezinstaleaza un rol si sterge binarele din WinSxS (ex: Telnet-Client)
Uninstall-WindowsFeature -Name Telnet-Client -Remove
# Alternativa DISM pentru roluri neinstalate — sterge binarele din store
Dism.exe /Online /Disable-Feature /FeatureName:TelnetClient /Remove
# Verifica spatiul recuperat
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
# Opreste Windows Update
Stop-Service wuauserv, bits, cryptsvc -Force
# Redenumeste folderul vechi (backup sigur)
Rename-Item "C:\Windows\SoftwareDistribution" `
"C:\Windows\SoftwareDistribution.bak"
# Reporneste serviciile — Windows Update va recrea folderul gol
Start-Service wuauserv, bits, cryptsvc
# Dupa ce verifici ca update-urile functioneaza, sterge backup-ul:
# Remove-Item "C:\Windows\SoftwareDistribution.bak" -Recurse -Force
Crash dump-urile și log-urile de sistem sunt printre cele mai mari consumatoare de spațiu pe serverele de producție. Unele nu sunt vizibile în Explorer fără a afișa fișierele ascunse.
# Dump complet kernel (egal cu RAM-ul serverului!)
# Locatie implicita: C:\Windows\memory.dmp
Test-Path "C:\Windows\memory.dmp"
(Get-Item "C:\Windows\memory.dmp" -ErrorAction SilentlyContinue).Length / 1GB
# Mini dump-uri (mici, utile pentru diagnosticare)
Get-ChildItem "C:\Windows\Minidump" -ErrorAction SilentlyContinue |
Select-Object Name, @{N='KB';E={[math]::Round($_.Length/1KB,0)}} |
Sort-Object KB -Descending
# Sterge dump-ul complet (DUPA ce l-ai analizat sau nu mai ai nevoie)
Remove-Item "C:\Windows\memory.dmp" -Force -ErrorAction SilentlyContinue
# Sterge toate mini dump-urile
Remove-Item "C:\Windows\Minidump\*.dmp" -Force -ErrorAction SilentlyContinue
# Verifica configuratia curenta de dump Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl" | Select-Object CrashDumpEnabled, DumpFile, MiniDumpDir # Valori CrashDumpEnabled: # 0 = Niciun dump (nu recomandat pe server de productie) # 1 = Complete memory dump (= tot RAM-ul — cel mai mare) # 2 = Kernel memory dump (recomandat — compromis bun) # 3 = Small memory dump / Minidump (cel mai mic, ~256 KB) # 7 = Automatic memory dump (Windows decide) # Seteaza Kernel memory dump (recomandat pentru servere) Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl" ` -Name "CrashDumpEnabled" -Value 2 -Type DWord
# Sterge rapoartele in asteptare si arhivele WER
Remove-Item "C:\ProgramData\Microsoft\Windows\WER\ReportQueue\*" `
-Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "C:\ProgramData\Microsoft\Windows\WER\ReportArchive\*" `
-Recurse -Force -ErrorAction SilentlyContinue
# Verifica spatiul eliberat
$wer = "C:\ProgramData\Microsoft\Windows\WER"
"{0:N0} MB total WER" -f ((Get-ChildItem $wer -Recurse -Force `
-ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1MB)
# Loguri Component-Based Servicing (pot depasi 1 GB!)
Get-ChildItem "C:\Windows\Logs\CBS" | Measure-Object Length -Sum |
Select-Object @{N='MB';E={[math]::Round($_.Sum/1MB,1)}}
# Comprima log-ul curent si sterge arhivele vechi
Compress-Archive "C:\Windows\Logs\CBS\CBS.log" `
"C:\Windows\Logs\CBS\CBS_$(Get-Date -f yyyyMMdd).zip" -Force
Remove-Item "C:\Windows\Logs\CBS\CBS.log" -Force
# Sterge log-urile DISM
Remove-Item "C:\Windows\Logs\DISM\*" -Force -ErrorAction SilentlyContinue
# Gaseste toate log-urile IIS mai vechi de 30 zile si calculeaza spatiul
$cutoff = (Get-Date).AddDays(-30)
$iisLogs = Get-ChildItem "C:\inetpub\logs" -Recurse -File |
Where-Object { $_.LastWriteTime -lt $cutoff }
"Fisiere: $($iisLogs.Count) | Spatiu: {0:N0} MB" -f `
(($iisLogs | Measure-Object Length -Sum).Sum / 1MB)
# Sterge log-urile IIS mai vechi de 30 zile
$iisLogs | Remove-Item -Force
# Redirectioneaza log-urile IIS pe alt disc (recomandat pe termen lung)
# IIS Manager → Sites → selecteaza site → Logging → Log File → Directory: D:\IISLogs
Workarounduri suplimentare care recuperează spațiu rapid, fiecare cu risc scăzut pe un server de producție.
# Dezactiveaza hibernarea si sterge hiberfil.sys automat # Pe serverele Windows nu ai nevoie de hibernate powercfg -h off # Verifica: daca comanda a reusit, fisierul nu mai exista Test-Path "C:\hiberfil.sys" # trebuie sa returneze False # Re-activa daca schimbi parerea (ex: pe un laptop/workstation) powercfg -h on Pe un server cu 32 GB RAM, hiberfil.sys ocupa 25–32 GB. Dezactivarea este instantanee și fără riscuri pe servere (nu au nevoie de hibernate).
# Sterge continutul din Windows\Temp
Remove-Item "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
# Sterge continutul din Temp-ul utilizatorului curent
Remove-Item "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
# Sterge Temp pentru TOTI utilizatorii de pe server
Get-ChildItem "C:\Users" -Directory | ForEach-Object {
$tempPath = Join-Path $_.FullName "AppData\Local\Temp"
if (Test-Path $tempPath) {
Remove-Item "$tempPath\*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host "Curatat: $tempPath"
}
}
# PowerShell 5.0+ Clear-RecycleBin -Force -ErrorAction SilentlyContinue # Alternativa CMD (functioneaza pe orice versiune Windows Server) rd /s /q C:\$Recycle.Bin 2>nul
# Verifica starea curenta vssadmin list shadowstorage # Dezactiveaza System Restore pe C: (pe servere de productie nu e util) Disable-ComputerRestore -Drive "C:\" # Sterge toate shadow copies existente (elibereaza spatiu imediat) # ATENTIE: ireversibil — nu mai poti face rollback la stari anterioare vssadmin delete shadows /all /quiet
vssadmin list shadows.# Activeaza compresia NTFS pe un folder specific (ex: log-uri arhivate) # Nu afecteaza performanta pe fisiere rar accesate compact /c /s:"C:\ArchivedLogs" # Verifica rata de compresie compact "C:\ArchivedLogs\*" | Select-String "total" # Dezactiveaza compresia compact /u /s:"C:\ArchivedLogs"
# Script de raportare spatiu — ruleaza ca Administrator si salveaza raportul
$report = @()
$items = @(
@{N="pagefile.sys"; P="C:\pagefile.sys"},
@{N="hiberfil.sys"; P="C:\hiberfil.sys"},
@{N="memory.dmp"; P="C:\Windows\memory.dmp"},
@{N="WER ReportQueue";P="C:\ProgramData\Microsoft\Windows\WER\ReportQueue"},
@{N="Windows\Temp"; P="C:\Windows\Temp"},
@{N="CBS Logs"; P="C:\Windows\Logs\CBS"},
@{N="SoftwareDistrib";P="C:\Windows\SoftwareDistribution\Download"},
@{N="IIS Logs"; P="C:\inetpub\logs"}
)
foreach ($i in $items) {
if (Test-Path $i.P) {
$sz = (Get-ChildItem $i.P -Recurse -Force -ErrorAction SilentlyContinue |
Measure-Object Length -Sum).Sum
$report += [PSCustomObject]@{
Locatie = $i.N
"Dimensiune MB" = [math]::Round($sz / 1MB, 1)
}
}
Leave A Comment?