author:onceday date:2022年6月2日
详情参考官方文档:适用于 Linux 的 Windows 子系统文档 | Microsoft Docs
安装详细可参考:升级Windows中Linux子系统WSL1到WSL2 | Knner.Wang’s Blog
提供linux系统环境,减少传统虚拟机或者双启动的设置开销。
可用功能如下:
grep
、sed
、awk
)或其他 ELF-64 二进制文件。wsl1和wsl2的性能比对:
功能 | WSL 1 | WSL 2 |
---|---|---|
Windows 和 Linux 之间的集成 | ✅ | ✅ |
启动时间短 | ✅ | ✅ |
与传统虚拟机相比,占用的资源量少 | ✅ | ✅ |
可以与当前版本的 VMware 和 VirtualBox 一起运行 | ✅ | ✅ |
托管 VM | ❌ | ✅ |
完整的 Linux 内核 | ❌ | ✅ |
完全的系统调用兼容性 | ❌ | ✅ |
跨 OS 文件系统的性能 | ✅ | ❌ |
WSL 2 仅适用于 Windows 10 版本 1903、内部版本 18362 或更高版本。
通过按 Windows 徽标键 + R,检查 Windows 版本,然后键入 winver,选择“确定”。
WSL 2 也适用于 VMware 15.5.5+ 和 VirtualBox 6+。
WSL 2 Linux 内核是开源的。 可查看由构建该内核的团队撰写的博客文章随 Windows 一起提供 Linux 内核。
但目前存在以下问题:
参考官方文档:安装 WSL | Microsoft Docs
wsl --install
请注意,如果已安装wsl,那么上述命令将弹出一个帮助文档:
PS C:\WINDOWS\system32> wsl --install
版权所有(c) Microsoft Corporation。保留所有权利。
用法: wsl.exe [Argument] [Options...] [CommandLine]
运行 Linux 二进制文件的参数:
如果未提供命令行,wsl.exe 将启动默认 shell。
--exec, -e
在不使用默认 Linux Shell 的情况下执行指定的命令。
--
按原样传递其余命令行。
.............省略很多行.............
此时需要使用旧版本的WSL安装步骤(直接跳到下文—手动安装WSL):安装 WSL | Microsoft Docs
在未安装WSL的机器上,该命令可完成自动安装的全部过程:
可通过以下命令安装指定的linux发行版:
先获取可用的linux发行版列表
wsl --list --online
以下是可安装的有效分发的列表。
请使用“wsl --install -d <分发>”安装。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
openSUSE-42 openSUSE Leap 42
SLES-12 SUSE Linux Enterprise Server v12
Ubuntu-16.04 Ubuntu 16.04 LTS
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
指定安装的linux发行版名称
wsl --install -d #是发行版的名称
wsl --install -d Ubuntu-20.04
参阅官方文档:旧版 WSL 的手动安装步骤 | Microsoft Docs
1.首先启动适用于Linux的Windows子系统(管理员启动powershell)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2.检查版本号
3.启动虚拟机功能
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
之后重启计算机,以完成更新安装! 这些也可以图形化操作完成:
控制面板
,找到程序
,点击进去,选择启用或者关闭Windows功能
,里面即可打开上述两种功能。
5.下载Linux内核更新包
可使用systeminfo
命令查看处理器信息:
系统类型: x64-based PC
处理器: 安装了 1 个处理器。
[01]: Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~3696 Mhz
如果使用的是 ARM64 计算机,请下载 ARM64 包。
下载完这些更新包,直接安装即可!
wsl --set-default-version 2
可以直接打开Microsoft Store,pc上都预安装了这个软件。
参考文档:在 Windows Server 上安装 Linux 子系统 | Microsoft Docs
官方文档地址:设置 WSL 开发环境 | Microsoft Docs
VS code配套开发入门教程:开始通过 WSL 使用 VS Code | Microsoft Docs
如果已安装了windows子系统,那么可以在powershell里面输入以下命令观察当前的版本情况。
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Running 2
docker-desktop Running 2
docker-desktop-data Running 2
如果显示的版本号是1,那么需要按一下步骤来升级:
首先安装内核,即本文2.2节里提到的下载内核步骤,
参阅官方文档:旧版 WSL 的手动安装步骤 | Microsoft Docs
参阅博客文档:升级Windows中Linux子系统WSL1到WSL2 | Knner.Wang’s Blog
设置默认版本
C:\Users\admin>wsl --set-default-version 2
WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel
设置当前linux分发版的版本
wsl --set-version Ubuntu 2
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
转换完成。
这里需要注意:如果这里直接跳过几分钟的过程,直接弹出下一行命令行,并且 “转换完成” 变成 “提示要更新linux的内核”,那么需要执行步骤1安装内核。
Ubuntu 是安装的linux分发版的名称,可使用wsl -l -v
列出当前可用linux版本,然后填入它们的名字。
完成以上步骤,输入以下指令观察是否成功:
C:\Users\admin>wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
如果成功了,则版本号会显示2,如果还是为1,则可能是内核未更新!
参阅官方文档:WSL 的基本命令 | Microsoft Docs
在C:\Users\54041
里面新建文本文件.wslconfig
,54041
是用户名,然后里面填入以下内容,更多内容参阅官方文档:Advanced settings configuration in WSL | Microsoft Docs
[wsl2]
processors=8
memory=8GB
swap=8GB
localhostForwarding=true
修改完成之后需要重启wsl2才能生效,关闭正在运行的实例
wsl --shutdown
然后重新打开即可!
默认的wsl2会把Linux子系统虚拟磁盘文件放在C盘下 ,如果在wsl2里面安装了太多的程序,可能空间占用会很大。
有一种简单的方法是使用LxRunOffline
工具迁移。但是这里不介绍,直接用wsl命令来实现。
参考文档:
需要以管理员权限运行powershell。
PS C:\Users\cg> wsl --list --all --v
* Ubuntu-20.04 Running 2
docker-desktop Stopped 2
docker-desktop-data Stopped 2
如果子系统正在运行,需要关闭它。
如下两个命令皆可:
PS C:\Users\cg> wsl --terminate Ubuntu-20.04
PS C:\Users\cg> wsl --shutdown
然后再确认一遍是否关闭准备迁移的子系统。
PS C:\Users\cg> wsl --list --all --v
NAME STATE VERSION
* docker-desktop Stopped 2
Ubuntu-20.04 Stopped 2
docker-desktop-data Stopped 2
这里准备备份的子系统是ubuntu-20.04
,使用下面命令即可。
备份的目的路径是E:\Ubuntu-20.04.tar
,路径和名字取自己希望值即可。
PS C:\Users\cg> wsl --export Ubuntu-20.04 E:\Ubuntu-20.04.tar
这个过程需要等待一段时间,如果原有的子系统内容很多,那么可能要等待10+分钟。
ubuntu-20.04
子系统PS C:\Users\cg> wsl --unregister Ubuntu-20.04
PS C:\Users\cg> wsl --list --all --v
NAME STATE VERSION
docker-desktop Stopped 2
docker-desktop-data Stopped 2
注销完之后,再看列表中的子系统,已经没有ubuntu-20.04
了。
ubuntu-20.04
子系统上面的导出过程本质上也是给ubuntu-20.04
做了一个备份,里面存储了全部内容。
因此这里实际上在导入一个备份。
首先确定目的文件夹,如果目录不存在,需要手动创建。这里目的目录为E:\ubuntu\
。然后该子系统的虚拟磁盘文件就会放在此目录下。
PS C:\Users\cg> wsl --import Ubuntu-20.04 E:\ubuntu\ E:\Ubuntu-20.04.tar --version 2
PS C:\Users\cg> wsl --list --all --v
NAME STATE VERSION
* docker-desktop Stopped 2
Ubuntu-20.04 Stopped 2
docker-desktop-data Stopped 2
导入过程比较快,然后便可以看到刚刚导入的子系统了。
如果版本号不对,可以使用下面命令重设版本号。
PS C:\Users\cg> wsl --set-version Ubuntu-20.04 2
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
该分发已是请求的版本。
如果不设置默认用户名,那么登入wsl2的ubuntu-22.04
时,默认以root
用户登入。
一般之间都是默认都不是由root
用户登入,所以可以使用下面命令设置默认登入用户。
ubuntu.exe config --default-user
对于ubuntu-22.04
,上面命令改写为:
ubuntu2004.exe config --default-user "onceday"
其中“onceday"
也要用你自己的username
代替。
迁移子系统后,要重启docker desktop
应用,此时可能会出现下面问题。
onceday@ubuntu:~$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
docker确实启动了,但是此时无法连接上docker-server。
这个时候需要在docker-desktop->setting->Resources->WSL INTEGRATION-里面Enable integration with additional distros:
中使能Ubuntu-20.04
.