将 WSL 移动到 Windows 中的另一个驱动器
Windows Subsystem for Linux(WSL2) 被开发人员、管理员和普通用户广泛使用,用于在 Windows 中运行不同的 Linux 发行版(Ubuntu、Debian、OpenSUSE、Kali Linux、Alpine)、工具和应用程序,而无需使用虚拟化和双启动。在本文中,我们将展示如何将现有 WSL 安装的文件移动到不同的驱动器或计算机。
在 Windows 中安装 WSL 时,所有环境文件都保存到系统驱动器 C:\。如果您的系统驱动器不够大(例如 SSD),WSL 文件系统的大小可能会显着增加,您可能需要将 WSL 移动到另一个驱动器或计算机。您可以通过多种方式移动 WSL 安装。
首先,获取当前驱动器上 WSL 文件系统的当前大小。列出计算机上已安装的 WSL 发行版:
wsl --list --verbose在此示例中,仅安装了 Ubuntu-20.04。运行以下 PowerShell 命令以获取 Linux 发行版中的 UWP 应用的名称:
Get-AppxPackage -Name "*Ubuntu20*" | Select PackageFamilyName
在我的示例中,UWP 包的名称是 CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc。 Linux镜像的WSL文件系统位于ext4.vhdxVHD文件中
%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx。
要使用 PowerShell 获取文件大小,请运行以下命令:
$path= $env:USERPROFILE+ "\AppData\Local\Packages\" + (Get-AppxPackage -Name "*Ubuntu20*").PackageFamilyName + "\LocalState\ext4.vhdx"
Get-ChildItem -Path $path | fl @{Label="SizeGb"; Expression={$_.Length / 1Gb}}您可以尝试使用 Optimize-VHD cmdlet(来自 Hyper-V PowerShell 模块)减小 VHD 文件的大小。有时这就足够了:
optimize-vhd -Path <PATH_TO_VHD> -Mode fullWSL 发行版的 VHD 文件的路径存储在注册表项下的 BasePath 注册表参数中
HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\{UUID}。
您可以停止 WSL,将 ext4.vhdx 移动到另一个驱动器,然后更改注册表中目录的路径。但这种情况不推荐!
在当前的 Windows 10 和 11 版本中,您可以使用内置的导出和导入过程正确迁移 WSL 环境。
运行WSL环境并检查用户名:
wsl
whoami在我们的示例中,它是sysops。
关闭在 Linux 环境和 WSL 控制台中运行的所有应用程序:
wsl --shutdown为了备份(导出)您的 WSL 环境并将其保存到驱动器 E:,请运行以下命令:
mkdir e:\backup
wsl --export Ubuntu-20.04 e:\backup\ubuntu.tar等待 WSL 导出结束(可能需要很长时间)。包含 WSL ext4 文件系统的 TAR 存档将出现在目标目录中。
然后您可以删除源磁盘上的 WSL 文件:
wsl --unregister Ubuntu-20.04在新驱动器上为 Linux 映像创建一个目录,并使用以下命令将 TAR 存档导入到 WSL:
mkdir E:\WSL
wsl --import Ubuntu-20.04 E:\WSL\ E:\backup\ubuntu.tarUbuntu 的默认登录用户是 root。要将其更改为另一个用户名(我们之前得到的),请运行:
cd $env:USERPROFILE\AppData\Local\Microsoft\WindowsApps
.\ubunt4.exe config --default-user sysops
启动WSL环境:
wsl -d Ubuntu-20.04您可以使用相同的方案将配置的 WSL 映像移动到其他计算机。
您可以使用第三方实用程序 LxRunOffline (可在 GitHub 上获取 — https://github.com/DDoSolitary/LxRunOffline)在 Windows 中移动 WSL。您可以使用 Chocolatey 安装它:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
choco install lxrunoffline列出可用的 WSL 图像:
lxrunoffline list终止所有 WSL 进程:
wsl --shutdown要获取当前目录,WSL 映像位于:
lxrunoffline get-dir -n Ubuntu-20.04要将 WSL 映像移动到另一个磁盘:
lxrunoffline move -n Ubuntu-20.04 -d d:\wsl2\Ubuntu-20.04迁移完成后,使用以下命令启动 WSL:
wsl -d Ubuntu-20.04或者
lxrunoffline run -n Ubuntu-20.04 -w在 Windows 11 中,您还可以将 Windows Subsystem for Andriod (WSA) 与 WSL 一起运行。







