Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WSL2 虚拟磁盘文件空间回收 #21

Open
maboloshi opened this issue Mar 2, 2021 · 4 comments
Open

WSL2 虚拟磁盘文件空间回收 #21

maboloshi opened this issue Mar 2, 2021 · 4 comments

Comments

@maboloshi
Copy link
Owner

问题

从 WSL2 微软起将虚拟机磁盘镜像文件转换为vhdx格式,用于存储其内容,类似于vmdk、vdi,用过虚拟机的同学应该都不陌生。

这种镜像文件的特点是支持自动扩容,即使磁盘镜像文件中已经删除了,但是一般不会自动缩容。因此磁盘镜像文件本身会越来越大。所以需要回收这部分已删除但是实际磁盘镜像文件并没有缩小的空间。

解决方案

使用Diskpart工具中的compact功能压缩磁盘镜像文件
步骤如下:

# 彻底关闭 WSL2 虚拟机
wsl --shutdown
# 新开一个 Diskpart 窗口
diskpart
# 指定 WSL2 虚拟机磁盘镜像文件位置
select vdisk file="C:\WSL-Distros\…\ext4.vhdx"
# 只读 附加磁盘镜像文件
attach vdisk readonly
# 压缩 vhdx 磁盘镜像文件
compact vdisk
# 分离 vhdx 磁盘镜像文件
detach vdisk
# 退出
exit

代码来自 microsoft/WSL#4699 (comment)

如此操作完成之后,就可以看到磁盘空间已经收回了。

@DreamGallery
Copy link

可以先执行一下fstrim -a这个命令回收一下wsl未使用的空间,我之前只是用上面的步骤发现并没有变小,
然后自己去把虚拟磁盘写0空间才会变化,现在用这个命令倒是快很多

@Sevule
Copy link

Sevule commented Apr 11, 2023

DiskPart 遇到错误: 指定的文件已加密,而且用户没有能力解密。
有关详细信息,请参阅系统事件日志。

@famiji
Copy link

famiji commented Apr 24, 2023

DiskPart 遇到错误: 指定的文件已加密,而且用户没有能力解密。 有关详细信息,请参阅系统事件日志。

我也遇到一样的回答,请问是否有解决方法呢?

@Sevule
Copy link

Sevule commented Apr 29, 2023

DiskPart 遇到错误: 指定的文件已加密,而且用户没有能力解密。 有关详细信息,请参阅系统事件日志。

我也遇到一样的回答,请问是否有解决方法呢?

你是否在应用设置中将从Microsoft Store安装的Linux移动了了位置,如果是在应用设置中移动的,请重装Linux,然后使用目录软链接将数据移动到其他盘

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants