# Docker VHDX 压缩脚本 # 用途:压缩 Docker 的 VHDX 虚拟磁盘文件 # 注意:此操作需要停止 Docker Desktop Write-Host "=== Docker VHDX 压缩工具 ===" -ForegroundColor Cyan Write-Host "此操作将停止 Docker Desktop 并压缩 VHDX 文件`n" -ForegroundColor Yellow $vhdxPath = "D:\Users\Mr_Wu01\Documents\DockerDesktopWSL\disk\docker_data.vhdx" # 1. 检查文件是否存在 if (!(Test-Path $vhdxPath)) { Write-Host "❌ 未找到 VHDX 文件: $vhdxPath" -ForegroundColor Red exit 1 } # 2. 显示当前大小 $originalSize = [math]::Round((Get-Item $vhdxPath).Length/1GB, 2) Write-Host "当前 VHDX 文件大小: $originalSize GB" -ForegroundColor Yellow # 3. 确认操作 $confirm = Read-Host "`n是否继续压缩?这将停止 Docker Desktop (Y/N)" if ($confirm -ne 'Y' -and $confirm -ne 'y') { Write-Host "操作已取消" -ForegroundColor Yellow exit 0 } # 4. 停止 Docker Desktop Write-Host "`n停止 Docker Desktop..." -ForegroundColor Yellow Stop-Process -Name "Docker Desktop" -Force -ErrorAction SilentlyContinue Start-Sleep -Seconds 3 # 5. 关闭 WSL Write-Host "关闭 WSL..." -ForegroundColor Yellow wsl --shutdown Start-Sleep -Seconds 5 # 6. 压缩 VHDX Write-Host "`n开始压缩 VHDX 文件..." -ForegroundColor Yellow Write-Host "这可能需要几分钟,请耐心等待..." -ForegroundColor Cyan $diskpartScript = @" select vdisk file="$vhdxPath" attach vdisk readonly compact vdisk detach vdisk "@ $diskpartScript | diskpart # 7. 显示压缩后大小 Start-Sleep -Seconds 2 $newSize = [math]::Round((Get-Item $vhdxPath).Length/1GB, 2) $saved = $originalSize - $newSize Write-Host "`n=== 压缩完成 ===" -ForegroundColor Green Write-Host "原始大小: $originalSize GB" -ForegroundColor Yellow Write-Host "压缩后大小: $newSize GB" -ForegroundColor Green Write-Host "节省空间: $saved GB" -ForegroundColor Cyan # 8. 询问是否重启 Docker $restart = Read-Host "`n是否重启 Docker Desktop? (Y/N)" if ($restart -eq 'Y' -or $restart -eq 'y') { Write-Host "`n启动 Docker Desktop..." -ForegroundColor Yellow Start-Process "C:\Program Files\Docker\Docker\Docker Desktop.exe" Write-Host "Docker Desktop 正在启动..." -ForegroundColor Green } Write-Host "`n✅ 操作完成!" -ForegroundColor Green