文章

WSL迁移到其他盘

详细讲解如何将WSL从C盘迁移到其他磁盘,释放系统盘空间

WSL迁移到其他盘

为什么需要迁移WSL

Windows Subsystem for Linux (WSL) 默认安装在C盘系统盘。随着使用时间的增长,安装的软件、依赖包和项目数据会越来越多,导致系统盘空间被大量占用,影响系统性能。将WSL迁移到其他磁盘是释放C盘空间的有效方法,尤其适合以下场景:

  • C盘空间不足,需要释放存储空间
  • 希望将WSL迁移到更快的SSD磁盘提升性能
  • 需要在不同电脑间迁移WSL环境
  • 系统重装前备份WSL环境

迁移前的准备工作

1. 查看WSL分发版名称

首先需要确认你安装的Linux系统名称:

  1. 右键点击”开始”菜单,选择”终端管理员”或”命令提示符(管理员)”
  2. 输入命令:
    1
    
    wsl -l -v
    
  3. 你会看到类似UbuntuUbuntu-22.04的名称,记下这个名称(下文以Ubuntu为例)

2. 确保WSL已关闭

在进行迁移操作前,请确保WSL没有正在运行:

1
wsl --shutdown

迁移步骤详解

第一步:导出WSL分发版(创建备份)

将C盘的WSL系统打包成一个备份文件:

1
wsl --export Ubuntu E:\wsl_backup.tar

注意事项:

  • 根据WSL中文件的大小,这一步可能需要几分钟到几十分钟
  • 备份文件路径可以根据需要修改(如D:\wsl_backup.tar
  • 导出过程中可能会显示关于socket文件无法归档的警告信息,这是正常现象,不影响整体备份
  • 建议将备份文件保存在有足够空间的磁盘上

第二步:注销原C盘分发版

导出成功后,可以安全地删除C盘中的原WSL安装:

1
wsl --unregister Ubuntu

重要提醒:

  • 请确保第一步的导出操作已成功完成,否则此操作会永久删除你的WSL环境
  • 此操作会释放C盘中被WSL占用的空间

第三步:重新导入到新位置

将WSL安装到目标磁盘的新路径:

  1. 在目标磁盘(如E盘)创建一个文件夹,例如E:\WSL
  2. 执行导入命令:
    1
    
    wsl --import Ubuntu E:\WSL E:\wsl_backup.tar
    

    命令格式: wsl --import <分发版名称> <安装位置路径> <备份文件路径>

    参数说明:

    • <分发版名称>:你的WSL分发版名称(如Ubuntu)
    • <安装位置路径>:WSL要安装的新路径(如E:\WSL
    • <备份文件路径>:第一步创建的备份文件路径(如E:\wsl_backup.tar

第四步:设置默认用户(重要)

重新导入后,WSL默认会以root用户登录。如果需要恢复原来的普通用户,有以下几种方法:

方法一:使用WSL命令(推荐)

1
Ubuntu config --default-user yourname

yourname替换为你的用户名。

注意: 某些WSL版本可能需要使用分发版的全名,如Ubuntu-22.04 config --default-user yourname

方法二:测试用户登录

如果上述命令无效,可以测试指定用户登录:

1
wsl -d Ubuntu -u yourname

方法三:通过注册表修改(永久生效)

如果上述方法都不起作用,可以通过修改注册表来永久设置默认用户:

  1. 按下Win + R,输入regedit并回车,打开注册表编辑器
  2. 在上方地址栏粘贴以下路径并回车:
    1
    
    计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss
    
  3. 在该路径下会有几个类似{550e8400-e29b-...}的长字符串子文件夹(每个对应一个WSL分发版)
  4. 依次点击这些文件夹,查看右侧的DistributionName属性,找到值为UbuntuUbuntu-22.04的那个
  5. 找到正确的文件夹后,在右侧找到名为DefaultUid的数值
  6. 双击DefaultUid,将”基数”选为”十进制”
  7. 将数值数据改为1000(Linux中第一个普通用户的UID通常是1000)
  8. 点击”确定”,关闭注册表编辑器

如何确认正确的UID: 如果不确定之前的用户UID,可以先以root身份进入WSL,然后输入:

1
id -u 你的用户名

得到的数字就是你要填入注册表DefaultUid的值。

安全提示: 修改注册表前建议先备份相关键值,以防操作失误。

迁移后的清理工作

确认迁移成功且所有文件都在新位置正常工作后,可以删除临时的备份文件以节省空间:

1
del E:\wsl_backup.tar

或者使用资源管理器手动删除备份文件。

常见问题与解决方案

Q1: 导出过程中出现socket文件警告怎么办?

A: 这是正常现象,WSL在导出时会跳过一些socket文件(如Docker socket、VS Code远程连接socket等),不影响系统功能的完整性。

Q2: 迁移后原来的配置文件还在吗?

A: 是的,导出/导入操作会保留所有用户文件、配置和已安装的软件。你的home目录、环境变量、软件包等都会完整迁移。

Q3: 可以同时迁移多个WSL分发版吗?

A: 可以,但需要为每个分发版重复上述步骤,使用不同的备份文件名和安装路径。建议一次迁移一个,确保每个都成功后再处理下一个。

Q4: 迁移后性能有影响吗?

A: 性能影响很小。如果目标磁盘是SSD,性能几乎无差别;如果是HDD,可能会有轻微的性能下降,但通常可以接受。

Q5: 迁移失败怎么办?

A: 如果迁移失败,可以尝试以下步骤:

  1. 确保WSL已完全关闭:wsl --shutdown
  2. 检查磁盘空间是否充足
  3. 以管理员身份运行命令提示符
  4. 如果问题依旧,可以尝试重启电脑后重试

总结

通过WSL自带的导出/导入功能进行迁移是最稳妥的方法,具有以下优点:

  1. 安全可靠:不需要第三方工具,使用官方功能
  2. 数据完整:不会丢失任何用户数据、配置和软件
  3. 操作简单:只需几个命令即可完成
  4. 适用广泛:适用于各种迁移场景

整个过程主要分为四个步骤:查看分发版、导出备份、注销原版、重新导入。迁移完成后记得设置默认用户,并根据需要清理备份文件。

这种方法不仅适用于释放C盘空间,也适用于将WSL迁移到更快的SSD磁盘,或者在不同电脑间迁移WSL环境。建议在操作前仔细阅读本文,确保理解每个步骤的注意事项。

本文由作者按照 CC BY 4.0 进行授权