一、前言

1. 什么是 WSL

WSL(Windows Subsystem for Linux) 是微软在 Windows 10 及后续版本提供的一项功能,它允许用户在 Windows 系统上直接运行 Linux 环境,而无需使用传统的虚拟机软件(如 VirtualBox、VMware 等)。WSL 提供了与真实 Linux 环境几乎一致的命令行工具、文件系统以及网络环境,极大地提升了在 Windows 平台下进行 Linux 开发和运维的便利性。

2. 为什么要打包迁移 WSL

在日常开发或运维的过程中,我们可能已经在本地的 WSL 上安装了各种软件、环境依赖、配置文件等,并完成了大量的定制化。如果我们想在另一台电脑上重现相同的开发环境,最省时省力的方法就是打包备份现有的 WSL,然后在新的机器上导入它。这样可以一次性迁移所有环境依赖和数据,而不需要在新电脑上重新安装所有软件、重新进行配置。

3. 教程适用范围

  • 本教程适用于安装了 WSL 2 的 Windows 10、Windows 11 等系统(理论上也兼容 WSL 1,但命令上有一些差别,本教程主要针对 WSL 2)。
  • 已经在原电脑中安装并运行了 Ubuntu-22.04 或其他版本的 Linux 子系统。
  • 想要在另一台 Windows 电脑上导入相同的 Linux 子系统,包括所有数据与配置。

二、基础准备

1. 检查 WSL 版本与已安装的 Linux 发行版

打开 PowerShellWindows Terminal,输入以下命令来查看已经安装的 WSL 发行版及其版本信息:

1
wsl --list --verbose

这条命令的含义如下:

  • wsl 是 Windows Subsystem for Linux 的命令行工具。
  • --list(或简写 -l)是列出已安装的所有 Linux 发行版。
  • --verbose(或简写 -v)会提供更详细的状态和版本信息。

输出示例:

1
2
  NAME            STATE           VERSION
* Ubuntu-22.04 Running 2
  • NAME:表示发行版的名称,这里是 Ubuntu-22.04
  • STATE:表示当前 WSL 发行版的状态,这里是 Running
  • VERSION:表示 WSL 的版本号,这里是 2

2. 确保没有正在使用 WSL 的重要进程

在执行导出操作之前,为了避免文件占用或系统异常,最好先确保没有正在使用 WSL 的重要进程,如数据库、服务器进程等都已停止。可以在 Ubuntu 中通过 ps -aux 命令检查相关进程,也可以直接退出所有打开的 Linux 终端、Shell 窗口,以确保安全导出。

3. 了解打包格式

  • 通过 WSL 自带的 --export 功能,我们可以将整个 Linux 发行版打包为一个 .tar 文件。
  • 这个 .tar 文件中包含了 Linux 发行版的根文件系统(包括 /home/etc 等常见目录)以及与该发行版关联的元数据。

三、在原电脑上导出(备份)WSL

1. 导出命令

在 PowerShell 窗口中,输入以下命令来导出(备份)对应的 WSL 发行版:

1
wsl --export <发行版名称> <导出文件路径\文件名.tar>

把命令拆分解释如下:

  • wsl --export:指定了我们要执行的操作是“导出”当前已经安装的某个发行版。
  • <发行版名称>:需要和前面 wsl --list --verbose 中的 NAME 字段完全一致,如 Ubuntu-22.04
  • <导出文件路径\文件名.tar>:指定导出后的 .tar 文件的存放位置及文件名。例如可以写成: D:\WSL_Backup\Ubuntu2204_Backup.tar

实际使用示例:

1
wsl --export Ubuntu-22.04 D:\Backup\Ubuntu2204_backup.tar

此时,终端没有进一步的输出,但会占用一段时间。导出完成后,在 D:\Backup 文件夹下就可以看到一个 Ubuntu2204_backup.tar 文件,该文件的大小会根据你的 WSL 发行版中所安装的应用、文件量多少而定。

2. 注意点

  1. 文件路径:如果你想把 .tar 文件放到桌面或其他目录,需要使用 Windows 下的完整路径,如 C:\Users\当前用户名\Desktop\WSL_Backup\Ubuntu.tar
  2. 空间足够:确保导出时的目标盘空间足够放下整个打包文件,否则可能出现导出失败或文件损坏。

四、在新电脑上准备 WSL 环境

在将打包文件拿到新电脑之前,我们需要确保新电脑也具备安装 WSL 并运行 Linux 发行版的基本条件。

1. 启用 WSL 功能

在 Windows 10 或 Windows 11 上,可以通过以下方式启用 WSL(大部分新系统默认已经启用,但还是建议检查):

  • 方法 1:PowerShell 命令

    1
    2
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 方法 2:图形化打开

    1. 打开“控制面板” - “程序” - “启用或关闭 Windows 功能”。
    2. 勾选“适用于 Linux 的 Windows 子系统 (Windows Subsystem for Linux)”和“虚拟机平台 (Virtual Machine Platform)”。
    3. 点击确定并重启电脑。

2. 安装 WSL 更新包(可选)

如果新电脑是第一次安装 WSL,可以在 Microsoft Store 搜索 “WSL” 并进行一键安装,或者使用命令行安装:

1
wsl --install

这会安装最新的 WSL 组件,以及默认的一些 Linux 发行版。安装完成后重启电脑即可。

3. 检查 WSL 是否安装成功

安装或启用后,可以在 PowerShell 或 Windows Terminal 中再次输入:

1
wsl --list --verbose

如果能够正常执行且没有报错,说明 WSL 已经安装并可用。


五、在新电脑上导入(还原)WSL

下面是新电脑的重点操作:将之前打包好的 .tar 文件放到新电脑上,然后使用 wsl --import 命令进行还原。

1. 准备打包文件

先将在旧电脑导出的 Ubuntu2204_backup.tar 文件复制到新电脑(可以使用 U 盘、网络共享、网盘等方式)。为了方便演示,假设我们放到了新电脑的 D:\Backup 目录下。

2. 创建存放 WSL 的文件夹

在新电脑上,需要创建一个空文件夹来存放还原后的 Linux 文件系统。此文件夹可以放在任意分区和路径下。举例:

1
New-Item -Path D:\WSL_Imported\Ubuntu2204 -ItemType Directory

这会在 D:\WSL_Imported 目录下创建一个名为 Ubuntu2204 的文件夹,用于存放本次导入的 WSL 根文件系统。

3. 导入命令

PowerShellWindows Terminal 中,执行导入命令:

1
wsl --import <自定义发行版名称> <目标文件夹路径> <tar文件路径> --version 2

参数含义:

  • <自定义发行版名称>:在新电脑上,这个 WSL 发行版可以指定一个你喜欢的名称。例如 MyUbuntu2204Ubuntu22Imported 等,只要不与系统中已有的发行版名称冲突即可。
  • <目标文件夹路径>:步骤 2 中新建的目录,用于存放 WSL 的根文件系统。
  • <tar文件路径>:之前复制到新电脑的 .tar 文件的完整路径。
  • --version 2:指定要使用 WSL 2 版本导入。

实际使用示例:

1
wsl --import Ubuntu22Imported D:\WSL_Imported\Ubuntu2204 D:\Backup\Ubuntu2204_backup.tar --version 2

执行后,会根据打包文件大小和系统性能,等待一段时间。如果一切顺利,命令执行完成后,并不会有特别明显的提示信息。我们可以用下面的命令来查看导入是否成功:

1
wsl --list --verbose

输出示例(部分):

1
2
3
  NAME                   STATE           VERSION
* Ubuntu22Imported Stopped 2
...

看到 Ubuntu22Imported 出现在列表里,且 VERSION2,说明导入成功。

4. 启动并使用新导入的发行版

在新电脑上,我们可以直接输入以下命令来启动并进入对应发行版的 Shell:

1
wsl -d Ubuntu22Imported

也可以通过 Windows Terminal 的下拉菜单(如果已集成)选择对应的发行版进入。
进入 Linux 终端后,就可以看到熟悉的环境、文件和安装的软件都已就绪。你在原电脑中所安装的包、配置文件、脚本等都会随之被完整迁移到新电脑上。


六、常见问题与注意事项

  1. 导出文件的大小
    如果你的 Ubuntu 发行版中安装了很多软件,或者存放了大量数据(比如 MySQL 数据库、项目文件等),则 .tar 文件可能会非常大。请确认你的磁盘空间够用,并尽可能清理不必要的缓存文件再导出。

    • 可以在 Linux 中使用 sudo apt-get autoremovesudo apt-get clean 等命令,清理无用文件。
  2. 环境变量与用户默认设置
    在新电脑导入后,默认以 root 用户启动。如果想要指定某个普通用户为默认登录账户,需要手动修改 WSL 中的 /etc/wsl.conf 或者通过官方命令设置默认用户:

    1
    ubuntu config --default-user <你的用户名>

    (注意:这与发行版的名称或安装方式有关,如果是自定义名称,需要相应的命令工具支持,或手动在系统内部进行修改。)

  3. 网络配置或代理设置
    如果在旧电脑上配置了代理、DNS 或其他网络相关设置,在新电脑环境可能会有所差异,需要根据新电脑的网络环境再进行相应配置修改。

  4. 权限问题
    导入的发行版在文件权限和用户组方面与原来保持一致。如果在导出前使用过自定义的用户组或权限管理,需要在导入后确认这些权限仍可用。

    • 对于使用挂载 Windows 文件夹 (/mnt/c) 的场景,要注意 Windows 与 Linux 权限可能存在差异。
  5. Multiple WSL Instances(多次导入)
    如果你多次导入同一个 .tar 文件,每次都可以取一个不同的发行版名称(例如 Ubuntu22Imported1Ubuntu22Imported2 等),它们会彼此独立存在。

    • 如果仅需一个环境,建议清理旧的无用发行版,可用 wsl --unregister <发行版名称> 来删除旧的实例,但这会不可恢复地删除其全部数据。

七、总结

通过以上步骤,我们已经实现了在 原电脑 上将 Ubuntu-22.04 发行版完整打包备份为一个 .tar 文件,并在 新电脑 上成功导入并使用。整个流程概括如下:

  1. 导出(Export)

    • 打开 PowerShell
    • wsl --export Ubuntu-22.04 D:\Backup\Ubuntu2204_backup.tar
    • 得到 .tar 文件
  2. 在新电脑启用 WSL(若尚未启用)

    • 启用“适用于 Linux 的 Windows 子系统”和“虚拟机平台”
    • 使用 wsl --install 安装必需组件
  3. 导入(Import)

    • 在新电脑创建存放目录,比如 D:\WSL_Imported\Ubuntu2204
    • wsl --import Ubuntu22Imported D:\WSL_Imported\Ubuntu2204 D:\Backup\Ubuntu2204_backup.tar --version 2
    • 通过 wsl --list --verbose 查看新导入的发行版
  4. 启动使用

    • wsl -d Ubuntu22Imported
    • 进入后会发现所有原有软件、配置、数据均已完好保留。

到此,你就完成了完整的 WSL (Ubuntu) 备份与迁移流程。该方法同样适用于其他 WSL 发行版,如 DebianAlpine 等,只要把对应的发行版名称换成实际名称即可。

如果这篇教程对你有所帮助,欢迎在分享、收藏或留下评论。如果在迁移过程中遇到任何问题,也可尝试在评论区讨论或在官方文档中查找相应的解决方案。