Optimize WSL storage
C盘满了,扫了一下发现可能是WSL用太多,积累的安装包使得整个系统变得巨大。参考 https://woshub.com 上的帖子, 解决的思路大致有两种:
- 压缩使用空间
- 迁移到其他盘
检查使用情况
打开 Powershell:
1 | PS C:\> wsl --list --verbose |
找出该系统对应的文件夹名称:
1 | PS D:\WSL> Get-AppxPackage -Name "*Ubuntu20*" | Select PackageFamilyName |
计算出其占用空间:
1 | PS D:\WSL> $path= $env:USERPROFILE+ "\AppData\Local\Packages\" + (Get-AppxPackage -Name "*Ubuntu20*").PackageFamilyName + "\LocalState\ext4.vhdx" |
方法1:压缩空间
参考 reduce the size of the VHD file using the Optimize-VHD cmdlet (from the Hyper-V PowerShell module),需要先确保Hyper-V
已安装。
启用 Hyper-V
进入设置 控制面板 | 程序和功能 | 启用或关闭 windows 功能
启用后应该需要重启电脑。
optimize-vhd
打开 已启用Hyper-V
的 powershell
(管理员权限):
1 | PS D:\WSL> wsl --shutdown |
有时候可以压缩到几个Gb,有时候会像这样没什么效果。看情况,如果压缩效果满意的话也可以到此为止。
迁移 WSL
默认的WSL映像是存储在C盘的,如果该盘符分配空间不多而WSL又增长过快的话,将它移动到其他盘应该是个不错的选择。
首先,创建目标目录。比如准备迁移到D:\WSL
。
在powershell
中:
1 | PS C:\Users\chao> cd D: |
导出该系统映像
在powershell
中:
1 | PS D:\WSL> wsl --export Ubuntu-20.04 D:\WSL\ubuntu_20.04.tar |
注销原系统
1 | PS D:\WSL> wsl --unregister Ubuntu-20.04 |
导入到新的位置
1 | PS D:\WSL> wsl --import Ubuntu-20.04 D:\WSL\ D:\WSL\ubuntu_20.04.tar |
默认情况下系统的访问账号是root,为了与先前的体验保持一致,可以设置默认用户。
在powershell
中:
1 | PS D:\WSL> cd $env:USERPROFILE\AppData\Local\Microsoft\WindowsApps |
完好如初!