网站更新内容:请访问: https://bigdata.ministep.cn/

解决删除文件后 WSL2 磁盘空间不释放的问题

Tags: #wsl #wsl2 #windows

今天突然发现 C 盘快满了,想起来之前把 Docker 容器的数据持久化到了 WSL2 的某个目录下,于是就想着把不需要的文件清理了。但清理完毕之后我发现 C 盘的剩余空间并没有变大,非常的奇怪。后来我在网上搜索了很久,终于找到了原因和解决方法。

1 分析原因

不同于 WSL1WSL2 本质上是虚拟机,所以 Windows 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。这个 vhdx 后缀的虚拟磁盘文件特点是可以自动扩容,但是一般不会自动缩容。一旦有很多文件把它“撑大”,即使把这些文件删除它也不会自动“缩小”。所以删除文件后还需要我们手动进行压缩才能释放磁盘空间。

2 如何操作

2.1 找到并确定要压缩的虚拟磁盘文件

首先,我们搜索并找到 ext4.vhdx 文件。

我的 WSL2 有如下的 Linux distributions:

➜  wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

我搜索到的 ext4.vhdx 文件路径如下:

  • C:\Users\richa\AppData\Local\Docker\wsl\data\ext4.vhdx
  • C:\Users\richa\AppData\Local\Docker\wsl\distro\ext4.vhdx
  • C:\Users\richa\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

由于我这里 C 盘空间不足主要是 Ubuntu-20.04 删除文件后 ext4.vhd 没有缩容引起的,所以只压缩了它的 ext4.vhdx

如果出现删除 Docker 镜像、删除 Docker 容器后磁盘占用没有缩小,应该也可以类比操作。

2.2 备份虚拟磁盘文件所属的 Linux distribution(可选)

在 PowerShell 中执行:

# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 备份指定的 Linux distribution 到指定的位置
wsl --export Ubuntu-20.04 D:\Ubuntu-20.04.tar

如果后续步骤出现错误,可以从备份的文件中恢复。本人后续步骤并没有出现错误,所以并没有实践恢复的操作。

有需要的读者可以参考:wsl2-backup-and-restore-images-using-import-and-export

2.3 压缩虚拟磁盘文件

在 PowerShell 中执行:

# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 运行管理计算机的驱动器的 DiskPart 命令
diskpart

在新打开的 DiskPart 命令窗口中执行:

# 选择虚拟磁盘文件
select vdisk file="C:\Users\richa\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
# 压缩文件
compact vdisk
# 压缩完毕后卸载磁盘
detach vdisk

上述操作执行完毕,WSL2 删除文件后空出来的磁盘空间就被释放了。

 

参考:

[解决删除文件后 WSL2 磁盘空间不释放的问题 - 知乎](https://zhuanlan.zhihu.com/p/521747491)

posted @ 2024-05-30 23:35  ministep88  阅读(748)  评论(0编辑  收藏  举报
网站更新内容:请访问:https://bigdata.ministep.cn/