文章

WSL

WSL

WSL 基础

WSL 概述

WSL:全称为 Windows Subsystem for Linux,这是微软官方开发的适用于 Linux 的 Windows 子系统,可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境,且不会产生传统虚拟机或双启动设置开销。 WSL2:具有 WSL1 的优点,但使用实际的 Linux 内核,因而性能更好。

WSL 有什么优势:

  • VMware 等虚拟机软件资源消耗大、启动慢、运行效率低。
  • WSL 几乎能运行完整的操作系统,资源消耗小、启动快、切换快

WSL 命令

基本命令

如果你打开了 PowerShell 窗口,并希望进入默认的 WSL Linux 发行版:

1
wsl

退出会带你回到 PowerShell。如果要运行特定的发行版:

1
wsl -d <发行名称>

要启动 Debian,命令将是

1
wsl -d debian

可以提到用于管理 WSL 的更有用的工具之一,帮助电话:

1
wsl --help

WSL 版本控制

  • 要查看为每个已安装的 Linux 发行版分配了哪个 WSL 版本:
1
wsl --list --verbose 或 wsl -l -v

结果将显示哪个版本是默认的 wsl 发行版。如果只想知道安装了哪个发行版,请取消选中详细选项。

  • 如果你想更进一步,并指定默认情况下将使用哪些已安装的发行版:
1
2
3
4
wsl --set-default 或 wsl -s

# 设置 WSL 2 为默认版本:
wsl --set-default-version 2

image.png

  • 例如,如果要安装 Ubuntu 作为默认发行版:
1
wsl -s ubuntu
  • 如果你已升级到 WSL2,并希望将其设置为默认值:
1
wsl --set-default-version 2
  • 结果,将来的任何 Linux 安装都将使用 WSL2,但不会安装已经安装的 WSL 的第一个版本,此转换必须手动完成。更改链接到发行版的 WSL 版本:
1
wsl --set -version <发行名称>
  • 例如,要将 Debian 更改为 WSL 2:
1
wsl --set -version Debian 2

如何用 WSL2 安装 Linux 发行版

检查是否支持安装?

WSL 需要电脑支持 Hyper-V 虚拟化,如何查看? 打开终端,cmd 或者 PowerShell 都可以,输入如下命令:

1
systeminfo

开启 Windows 的 WSL 支持

方式 1:图形化

首先在 Win11 开始菜单搜索 “Windows 功能 “,打开 启动或关闭 Windows 功能,勾选 Linux 子系统以及虚拟机平台 2 个选项。注意需要按照提示,重启电脑。

控制面板→程序→启动或关闭 Windows 功能:

image.png

方式 2:命令

  • 以 管理员身份 打开 PowerShell 或 命令提示符 (CMD)
  • 执行以下命令来启用 WSL 功能:
1
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  • 执行以下命令来启用虚拟机平台功能(WSL 2 需要):
1
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

image.png

  • 重启电脑 以使更改生效。

安装在系统盘

  • 自动安装到系统盘中
1
wsl --install # 此时会默认安装最新的Ubuntu发行版。
  • 安装 ubuntu
1
wsl --install -d ubuntu
  • 如果希望选择其他版本的 Linux 系统,可以通过如下命令查看:
1
wsl --list --online

image.png

如果要安装指定版本,可以采用如下命令:

1
 wsl --install -d <发行版名称>

注意,上述步骤中,可能遇到 0x800701bc 错误,如下:

1
2
3
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel

这时需要下载 wsl 升级包并安装:https://wslstorestorage.blob.core.windows.net

双击安装后,再重新执行上述指令就 OK 了。

此外,还可以通过如下指令,查看电脑装了哪些 Linux 系统,并进行卸载:

1
2
3
4
# 查看本机安装了哪些子系统:
wsl --list --all
# 卸载:
wsl --unregister <System_name>

安装在 D 盘

初次安装时我们可以直接选择安装在 D 盘。首先,需要将要安装的系统下载下来,这里以 Ubuntu20.04 为例,打开终端,输入如下指令:

1
2
3
4
5
6
7
8
9
Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing

Rename-Item .\Ubuntu20.04.appx Ubuntu.zip 

Expand-Archive .\Ubuntu.zip -Verbose 

cd .\Ubuntu\ 

.\ubuntu2004.exe

根据要求设置用户名和密码即可。

后续如何打开和关闭系统呢:

1
2
3
4
5
# 打开
cd D:\linux\Ubuntu 
.\ubuntu2004.exe
# 关闭
wsl --shutdown

wsl 迁出 C 盘

因为 wsl 默认将 Linux 安装在系统盘 C 盘,后续所有 Linux 系统上安装的软件和数据都会在 C 盘,你会发现你的 C 盘很快就爆了。所有非常有必要将它迁移到其他盘上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1) 停止正在运行的wsl
wsl --shutdown

cd D:/
mkdir wsl
cd wsl

# 2)将需要迁移的Linux,进行导出
wsl --export Ubuntu D:/wsl/export.tar

# 3)导出完成之后,将原有的Linux卸载
wsl --unregister Ubuntu
# 4) 然后将导出的文件放到需要保存的地方,进行导入
wsl --import Ubuntu D:\wsl\ D:\wsl\export.tar --version 2

image.png

wsl 导入语法:

1
# 语法: wsl --import <新发行版名称> <安装位置> <导入文件路径>
  • <新发行版名称>: 通常使用和原来一样的名字,如 Ubuntu
  • <安装位置>: 这是 WSL 虚拟硬盘 (ext4.vhdx) 实际存放的地方,我们指定为 D:\wsl\
  • <导入文件路径>: 指向我们之前导出的 export.tar 文件。

完成后,再次运行 wsl -l -v,你会看到 Ubuntu 又回来了,并且它的文件系统现在完全位于 D 盘

登陆 Linux 安装软件

如何查看 IP 地址

报错

wsl: Unknown key ‘automount.crossDistro’ in /etc/wsl.conf:3

问题: 安装了 docker desktop 的 windows 系统,在开机后提示上述警告,EventView 里面会有让如下警告 启动 wsl,报错 wsl: Unknown key 'automount.crossDistro' in /etc/wsl.conf:3

in /etc/wsl.conf:3 中的:3 是文件 /etc/wsl.conf 第 3 行的意思,也有可能是别的数字,主要看 crossDistro 配置在第几行,因人而异

原因分析: automount.crossDistro 是一个出现在某些 WSL(Windows Subsystem for Linux)配置文件中的参数,目的是尝试让不同 Linux 发行版之间共享挂载的 Windows 驱动器。不过,它并不是官方支持的配置项。 在 /etc/wsl.conf 文件中,常见的 [automount] 配置段如下:

1
2
3
4
5
6
7
8
9
[automount]
root = /mnt/host
options = "metadata"

# 有些用户尝试添加 crossDistro = true 来实现跨发行版共享挂载路径,例如:
[automount]
root = /mnt/host
crossDistro = true
options = "metadata"

但根据 Microsoft 官方文档,crossDistro 并不是一个被支持的键,因此在某些版本中会报错:Unknown key ‘ automount.crossDistro ‘。这意味着该配置项并不会被识别或生效,可能是某些社区教程或早期测试版本中提到的非正式用法。

解决: 进入 Docker Desktop 的 WSL 环境: 打开 PowerShell 或 CMD,输入:

1
2
wsl -d docker-desktop
# 如果你看到提示 “This distro is not intended to be used directly”,可以忽略,它仍然允许你进入。

查找配置文件: 进入后,尝试查看 /etc/wsl.conf 是否存在:

1
cat /etc/wsl.conf

编辑配置文件(如果存在):

1
2
 vi /etc/wsl.conf
 # 如果你看到 crossDistro = true,可以将其注释掉或删除。

保存并退出,然后在 Windows 中执行:

1
 wsl --shutdown
本文由作者按照 CC BY 4.0 进行授权