导出并取消注册 docker-desktop-data 后,哪个 WSL 发行版正在使用 AppData\Local\Docker\wsl\data\ext4.vhdx

Any*_*ify 10 diskspace windows-subsystem-for-linux docker-desktop

由于 WSL 的空间消耗不断增加,我被迫将 WSL 发行版移至另一个磁盘。
Ubuntu
docker-desktop
docker-desktop-数据

我使用了这些命令。
wsl --shutdown
wsl --export (on all three of those distros)
wsl --import (already on another disk)

现在我的环境运行良好,但AppData\Local\Docker\wsl\data中的ext4.vhdx仍然存在,并且由于仍在使用而我无法删除它。

当我查看流程的时候 在此输入图像描述

它仍然被系统使用,这并没有说明太多。

如果我运行磁盘E:WSL --shutdown上存在的所有虚拟磁盘,则会丢失其句柄,而磁盘C:上的虚拟磁盘仍在使用中。

在此输入图像描述

您知道如何找出 WSL 的哪一部分或者它是否是 WSL 正在使用?由于关闭 WSL 不会删除该句柄,因此它可能会被其他东西使用。它不是使用不同磁盘的 docker-for-desktop。

感谢您的建议。

Max*_*lov 12

Docker Desktop for Windows 使用 WSL2,将所有映像和容器文件存储在单独的虚拟卷 (vhdx) 中。当需要更多空间(达到一定限制)时,该虚拟硬盘文件可以自动增长。不幸的是,如果您回收一些空间,即通过删除未使用的图像,vhdx 不会自动缩小。幸运的是,您可以通过在 PowerShell 中调用以下命令(以管理员身份)来手动减小其大小:

Optimize-VHD -Path $Env:LOCALAPPDATA\Docker\wsl\data\ext4.vhdx -Mode Full
Run Code Online (Sandbox Code Playgroud)

如果上述命令失败并显示

The system failed to compact 'C:\Users\Maxx\AppData\Local\Docker\wsl\data\ext4.vhdx':
The process cannot access the file because it is being used by another process. (0x80070020).
Run Code Online (Sandbox Code Playgroud)

退出 Docker Desktop 或停止使用该文件的服务和任务:

net stop com.docker.service
taskkill /IM "docker.exe" /F
taskkill /IM "Docker Desktop.exe" /F
wsl --shutdown
Run Code Online (Sandbox Code Playgroud)

我回收了 40Gb 中的 15Gb。

解决方案的起源。


小智 5

您只需从界面中清除数据即可。故障排除 -> 清理/清除数据

在此输入图像描述


Any*_*ify 0

从 WSL1 升级到 WSL2 让它有点混乱,但是将 docker-desktop 重置为其默认设置,然后从 WSL 中清除数据(使用 docker-desktop 故障排除)为我清除了它。