WSL2 导入和导出

本文最后更新于 2024年10月20日 中午

WSL 的虚拟磁盘 ext4.vdhx 只会随着数据的增加自动扩展,但不会自动缩小。导出压缩再导入似乎是一种解决方法,但我并没有成功。 所以想到虚拟机创建镜像的方式,在某个时间节点备份一下 WSL 的数据,达到缩小磁盘的目的,同时避免重装系统带来的重复的配置工作。

导出 WSL

  1. 查看 WSL 发行版列表

    1
    wsl --list

  2. 关闭 WSL

    1
    wsl --shutdown
    1
    wsl --terminate ${wsl}

  3. 导出 WSL 发行版

    1
    wsl --export ${wsl} ${path}

  • wsl 是发行版名称,如 Ubuntu-20.04
  • path 是导出的路径,如 D:\wsl\Ubuntu-20.04.tar

此处导出的文件就可以作为系统的备份。

导入 WSL

由于 wsl --import 需要指定一个安装路径,我采用先删除再创建新的 WSL,创建时导入备份文件。

  1. 在 PowerShell 中查看 WSL 发行版路径

    1
    2
    3
    Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" | ForEach-Object {
    Get-ItemProperty $_.PSPath | Select-Object DistributionName, BasePath
    }
    这里是为了把新系统安装到相同的路径,如果不需要可以跳过这一步。

    如果得到类似 C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu24.04LTS_79rhkp1fndgsc\LocalState 这样的路径,说明 WSL 是通过 Microsoft Store 安装的,不建议在 import 时指定相同的路径,因为这样可能会导致系统不稳定或损坏现有的发行版(没试过)。

    如果一定要安装到相同的路径,可以先备份 ext4.vhdx 文件,然后删除 WSL 发行版,创建新的 WSL 后,把新的 ext4.vhdx 文件删除,再把备份的 ext4.vhdx 文件放到那里(也没试过)[1]

  2. 删除 WSL 发行版

    1
    wsl --unregister ${wsl}

  • wsl 是发行版名称,如 Ubuntu-20.04
  1. 创建 WSL 发行版
    1
    wsl --import ${wsl} ${path} ${tar}
  • wsl 是发行版名称,如 Ubuntu-20.04
  • path 是安装路径,如 D:\wsl\Ubuntu-20.04
  • tar 是备份文件路径,如 D:\wsl\Ubuntu-20.04.tar

参考


WSL2 导入和导出
https://term-inator.github.io/2024/10/18/wsl2-import-and-export/
作者
Sicong Chen
发布于
2024年10月18日
更新于
2024年10月20日
许可协议