WSL迁移至非系统盘

WSL 跨文件系统(即从 WSL 内部访问 /mnt/d/ 下的文件)读写性能确实较差,这会显著拖慢深度学习数据加载(Dataloader)的速度。可以选择将 WSL 发行版迁移到 D 盘,并将代码和数据移入 WSL 的文件系统内部(例如 /home/user/project)。

以下是关于迁移 WSL 的操作步骤。

1. WSL 默认安装位置

是的,默认情况下 WSL 2 的虚拟硬盘(ext4.vhdx)会安装在 C 盘的用户目录下,路径通常是:

复制代码
C:\Users\<你的用户名>\AppData\Local\Packages\<发行版包名>\LocalState\

比如 Ubuntu 可能是:

复制代码
C:\Users\Alice\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

这个 .vhdx 文件是一个虚拟磁盘,里面包含了整个 Linux 文件系统。


2. 从 WSL 访问 D 盘文件是否影响性能?

  • WSL 1 :通过 9P 协议直接访问 Windows 文件系统(如 /mnt/d/),I/O 性能较差,尤其对大量小文件(如数据集)或频繁读写(如训练日志、checkpoint)会有明显延迟。
  • WSL 2 :使用 Hyper-V 虚拟机 + 虚拟硬盘,Linux 文件系统内部(即 /home/...)性能接近原生 ;但跨系统访问 Windows 文件(如 /mnt/d/)仍然较慢,因为要经过 9P 文件共享协议。

结论 :如果你的代码和数据都放在 D 盘并通过 /mnt/d/... 访问,确实会影响训练速度,尤其是 I/O 密集型任务(如加载图像、读取 TFRecord、频繁保存模型等)。


3. 将已配置好的 WSL 迁移到 D 盘

可以把整个 WSL 发行版"导出 → 删除 → 导入到 D 盘",保留所有配置(包括 SSH、Python 环境、Tailscale 等)。

  1. 检查当前状态并记录发行版名称
powershell 复制代码
# 以管理员身份打开PowerShell
wsl -l -v

显示结果示例:

复制代码
  NAME      STATE           VERSION
* Ubuntu-22.04    Running         2

记下发行版名称(如 Ubuntu-22.04)

  1. 关闭 WSL
powershell 复制代码
   wsl --shutdown

可再运行wsl -l -v确认关闭。

  1. 导出当前发行版为 tar 文件(保存到 D 盘)

    powershell 复制代码
    wsl --export Ubuntu-22.04 D:\wsl\ubuntu-2204-backup.tar

    注意:Ubuntu-22.04 是你在 wsl -l 中看到的发行版名称。另外D盘中需要提前建立备份路径。

  2. 卸载原发行版(不会删除 tar 文件)

    这一步会删除 C 盘上的旧 WSL 系统。请务必确认第二步的 tar 文件已经成功生成且大小正常。执行完后,C 盘空间会被释放。
    # 语法:wsl --unregister <发行版名称>

    powershell 复制代码
    wsl --unregister Ubuntu-22.04
  3. 在 D 盘创建新目录并导入
    # 语法:wsl --import <新发行版名称> <安装路径> <备份文件路径> --version 2

    powershell 复制代码
    mkdir D:\wsl\ubuntu-2204
    wsl --import Ubuntu-22.04 D:\wsl\ubuntu-2204 D:\wsl\ubuntu-2204-backup.tar --version 2
  4. 设置默认用户(否则每次登录都是 root)
    启动 WSL 查看是否正常:

    powershell 复制代码
    wsl

    此时你应该以 root 身份进入了系统。显示为 root@hzh25:/mnt/c/Windows/system32#,输入exit退出。
    设置默认用户:

    退出后在 PowerShell 中(不是在 WSL 里),根据发行版类型执行配置命令。

    powershell 复制代码
    ubuntu2204.exe config --default-user 新的用户名如gonglab
  5. 验证

    powershell 复制代码
    wsl
    df -h  # 查看根分区是否在虚拟硬盘中(不是 /mnt/c)

进入wsl系统后显示为 (base) gonglab@hzh25:/mnt/c/Windows/system32$,这里能够看到当前的工作目录是 Windows 的 C:\Windows\system32。看到 Windows 目录的原因是,默认情况下,WSL 启动时的工作目录继承自 Windows 的当前目录。如果从 PowerShell 或 CMD 中在 Windows 的 C:\Windows\system32 目录下执行 wsl 启动,那么 WSL 的启动目录就是 /mnt/c/Windows/system32


4. 迁移会影响 SSH 和 Tailscale 吗?

正常情况下,只要导入后 WSL 能正常启动,SSH 和 Tailscale 都会继续工作,无需重新配置。

(1)查看Windows和WSL的IP

在公司电脑上,对于Windows 而言,从桌面右下角系统托盘(通知区域)中的Tailscale可查看Windows的IP。

在PowerShell中或者启动wsl后,输入

powershell 复制代码
tailscale status

都可以查看三个IP类似格式如下

复制代码
100.88.74.120   office-pc          yourname@    windows -
100.88.74.110   office-pc          yourname@    linux -
100.92.45.67    home-pc            yourname@    windows -

对于WSL系统而言,如果ssh没有运行,则按如下步骤启动。

  • Windows 开始菜单 → 搜索 "PowerShell" 或 "Terminal" → 以普通用户身份打开
  1. 输入命令进入 WSL:

    powershell 复制代码
    wsl
  2. 在 WSL 中检查 SSH 服务状态:

    bash 复制代码
    sudo service ssh status

如果看到 Active: active (running),说明 SSH 正常。

如果没运行?启动它:

bash 复制代码
sudo service ssh start

(2)在家中电脑验证

通过Win+R输入cmd打开终端,可以分别验证Windows和WSL的ssh连接:

复制代码
ssh winname@100.88.74.120

复制代码
ssh wslname@100.88.74.110

如果可以顺利连接,则可以在VSCode中进一步开展工作。

(3)监测显卡占用

在被控电脑的WSL终端中,运行 which nvidia-smi,得到 /usr/lib/wsl/lib/nvidia-smi,即找到nvidia-smi的完整路径。

在家中电脑终端运行

复制代码
ssh -t researcher@100.64.10.25 "watch -n 1 /usr/lib/wsl/lib/nvidia-smi"

即可在家中电脑持续监控显卡占用。

相关推荐
乾元2 小时前
绕过艺术:使用 GANs 对抗 Web 防火墙(WAF)
前端·网络·人工智能·深度学习·安全·架构
淬炼之火2 小时前
基于Docker Desktop 和 Ubuntu 在 Windows上部署轻量化大模型(Qwen-LLM)
笔记·ubuntu·docker·语言模型·容器
机 _ 长3 小时前
YOLO26 蒸馏改进全攻略:从理论到实战 (Response + Feature + Relation)
人工智能·深度学习·yolo·目标检测·计算机视觉
轻览月3 小时前
【DL】卷积神经网络
深度学习·机器学习·cnn·卷积神经网络
逄逄不是胖胖3 小时前
《动手学深度学习》-55-1RNN的复杂实现
pytorch·深度学习·机器学习
迷路爸爸1803 小时前
无sudo权限远程连接Ubuntu服务器安装TeX Live实操记录(适配VS Code+LaTeX Workshop,含路径选择与卸载方案)
java·服务器·ubuntu·latex
A尘埃3 小时前
数值特征标准化StandardScaler和类别不平衡SMOTE
人工智能·深度学习·机器学习
软件算法开发3 小时前
基于卷尾猴优化的LSTM深度学习网络模型(CSA-LSTM)的一维时间序列预测算法matlab仿真
深度学习·算法·matlab·lstm·一维时间序列预测·卷尾猴优化·csa-lstm
高洁014 小时前
知识图谱如何在制造业实际落地应用
深度学习·算法·机器学习·数据挖掘·知识图谱