Освобождаем место на диске, удаляем компоненты Windows Update и ременные файлы
Недавно столкнулся с ситуацией: на одном из серверов системный диск практически «забился» под завязку, а штатные чистилки мусора не помогали – свободного места оставалось критически мало. Оказалось, что куча старых файлов обновлений, временных логов и упаковок пакетов Windows Update съели не меньше 20 ГБ!
Чтобы оперативно и централизованно освободить место на C:, я использовал PowerShell-скрипт для сброса компонентов Windows Update и удаления временных файлов.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# 1. Остановим службы обновлений Write-Host "Останавливаю службы Windows Update..." -ForegroundColor Cyan Stop-Service -Name wuauserv -Force Stop-Service -Name bits -Force Stop-Service -Name cryptsvc -Force # 2. Переименуем папки SoftwareDistribution и Catroot2 (чтобы сбросить кеш) $sd = "C:\Windows\SoftwareDistribution" $cr2 = "C:\Windows\System32\catroot2" $timestamp = Get-Date -Format "yyyyMMdd_HHmmss" Write-Host "Переименовываю SoftwareDistribution и Catroot2..." -ForegroundColor Cyan Rename-Item -Path $sd -NewName "SoftwareDistribution_$timestamp" -Force Rename-Item -Path $cr2 -NewName "catroot2_$timestamp" -Force # 3. Запустим службы обратно Write-Host "Запускаю службы Windows Update..." -ForegroundColor Cyan Start-Service -Name wuauserv Start-Service -Name bits Start-Service -Name cryptsvc # 4. Удаляем временные файлы пользователя и систему temp Write-Host "Удаляю временные файлы..." -ForegroundColor Cyan Get-ChildItem "C:\Windows\Temp" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue Get-ChildItem "$env:TEMP" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue # 5. Очищаем папку Prefetch (если нужно) Write-Host "Очищаю Prefetch (опционально)..." -ForegroundColor Cyan Get-ChildItem "C:\Windows\Prefetch" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue # 6. Запускаем анализ и дефрагментацию (для HDD/SDD команда отличается) Write-Host "Запускаю оптимизацию диска (для HDD)..." -ForegroundColor Cyan Optimize-Volume -DriveLetter C -ReTrim -Verbose Write-Host "Готово! Освобождено место и сброшен кеш Windows Update." -ForegroundColor Green |
Что делает скрипт:
►1) Останавливает службы wuauserv, bits и cryptsvc, чтобы освободить доступ к файлам обновлений.
►2) Переименовывает папки SoftwareDistribution и catroot2 – таким образом Windows создаёт новые «чистые» папки при следующем запуске службы обновлений.
►3) Перезапускает службы, чтобы система могла продолжить получать обновления.
►4) Удаляет старые временные файлы из C:\Windows\Temp и из переменной %TEMP% текущего пользователя.
►5) (Опционально) Очищает папку Prefetch – пригодится, если вы хотите сбросить предзагрузку приложений (иногда помогает ускорить старт служб).
►6) Запускает командлет Optimize-Volume с параметром –ReTrim (важно для SSD, если нужно, или дефрагментацию для HDD), что в итоге дополнительно освобождает свободное пространство и приводит метаданные диска в порядок.
Лайфхак:
– Если вы работаете со множеством серверов, оберните этот скрипт в экспорт модуля или сохраните в виде .ps1, а затем запускайте его через Scheduled Task по расписанию раз в неделю/месяц.
– Можно добавить проверку свободного места перед выполнением очистки, чтобы скрипт запускался, только когда доступно меньше, скажем, 10 ГБ:
|
1 2 3 4 5 6 |
$freeGB = [math]::Round((Get-PSDrive -Name C).Free / 1GB, 2) if ($freeGB -lt 10) { # выполняем очистку } else { Write-Host "Достаточно места — пропускаю действия." } |
Не забывайте тестировать на тестовых окружениях перед тем, как развертывать на продакшне.