WSL操作记录
磁盘压缩 WSL 可以视作在 Windows 系统上的基于 Hyper-V 的虚拟机,类似 Virtual Box 虚拟机文件,磁盘动态扩容,但是不会主动压缩。也就是如果放入了过多文件,WSL 的磁盘会动态增加到能够存入这些文件的大小,然而当文件被删除时,WSL 的磁盘会保留原始容量,不会主动降低。 WSL 中提供了--manage <DistroName> --set-sparse true的命令,可以通过将 vhdx 虚拟磁盘设置为稀疏模式,从而自动对容量进行调整。但是社区反映存在磁盘内容丢失的风险,WSL 官方也设置了提醒,需要强制启用才可以生效。 可以考虑使用 Windows 自带的 diskpart 工具进行压缩。不过为了保证安全,建议压缩前将 WSL 中的镜像文件导出进行备份,这里以 Ubuntu-20.04 为例,导出为 tar 格式,也可选择 tar.gz/tar.xz/vhd 格式。 wsl --export Ubuntu-20.04 D:\Ubuntu-20.04.tar --format tar 具体步骤 停止运行 WSL 实例 首先,停止目前正在运行的 WSL 实例。 wsl --shutdown 当所有实例显示 Stopped (停止)时,即可进入下一步。 压缩磁盘文件 在 Powershell 窗口中,输入diskpart命令,进入磁盘管理。注意,此处需要管理员权限进行提权操作。 选择 WSL 实例的虚拟磁盘文件 WSL 示例的磁盘文件一般位于"C:\Users\<当前用户名>\AppData\Local\wsl\<一大串字符>\ext4.vhdx",由于文件夹路径并没有很直观地与示例名称对应,建议使用文件树软件搜索 vhdx 相关文件。 输入以下命令选择虚拟磁盘文件。 select vdisk file="C:\Users\<当前用户名>\AppData\Local\wsl\<一大串字符>\ext4.vhdx" 执行压缩程序 选择磁盘文件后,输入以下命令进行压缩。 compact vdisk 之后等待压缩完成,出现以下提示。 卸载磁盘 压缩完成后,卸载虚拟磁盘文件。 detach vdisk 最后 最后重新使用wsl -d <DistroName>运行实例即可,可以发现虚拟磁盘文件已经缩小了,磁盘空间增大。