WSL 2(Windows Subsystem for Linux 2)是微软推出的Windows 10操作系统中的一个功能,它允许用户在Windows环境中运行一个完整的Linux内核虚拟机。与之前的WSL相比,WSL 2采用了全新的架构,带来了一系列改进和优势。
总的来说,WSL 2是对WSL的重要升级,提供了更好的性能、更广泛的应用兼容性和更方便的开发体验,使得在Windows平台上进行Linux开发变得更加高效和便捷。
refer to:
什么是适用于 Linux 的 Windows 子系统
比较 WSL 版本
功能 | WSL 1 | WSL 2 |
---|---|---|
Windows 和 Linux 之间的集成 | ✅ | ✅ |
启动时间短 | ✅ | ✅ |
与传统虚拟机相比,占用的资源量少 | ✅ | ✅ |
可以与当前版本的 VMware 和 VirtualBox 一起运行 | ✅ | ✅ |
托管 VM | ❌ | ✅ |
完整的 Linux 内核 | ❌ | ✅ |
完全的系统调用兼容性 | ❌ | ✅ |
跨 OS 文件系统的性能 | ✅ | ❌ |
**WSL 2中的Linux内核是Microsoft根据最新的稳定版分支(基于kernel.org上提供的源代码)构建的。**此内核已专门针对WSL 2进行了调整,针对大小和性能进行了优化,以便在Windows上提供良好的Linux体验。内核将由Windows更新提供服务,这意味着你将获得最新的安全修补程序和内核改进功能,而无需自行管理它。
Linux二进制文件使用系统调用来执行访问文件、请求内存、创建进程等功能。虽然WSL1使用的是由WSL团队构建的转换层,但WSL 2包括了自己的Linux内核,具有完全的系统调用兼容性。优点包括:
# 自动下载并安装WSL所需的组件和文件。
wsl --install
# 启用WSL和虚拟机平台功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 默认情况下,WSL的版本是1,但我们想要使用更高性能的WSL 2版本。
wsl --set-default-version 2
# 如需卸载,则输入wsl --unregister Ubuntu
打开开始菜单,并搜索并选择“Ubuntu”应用程序。点击它,将打开一个新的命令行窗口,开始初始化Ubuntu WSL。
在第一次启动时,系统会提示你设置一个新的用户名和密码。首先,输入你想要的新用户名,然后按下“Enter”键。
cat > /etc/apt/sources.list << EOF
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
EOF
sudo apt update
sudo apt upgrade
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py311_23.5.0-3-Linux-x86_64.sh
bash Miniconda3-py311_23.5.0-3-Linux-x86_64.sh
# Do you accept the license terms? [yes|no]
# yes
# yes
首先,进入WSL,使用命令uname -r
查看当前内核版本,发现版本为5.15.90.3-microsoft-standard-WSL 2
,不符合后续的需求,因此需要手动升级内核。
在尝试使用apt install linux-image
安装内核时,发现该方法无法正常启动。因此,我们需要从The Linux Kernel Archives下载所需版本,并配合微软的配置进行编译;或者直接从https://github.com/microsoft/WSL 2-Linux-Kernel拉取对应的版本进行编译。
refer to: 如何更新 Win10 WSL2 的 Linux 内核
这里我们以从https://github.com/microsoft/WSL 2-Linux-Kernel拉取对应分支进行编译为例。
# Clone 仓库并切换到指定分支
git clone --branch linux-msft-wsl-6.1.y https://github.com/microsoft/WSL2-Linux-Kernel.git
# 安装编译所需的工具和依赖
sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc
# 进入仓库目录
cd WSL2-Linux-Kernel
# 使用指定的配置文件进行编译
make KCONFIG_CONFIG=Microsoft/config-wsl
编译完成后,将编译好的内核文件bzImage
复制到宿主机的目录,这里我们复制到D盘下的VMs/WSL目录中(根据自己的实际情况调整)。
cp arch/x86_64/boot/bzImage /mnt/d/VMs/WSL
接下来,在宿主机的%UserProfile%
目录下,创建.wslconfig
文件,并修改其中kernel
对应的目录。
[wsl2]
kernel=D:\\VMs\\WSL\\bzImage
打开 PowerShell,立即终止所有 WSL 虚拟机,从而实现虚拟机的重启。
wsl --shutdown
重新打开 WSL 虚拟机,并再次查看内核版本。
uname -r
# 6.1.21.2-microsoft-standard-WSL2+
通过以上步骤,我们成功升级了 WSL 的内核版本。