WSL系统完整备份及迁移教程
一、前言
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 发行版
打开 PowerShell 或 Windows Terminal,输入以下命令来查看已经安装的 WSL 发行版及其版本信息:
1 | wsl --list --verbose |
这条命令的含义如下:
wsl
是 Windows Subsystem for Linux 的命令行工具。--list
(或简写-l
)是列出已安装的所有 Linux 发行版。--verbose
(或简写-v
)会提供更详细的状态和版本信息。
输出示例:
1 | NAME STATE VERSION |
- 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. 注意点
- 文件路径:如果你想把
.tar
文件放到桌面或其他目录,需要使用 Windows 下的完整路径,如C:\Users\当前用户名\Desktop\WSL_Backup\Ubuntu.tar
。 - 空间足够:确保导出时的目标盘空间足够放下整个打包文件,否则可能出现导出失败或文件损坏。
四、在新电脑上准备 WSL 环境
在将打包文件拿到新电脑之前,我们需要确保新电脑也具备安装 WSL 并运行 Linux 发行版的基本条件。
1. 启用 WSL 功能
在 Windows 10 或 Windows 11 上,可以通过以下方式启用 WSL(大部分新系统默认已经启用,但还是建议检查):
方法 1:PowerShell 命令
1
2dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart方法 2:图形化打开
- 打开“控制面板” - “程序” - “启用或关闭 Windows 功能”。
- 勾选“适用于 Linux 的 Windows 子系统 (Windows Subsystem for Linux)”和“虚拟机平台 (Virtual Machine Platform)”。
- 点击确定并重启电脑。
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. 导入命令
在 PowerShell 或 Windows Terminal 中,执行导入命令:
1 | wsl --import <自定义发行版名称> <目标文件夹路径> <tar文件路径> --version 2 |
参数含义:
<自定义发行版名称>
:在新电脑上,这个 WSL 发行版可以指定一个你喜欢的名称。例如MyUbuntu2204
、Ubuntu22Imported
等,只要不与系统中已有的发行版名称冲突即可。<目标文件夹路径>
:步骤 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 | NAME STATE VERSION |
看到 Ubuntu22Imported
出现在列表里,且 VERSION
为 2
,说明导入成功。
4. 启动并使用新导入的发行版
在新电脑上,我们可以直接输入以下命令来启动并进入对应发行版的 Shell:
1 | wsl -d Ubuntu22Imported |
也可以通过 Windows Terminal 的下拉菜单(如果已集成)选择对应的发行版进入。
进入 Linux 终端后,就可以看到熟悉的环境、文件和安装的软件都已就绪。你在原电脑中所安装的包、配置文件、脚本等都会随之被完整迁移到新电脑上。
六、常见问题与注意事项
导出文件的大小
如果你的 Ubuntu 发行版中安装了很多软件,或者存放了大量数据(比如 MySQL 数据库、项目文件等),则.tar
文件可能会非常大。请确认你的磁盘空间够用,并尽可能清理不必要的缓存文件再导出。- 可以在 Linux 中使用
sudo apt-get autoremove
、sudo apt-get clean
等命令,清理无用文件。
- 可以在 Linux 中使用
环境变量与用户默认设置
在新电脑导入后,默认以root
用户启动。如果想要指定某个普通用户为默认登录账户,需要手动修改 WSL 中的/etc/wsl.conf
或者通过官方命令设置默认用户:1
ubuntu config --default-user <你的用户名>
(注意:这与发行版的名称或安装方式有关,如果是自定义名称,需要相应的命令工具支持,或手动在系统内部进行修改。)
网络配置或代理设置
如果在旧电脑上配置了代理、DNS 或其他网络相关设置,在新电脑环境可能会有所差异,需要根据新电脑的网络环境再进行相应配置修改。权限问题
导入的发行版在文件权限和用户组方面与原来保持一致。如果在导出前使用过自定义的用户组或权限管理,需要在导入后确认这些权限仍可用。- 对于使用挂载 Windows 文件夹 (
/mnt/c
) 的场景,要注意 Windows 与 Linux 权限可能存在差异。
- 对于使用挂载 Windows 文件夹 (
Multiple WSL Instances(多次导入)
如果你多次导入同一个.tar
文件,每次都可以取一个不同的发行版名称(例如Ubuntu22Imported1
、Ubuntu22Imported2
等),它们会彼此独立存在。- 如果仅需一个环境,建议清理旧的无用发行版,可用
wsl --unregister <发行版名称>
来删除旧的实例,但这会不可恢复地删除其全部数据。
- 如果仅需一个环境,建议清理旧的无用发行版,可用
七、总结
通过以上步骤,我们已经实现了在 原电脑 上将 Ubuntu-22.04
发行版完整打包备份为一个 .tar
文件,并在 新电脑 上成功导入并使用。整个流程概括如下:
导出(Export)
- 打开 PowerShell
wsl --export Ubuntu-22.04 D:\Backup\Ubuntu2204_backup.tar
- 得到
.tar
文件
在新电脑启用 WSL(若尚未启用)
- 启用“适用于 Linux 的 Windows 子系统”和“虚拟机平台”
- 使用
wsl --install
安装必需组件
导入(Import)
- 在新电脑创建存放目录,比如
D:\WSL_Imported\Ubuntu2204
wsl --import Ubuntu22Imported D:\WSL_Imported\Ubuntu2204 D:\Backup\Ubuntu2204_backup.tar --version 2
- 通过
wsl --list --verbose
查看新导入的发行版
- 在新电脑创建存放目录,比如
启动使用
wsl -d Ubuntu22Imported
- 进入后会发现所有原有软件、配置、数据均已完好保留。
到此,你就完成了完整的 WSL (Ubuntu) 备份与迁移流程。该方法同样适用于其他 WSL 发行版,如 Debian
、Alpine
等,只要把对应的发行版名称换成实际名称即可。
如果这篇教程对你有所帮助,欢迎在分享、收藏或留下评论。如果在迁移过程中遇到任何问题,也可尝试在评论区讨论或在官方文档中查找相应的解决方案。