Skip to content

WSL空间释放

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

在使用wsl的过程中,经常发现wsl2删除文件后虚拟磁盘空间不释放,非常奇怪,这里也是搜索了很多资料,最终找到解决办法,如下:

不同于 WSL1,WSL2 本质上是虚拟机,所以 Windows 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。

这个 vhdx 后缀的虚拟磁盘文件特点是可以自动扩容,但是一般不会自动缩容

一旦有很多文件把它"撑大",即使把这些文件删除它也不会自动"缩小"。所以删除文件后还需要我们手动进行压缩才能释放磁盘空间。

解决办法

  1. 找到并确定需要压缩的虚拟磁盘文件

    首先我们要找到ext4.vhdx文件,这个文件就是wsl2的虚拟磁盘文件,一般在C:\Users\用户名\AppData\Local\Packages\WSL2\Files\rootfs\ext4.vhdx,这个文件就是wsl2的虚拟磁盘文件

    这里我的虚拟磁盘文件经过迁移,你们按照自己的来就好

    • ubuntu: O:\WSL\Ubuntu\ext4.vhdx
    • docker desktop: O:\WSL\docker-desktop-data\DockerDesktopWSL\main\ext4.vhdx
    • docker desktop data: O:\WSL\docker-desktop-data\DockerDesktopWSL\data\ext4.vhdx
  2. 备份虚拟磁盘文件(可选)

    只是为了方便恢复,如果不需要可以忽略这一步

  3. 压缩虚拟磁盘文件

    首先关闭wsl

    powershell
    wsl --shutdown
    wsl --shutdown

    允许管理计算机的驱动器的DiskPart命令:

    powershell
    diskpart
    diskpart

    在打开的DiskPart命令窗口中,输入以下命令:

    1. 这里指定你需要压缩的虚拟磁盘文件
    powershell
    select vdisk file="O:\WSL\Ubuntu\ext4.vhdx"
    select vdisk file="O:\WSL\Ubuntu\ext4.vhdx"
    powershell
    select vdisk file="O:\WSL\docker-desktop-data\DockerDesktopWSL\main\ext4.vhdx"
    select vdisk file="O:\WSL\docker-desktop-data\DockerDesktopWSL\main\ext4.vhdx"
    powershell
    select vdisk file="O:\WSL\docker-desktop-data\DockerDesktopWSL\data\ext4.vhdx"
    select vdisk file="O:\WSL\docker-desktop-data\DockerDesktopWSL\data\ext4.vhdx"
    1. 压缩文件(这里选择一个磁盘就需要压缩一次,不能同时选取多个磁盘文件)
    powershell
    compact vdisk
    compact vdisk
    1. 压缩完毕后卸载磁盘

    如果报虚拟机磁盘服务错误;虚拟磁盘已经分离,不用担心,去看看磁盘大小即可

    powershell
    detach vdisk
    detach vdisk

    执行完上述操作,wsl2删除后空出的磁盘空间就释放了