当前位置: 首页 > Linux

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

时间:2023-04-06 04:54:29 Linux

解决删除文件清理后WSL2磁盘空间未释放的问题。但是清理后发现C盘剩余空间并没有增加,很奇怪。在网上找了半天,终于找到了原因和解决办法。1分析原因与WSL1不同,WSL2本质上是一个虚拟机,所以Windows会自动创建一个vhdx后缀的虚拟磁盘文件作为存储。这个vhdx后缀的虚拟磁盘文件的特点是可以自动扩容,但一般不会自动缩容。一旦有很多文件要“放大”它,即使删除这些文件它也不会自动“缩小”。因此,删除文件后,我们需要手动压缩,以释放磁盘空间。2如何操作2.1查找并确定要压缩的虚拟磁盘文件首先,我们查找ext4.vhdx文件。我的WSL2有以下Linux发行版:?wsl-l-vNAMESTATEVERSION*Ubuntu-20.04Running2docker-desktopRunning2docker-desktop-dataRunning2我找到的ext4.vhdx文件路径如下:C:\Users\richa\AppData\Local\Docker\wsl\data\ext4.vhdxC:\Users\richa\AppData\Local\Docker\wsl\distro\ext4.vhdxC:\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发行版(可选)在PowerShell中执行:#关闭WSL2中的linux发行版swsl--shutdown#备份指定的Linux发行版到指定位置wsl--exportUbuntu-20.04D:\Ubuntu-20.04.tar如果后续步骤出错,可以从备份文件中恢复。后面的步骤我都没有出错,所以没有练习recovery操作。有需要的读者可以参考:wsl2-backup-and-restore-images-using-import-and-export2.3压缩虚拟磁盘文件,在PowerShell中执行:#关闭WSL2中的linux发行版swsl--shutdown#运行管理计算机在新打开的DiskPart命令窗口中执行驱动器的DiskPart命令diskpart:#选择虚拟磁盘文件selectvdiskfile="C:\Users\richa\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"#压缩文件compactvdisk#压缩完成后卸载磁盘detachvdisk。以上操作完成后,WSL2删除文件后腾出的磁盘空间就被释放了。