Skip to content

Instantly share code, notes, and snippets.

@Iristyle
Last active May 12, 2020 22:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Iristyle/2b50521fd1088c50f3c8031c7944edf2 to your computer and use it in GitHub Desktop.
Save Iristyle/2b50521fd1088c50f3c8031c7944edf2 to your computer and use it in GitHub Desktop.
Script to clean images, volumes and networks, hyper-v VMs and disk cache from degraded Azure CI system / agent
Write-Host "Waiting for containers to exit." -NoNewLine
while ($(docker ps -q))
{
Write-Host "." -NoNewLine
Start-Sleep 1
}
Write-Host
Write-Host "Stopping Azure Agent"
Stop-Service vstsagent*
# This cleaned up LCOW, but kills WSL2 VM, so skip it
# Write-Host "Killing all running VMs"
# hcsdiag list |
# ? { $_ -match '^[^\s]' } |
# % { Write-Host "Killing $_"; hcsdiag kill $_ }
$images = docker image ls -q | Measure-Object | Select -ExpandProperty Count
Write-Host "Found $images Images to Remove"
$volumes = docker volume ls -q | Measure-Object | Select -ExpandProperty Count
Write-Host "Found $volumes Volumes to Remove"
Write-Host "Removing all docker managed state"
docker system prune --all --volumes --force
Write-Host "Removing Docker builder cache"
docker builder prune --force
Write-Host "Stopping Docker"
Stop-Service Docker
Write-Host "Inspect WSL2 VDisk"
$vhd = Join-Path ([System.Environment]::GetFolderPath('LocalApplicationData')) "docker\wsl\data\ext4.vhdx"
$diskPartScript = [System.IO.Path]::GetTempFileName()
@"
select vdisk file="$vhd"
detail vdisk
"@ | Out-File -FilePath $diskPartScript -Encoding Ascii
diskpart /s $diskPartScript
Write-Host "Compact WSL2 VDisk (skipped for now)"
@"
select vdisk file="$vhd"
compact vdisk
detail vdisk
"@ | Out-File -FilePath $diskPartScript -Encoding Ascii
# diskpart /s $diskPartScript
Remove-Item $diskPartScript
Write-Host "Cleaning Docker LCOW file system caches"
@(
"${ENV:ProgramData}\docker\image\lcow\layerdb\sha256",
"${ENV:ProgramData}\docker\image\windowsfilter\distribution\diffid-by-digest\sha256",
"${ENV:ProgramData}\docker\image\windowsfilter\distribution\v2metadata-by-diffid\sha256",
"${ENV:ProgramData}\docker\image\lcow\layerdb\mounts",
"${ENV:ProgramData}\docker\image\lcow\layerdb\tmp",
# cache and scratch directories get recreated
"${ENV:ProgramData}\docker\lcow"
) |
% {
$count = Get-ChildItem $_ -Recurse | Measure-Object | Select -ExpandProperty Count
Write-Host "Removing $count children from $_"
Remove-Item $_\* -Recurse -Force
}
Restart-Computer -Force
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment