处理 WSL 过大
处理 WSL 过大
1. 迁移虚拟磁盘文件ext4.vhdx
WSL2本质上是一个虚拟机,因此必然存在磁盘镜像文件。
默认情况下,这个镜像文件会放在C盘(%LOCALAPPDATA%\Packages<PackageFamilyName>\LocalState<disk>.vhdx)
但是由于部分厂商预装系统时,C盘并不会留出较大容量,这就会导致C盘可用空间随着WSL2的使用逐渐耗尽. 为了将这个磁盘镜像文件移动到其他分区(下方以D盘为例),故写下这篇文章.
- 打开带管理员权限的PowerShell
- 首先输入
wsl -l -v查看当前已经安装的WSL实例:1 2 3
wsl -l -v # NAME STATE VERSION # * Ubuntu Running 2
我只安装了一个WSL2的实例,名为Ubuntu
- 接下来需要将现有WSL2实例备份导出:
1
wsl --export Ubuntu D:\Ubuntu_bak.tar
这里以导出到D盘下,命名为
Ubuntu_bak.tar为例 - 备份完成后注销现有实例
1
wsl --unregister Ubuntu
- 然后从
Ubuntu_bak.tar导入,此时可以指定存放虚拟磁盘镜像文件的路径:1
wsl --import Ubuntu_new D:\WSL_Ubuntu D:\Ubuntu_bak.tar --version 2
参数:
Ubuntu_new实例名称,可以自己设置,设置后即为第2步输入wsl -l -v后显示的名称;D:\WSL_Ubuntu导入后的镜像及其相关数据存放路径;D:\Ubuntu_bak.tar导入的备份,即第3步通过wsl --export导出的文件;–version 2WSL版本为2
- 设置默认登录用户
1
ubuntu config --default-user ryan
ubuntu是你在微软商店安装的Linux分发版的名称,如果你安装的是Ubuntu20.04,这里就执行ubuntu2004,以此类推;
- 完成
2. 压缩ext4.vhdx
参考
For Windows 10 Home (alternative Optimize-VHD cmdlet):
1
2
3
4
5
6
7
8
wsl --shutdown
diskpart
## open window Diskpart
select vdisk file="C:\WSL-Distros\…\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
3. 扩展 WSL 2 虚拟硬盘的大小
通过PowerShell查询ext4.vhdx路径
- 使用
wsl --shutdown命令终止所有 WSL 实例 - 若要查找你的分发版安装包名称(“PackageFamilyName”):
- 使用 PowerShell(其中,“distro”是分发版名称)输入以下命令:
Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName - 例如:
Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName1 2 3 4 5
PS C:\Users\brain> Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName PackageFamilyName ----------------- CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc
- 使用 PowerShell(其中,“distro”是分发版名称)输入以下命令:
- 使用生成的
PackageFamilyName查找 WSL 2 安装使用的 VHD 文件fullpath,这将是你的pathToVHD。 若要查找完整路径:- 打开
%LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState文件夹 pathToVHD为%LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx.- 例如,Ubuntu 20.04 的
<pathToVHD>应如下所示:%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79xxxx\LocalState\ext4.vhdx。
- 打开
本文由作者按照 CC BY 4.0 进行授权