我目前(20200825)的主系统版本是win10 2004 v19041.450
子系统使用的是ubuntu18.04
就从这里开始说,我所知道的
其它更新进度参考
https://docs.microsoft.com/en-us/windows/wsl/release-notes
以往wsl 1 采用的Cygwin或者MinGW一样的技术,
新版本wsl 2 采用的是系统自带虚拟机hyper-v环境运行的。
既然是虚拟就肯定占处理器和内存,高频访问主系统文件略慢,这是唯一的劣势。
而虚拟机优势,能完整使用ubuntu,进程与主机隔离防止恶意软件。
而主和子系统文件是可互访的,网络也一样,但是通过挂载或共享服务器完成的。
比如,主系统要访问子系统文件,可以 \\wsl$
相反,子系统默认挂载在了/mnt/盘符下
网络,主系统可以通过http://localhost
或者http://127.0.0.1
或者http://172.27.233.XXX (ifconfig查看)
访问你的web网站。
新版本wsl2支持GPU加速
也可以通过命令来回切换版本,且保留环境
切换1 wsl.exe --set-version ubuntu1804 1
切换2 wsl.exe --set-version ubuntu1804 2
截止目前 WSL2 的 systemd 守护进程不是原生的,没办法加载自启动。
因为pid 1 不是systemd,而是init
像以前的老办法,在window中执行脚本
编辑一个文件
vi /etc/init.wsl
比如内容为
service ssh start
service nginx start
在主系统cmd执行
ubuntu1804 run sudo /etc/init.wsl start
就是传说中的迂回法。
或者采用
第三方工具运行 systemd
https://github.com/arkane-systems/genie
原理:提供一个单独的 namespace 隔离 跑 systemd,此时pid为1
参考:https://segmentfault.com/a/1190000023027574
如果不想用wsl2,你可以考虑vbox或Docker Desktop,新版本已经支持 WSL2 和 Hyper-V
WSL2 内存占用巨大的限制办法
win主系统运行处输入 %UserProfile% 回车
编辑.wslconfig文件内容为
[wsl2]
memory=4GB
swap=0
localhostForwarding=true