Featured image of post WSL 清理释放磁盘空间

WSL 清理释放磁盘空间

WSL 删除文件后,并未释放磁盘空间,所以需要在Windows上使用diskpart命令进行VHD空间的释放

背景

在 WSL 中,删除文件后,并不会直接释放磁盘空间,因为 WSL 使用虚拟硬盘 (VHD) 文件来存储整个 Linux 文件系统。也就是说,WSL 中删除文件时,对于 Windows 来说,这个 VHD 文件大小并没有变化。

解决方案

首先,打开 PowerShell,先关闭正在运行的 WSL:

1
wsl --shutdown

运行 diskpart 命令(需要管理员权限):

1
2
3
4
5
6
diskpart
select vdisk file="C:\Users\[YourUsername]\AppData\Local\Packages\[WSLDistro]\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

这样就可以将 VHD 占用的空间缩小。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ diskpart

Microsoft DiskPart 版本 10.0.22621.1

Copyright (C) Microsoft Corporation.
在计算机上: DESKTOP-LMR

DISKPART> select vdisk file="C:\Users\LMR\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"

DiskPart 已成功选择虚拟磁盘文件。

DISKPART> attach vdisk readonly

  100 百分比已完成

DiskPart 已成功连接虚拟磁盘文件。

DISKPART> compact vdisk

  100 百分比已完成

DiskPart 已成功压缩虚拟磁盘文件。

DISKPART> detach vdisk

DiskPart 已成功分离虚拟磁盘文件。

DISKPART> exit

退出 DiskPart...