【教程】使用WSL在windows上安装Linux并迁移出C盘
一、什么是WSL
适用于 Linux 的 Windows 子系统(WSL)是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双重启动。 WSL 旨在为想要同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。
WSL2相较于WSL:
-
通过 Hyper-V 轻量虚拟化,运行一个 真正的 Linux 内核(WSL没有)。
-
特点:
-
兼容性大幅提升:几乎和原生 Linux 一致,支持 Docker、完整的文件系统调用;
-
性能更高:尤其是 I/O 操作和系统调用,和原生差距很小;
-
支持 WSLg(Windows Subsystem for Linux GUI),能直接运行 Linux GUI 程序(比如 RViz、Gazebo、gedit)。
-
二、先决条件
宿主机必须是 Windows 10 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 。 如果使用的是更早的版本,请参阅手动安装页。
三、配置及安装
3.1 启动WSL功能
打开开始菜单搜索 “ 启用或关闭 Windows 功能 ” ,勾选 “ 适用于 Linux 的 Windows 子系统 ” 和 ” 虚拟机平台 ” ,需要重启电脑。

3.2 更新WSL
在管理员模式下打开PowerShell
wsl --update
可选:--web-download,表示从GitHub下载最新更新,而不是Microsoft商店。
3.3 安装Ubuntu系统
使用单个命令安装运行 WSL 所需的一切内容。
在管理员模式下打开 PowerShell,输入 wsl --install (可指定版本:wsl --install -d Ubuntu-20.04)命令,然后重启计算机(这里以ubuntu2004为例,不同版本不同操作,届时须看ubuntu给出的提示)。
wsl --install
正在安装: 虚拟机平台
已安装 虚拟机平台。
正在安装: 适用于 Linux 的 Windows 子系统
已安装 适用于 Linux 的 Windows 子系统。
正在安装: 适用于 Linux 的 Windows 子系统
已安装 适用于 Linux 的 Windows 子系统。
正在安装: Ubuntu
已安装 Ubuntu。
请求的操作成功。直到重新启动系统前更改将不会生效。
重启完成后,会自动引导安装,并提示输入用户名及密码
Ubuntu 已安装。
正在启动 Ubuntu...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: 你的用户名
New password: 你的密码
Retype new password: 重复密码
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This message is shown once a day. To disable it please create the
/home/你的用户名/.hushlogin file.
如果在输入用户名之后提示:
Ubuntu 已安装。
正在启动 Ubuntu...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: 你的用户名
参考的对象类型不支持尝试的操作。
不要关闭此时的控制台,再以管理员身份启动另一个PowerShell,输入:
netsh winsock reset
然后重新输入用户名即可。
四、迁移
自动安装虽然简单易上手,但是无法指定安装位置,在开发过程中造成C盘占用过高,因此这里顺便把迁移教程也总结一下。
查看当前需要迁移的虚拟机,这里以Ubuntu-20.04为例。
wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2
关闭系统
wsl --shutdown
导出虚拟机
wsl --export Ubuntu-20.04 D:\File_wsl\ubuntu2004\ubuntu.tar
正在导出,这可能需要几分钟时间。
操作成功完成。
注销之前的虚拟机
wslconfig /u Ubuntu-20.04
正在注销。
操作成功完成。
重新导入
D:\File_wsl\ubuntu2004(安装位置)
D:\File_wsl\ubuntu2004\ubuntu.tar(源文件位置)
wsl --import Ubuntu-20.04 D:\File_wsl\ubuntu2004 D:\File_wsl\ubuntu2004\ubuntu.tar --version 2
正在导入,这可能需要几分钟时间。
操作成功完成。
此时就迁移成功了,可以将导出的tar文件删除。
此时启动ubuntu默认用户是root,修改为之前设定的用户
ubuntu2004 config --default-user 刚刚建立的用户名
妈妈再也不用担心C盘被wsl占满啦
五、配置Vscode
在windows vscode上安装以下扩展:
- Remote - WSL
- Remote - SSH
- WSL
更新wsl ubuntu软件源中的所有软件列表
sudo apt-get update
之后点击vscode左下角远程连接
之后点击vscode左下角远程连接

选择连接至wsl

基本上不会出问题

如果出现下面这样的报错

需要启动PowerShell,检查当前默认运行的linux系统
wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
如果星号不在ubuntu前方,输入:
wslconfig /setdefault ubuntu
六、卸载
管理员身份启动PowerShell
查看当前已安装子系统
wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
卸载
wslconfig /u Ubuntu
正在注销。
操作成功完成。
关闭虚拟引擎
wsl --shutdown
七、常用命令
7.1 ubuntu中
退出WSL回到PowerShell
exit
切换root用户
sudo -i
显示内核版本
uname -a
显示 Ubuntu 版本
lsb_release -a
拷贝windows系统的文件
cp /mnt/你的盘符/正常的路径 .
7.2 PowerShell中
查看已安装的WSL
wsl --list --verbose
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2
Ubuntu-24.04 Running 2
'*'表示默认启动的版本
version表示WSL版本
查看wsl默认版本
wsl --status
默认分发: Ubuntu-20.04
默认版本: 2
设置某个子系统用WSL2
wsl --set-version Ubuntu-24.04 2
设置默认启动的发行版
wsl --set-default Ubuntu-24.04
启动/进入指定发行版
wsl -d Ubuntu-24.04
停止所有运行的 WSL 实例
wsl --shutdown
查看当前所有正在运行的实例
wsl --list --running
删除某个 WSL 发行版(慎用)
wsl --unregister Ubuntu-24.04
八、网络问题
8.1 win11
win11版本的wsl2支持使用镜像模式,设置起来非常简单。

在宿主机的用户目录下创建或编辑 .wslconfig 文件:
# networkingMode 网络模式 mirrored 镜像 WSL实例与主机系统共享网络接口
# dnsTunneling DNS隧道功能 true 启用DNS隧道功能,以便WSL实例通过主机操作系统的网络接口解析DNS请求
# firewall WSL的防火墙支持 true 启用WSL的防火墙支持,允许HyperV对WSL网络流量进行控制
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
# autoMemoryReclaim 内存自动回收功能 dropcache 开启 当内存紧张时,WSL实例会释放缓存
# useWindowsDnsCache 使用主机Windows系统的DNS缓存 true 允许WSL使用主机Windows系统的DNS缓存
# bestEffortDnsParsing “尽力而为”DNS解析功能 true 当DNS请求失败时,系统会尝试通过其他方法解析以提供更稳定的网络体验。
# hostAddressLoopback 除了环回地址之外,允许 WSL 2 子系统使用分配给主机的IP 与主机进行互访(通常使用不同网口)
[experimental]
autoMemoryReclaim=dropcache
useWindowsDnsCache=true
bestEffortDnsParsing=true
hostAddressLoopback=true
重新启动 WSL2 实例(代理软件需要开启‘系统代理’)
wsl --shutdown
wsl -d xxxxx
修改实例的配置
vim ~/.bashrc
# >>> proxy >>>
export http_proxy=http://localhost:代理端口号
export https_proxy=http://localhost:代理端口号
export all_proxy=socks5://localhost:代理端口号
# <<< proxy <<<
保存退出后
source ~/.bashrc
测试
curl www.google.com
8.2 win10
win10 wsl2不支持镜像模式(2025.09还不支持),因此设置较为麻烦。
- 允许通过防火墙
控制面板\所有控制面板项\Windows Defender 防火墙\允许的应用
选择你的代理软件,添加到允许的应用中。
- 局域网访问
在代理软件中,选择允许局域网访问。
- 创建配置文件
在宿主机的用户目录下创建或编辑 .wslconfig 文件:
[wsl2]
networkingMode=nat
[experimental]
autoMemoryReclaim=dropcache
重新启动 WSL2 实例.
- 修改实例的配置
vim ~/.bashrc
# >>> proxy >>>
# 获取 Windows 主机 IP
host_ip=$(ip route | awk '/default/ {print $3}')
export http_proxy=http://$host_ip:7897
export https_proxy=http://$host_ip:7897
export all_proxy=socks5://$host_ip:7897
# <<< proxy <<<
保存后退出
source ~/.bashrc
- 测试
curl www.google.com
九、常用软件安装
因为经常需要重新配置环境,所以这里记录一下常用软件的安装方法
9.1 zsh
cd到一个自定义目录,下载配置项目
git clone https://github.com/zerkvii/wsl_conf_scripts
进入项目后,按需安装即可,这里我只给出了安装zsh的脚本,其他环境配置(如java、go)使用方法一致。
cd wsl_conf_scripts
sh install_zsh.sh
9.2 Conda
cd到一个download目录,下载最新的miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
使用bash进行安装
bash Miniconda3-latest-Linux-x86_64.sh
安装时问你阅读并接受许可,按回车,然后yes接受。
安装时问安装目录,默认安装到~/miniconda3中,回车即可。
最后问是否初始化,推荐初始化,其会自动将变量写入当前控制它的配置文件中。(zshrc或bashrc)
完成后,source ~/.bashrc(或zshrc)即可。
创建虚拟环境:
conda create -n my_env python=3.11

浙公网安备 33010602011771号