文章

处理 WSL 过大

处理 WSL 过大

1. 迁移虚拟磁盘文件ext4.vhdx

参考

WSL2本质上是一个虚拟机,因此必然存在磁盘镜像文件。
默认情况下,这个镜像文件会放在C盘(%LOCALAPPDATA%\Packages<PackageFamilyName>\LocalState<disk>.vhdx
但是由于部分厂商预装系统时,C盘并不会留出较大容量,这就会导致C盘可用空间随着WSL2的使用逐渐耗尽. 为了将这个磁盘镜像文件移动到其他分区(下方以D盘为例),故写下这篇文章.

  1. 打开带管理员权限的PowerShell
  2. 首先输入wsl -l -v查看当前已经安装的WSL实例: ```powershell PS C:\windows\system32> wsl -l -v NAME STATE VERSION
    • Ubuntu Running 2 ``` 我只安装了一个WSL2的实例,名为Ubuntu
  3. 接下来需要将现有WSL2实例备份导出:
    1
    
     wsl --export Ubuntu D:\Ubuntu_bak.tar
    

    这里以导出到D盘下,命名为Ubuntu_bak.tar为例

  4. 备份完成后注销现有实例
    1
    
     wsl --unregister Ubuntu
    
  5. 然后从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 2 WSL版本为2
  6. 设置默认登录用户
    1
    
     ubuntu config --default-user ryan
    

    ubuntu是你在微软商店安装的Linux分发版的名称,如果你安装的是Ubuntu20.04,这里就执行ubuntu2004,以此类推;

  7. 完成

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路径

  1. 使用 wsl --shutdown 命令终止所有 WSL 实例
  2. 若要查找你的分发版安装包名称(“PackageFamilyName”):
    1. 使用 PowerShell(其中,“distro”是分发版名称)输入以下命令:
      Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
    2. 例如:Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName
      1
      2
      3
      4
      5
      
       PS C:\Users\brain> Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName
      
       PackageFamilyName
       -----------------
       CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc
      
  3. 使用生成的 PackageFamilyName 查找 WSL 2 安装使用的 VHD 文件 fullpath,这将是你的 pathToVHD。 若要查找完整路径:
    1. 打开%LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState文件夹
    2. pathToVHD%LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx.
    3. 例如,Ubuntu 20.04 的 <pathToVHD> 应如下所示:%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79xxxx\LocalState\ext4.vhdx
本文由作者按照 CC BY 4.0 进行授权