【教程】使用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 子系统 ” 和 ” 虚拟机平台 ” ,需要重启电脑。

image-20250911231923563

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支持使用镜像模式,设置起来非常简单。

image-20250915153634844

在宿主机的用户目录下创建或编辑 .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还不支持),因此设置较为麻烦。

  1. 允许通过防火墙

控制面板\所有控制面板项\Windows Defender 防火墙\允许的应用

选择你的代理软件,添加到允许的应用中。

  1. 局域网访问

在代理软件中,选择允许局域网访问。

  1. 创建配置文件

在宿主机的用户目录下创建或编辑 .wslconfig 文件:

[wsl2]
networkingMode=nat

[experimental]
autoMemoryReclaim=dropcache

重新启动 WSL2 实例.

  1. 修改实例的配置
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
  1. 测试
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
posted @ 2023-09-03 00:51  小拳头呀  阅读(7327)  评论(0)    收藏  举报