WSL2(预览版)体验笔记
WSL2安装
WSL2在今年5月份Microsoft Build大会上发布了,但至今Windows10一直没收到更新推送,我想这么久过去就算没进入正式,至少也到了RC版了吧,于是开始折腾准备体验一把。
WSL2需要Windows10的18917或以上版本的支持,截止至2019-08-22,这个版本仍然处于内部预览的状态,如需要,得把系统设置的“Windows预览体验计划”作相应的修改,加入这个预览体验计划,然后就可以接收到Windows预览版的更新内容了。——具体过程略,特别要注意的就是这个更新过程比较漫长,找个空闲时间来做吧。
在“启用或关闭Windows功能”里打开这两个功能
- 执行Linux程序的Windows子系统 (这个就是WSL了)
- 虚拟机平台 (WSL2需要这个,WSL1是不需要的,记得打开BIOS设置里的CPU虚拟化技术)
或者以管理员身份运行Powershell,然后执行:
>Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
>Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
在Windows10的应用商店里装个Ubuntu,或Ubuntu 18.04 LTS,或者别的发行版也行(咋没有我熟悉的CentOS呢?)。然后在开始菜单上点击运行,第一次运行会很慢,因为有个安装的过程,耐心等待,完成后提示你输入用户名密码,这个用户名密码和Windows的是无关的。
WSL2使用
打开命令行界面(cmd.exe),现在来熟悉几条WSL2相关的配置命令:
>wsl -l --verbose
这条命令能列出当前安装的的Linux发行版的名称、状态及其使用的WSL的版本,如:
NAME STATE VERSION
*Ubuntu Running 1
Ubuntu-18.04 Running 2
前面的*表示wsl的默认发行版,从这还能看出Ubuntu使用的WSL为第一版,要将Ubuntu转为使用WSL2可以使用这个命令:
>wsl --set-version Ubuntu 2
设置将来安装的发行版都使用WSL2
>wsl --set-default-version 2
另外有wslconfig命令也可以控制发行版的运行,具体直接敲这个命令就能看到帮助信息。
WSL2和WSL的一个很大的不同点就是使用了虚拟磁盘,并不是像WSL那样直接把文件存在Windows的文件系统中,WSL的磁盘的默认存放地方在:
%localappdata%\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState
这个目录下有个扩展名为vhdx的大文件,这就是虚拟磁盘镜像文件了。
之前的WSL,要在Windows访问Linux是有些问题的,虽然使用的是同一个文件系统,但直接往Linux的文件目录里扔文件似乎没用,可能跟刷新有关,并且也不建议这么做,而现在方便了,在WSL里敲explorer.exe .,即可用Windows的资源管理器打开当前WSL的目录,注意这个功能只能在WSL的窗口里执行,如果是SSH终端,那会提示explorer.exe找不到命令。
坑
在部署完WSL之后,我发觉VMWare Workstation Pro已经不能用了,提示“VMware Workstation 与 Device/Credential Guard 不兼容”,搜索解决方案,在Windows组策略中关闭了“Device/Credential Guard”之后问题依旧。经过查阅资料,了解到WSL2的架构发生了较大的变化,它使用了一些虚拟化技术(但又不完全等同于VM,它启动速度要比VM快得多,具体等我有了更多了解后再做分享),所以不难理解为什么WSL需得开启“虚拟化平台”这个功能方可使用,WSL2也因此支持了Docker,这都说明了它已经是一套纯正的Linux了,然而Windows的虚拟化技术跟VMWare所使用的虚拟化技术有很大不同,互不兼容,如果你之前使用过Hyper-V的话一定知道这事情。现在怎么办呢?我的解决方案就是放弃VMWare,把原先的VMWare磁盘镜像文件转为Hyper-V磁盘镜像的格式,使用Hyper-V虚拟机……呃,其实也算不上解决方案,VMWare的爽,谁用谁知道,所以我觉得这是WSL2最大的一个坑。
这里又引出一个问题了:WSL2还能称得上WSL么?我觉得它更接近于一个运行在Windows环境下的经过了特殊优化的Linux虚拟机,而不再是一个Subsystem了。
如今的WSL2可以看做是一个独立的虚拟机了(虽然技术上仍有些区别),它具有自己独立的IP地址,通过虚拟路由器与Windows连接,虽然你在WSL2中部署的服务在Windows中也能用localhost访问,但是我猜这是用了一些特殊的内部链路技术来实现的,不信你可以做这么一个简单试验:假如你在WSL2中部署并运行了redis,如果配置文件中仅仅bind到了127.0.0.1的话,Windows是无法用localhost或127.0.0.1来访问WSL2中的redis服务的。要查看WSL2的ip地址,可以在WSL2中用ip addr命令或者ifconfig命令。另外我在使用中还发现用localhost这个地址无法访问WSL2的ssh服务,我尝试过关闭Windows防火墙,用netstat检查过端口打开及绑定状态,都是没问题的,且只要把localhost换成WSL2的IP地址(通常是172.x.x.x)就可以了,与此同时,利用localhost地址访问WSL2中的redis服务及PostgreSQL服务都是没问题的,感觉挺奇怪。
还有值得注意的一点是:WSL2的IP地址是动态的,每次启动后都会不一样,所以也不好直接用指定IP地址的方式来访问WSL2的ssh服务。
我还发现WSL1中的无法自动启动sshd等问题如今仍然存在,虽然我可以通过一些小手段来解决,网上也有人给出了一些workaround,但总归觉得不够工整。
总结
现在其实一切都还没最终发布,如果精力有限,我觉得还是先不要入这坑的好,我这么一番折腾下来,感觉不太值得……
2019-08-26更新:早上Windows更新至18965.1005,发觉WSL2联网都成问题了,暂时没空找解决方案,于是将WSL2降回WSL1继续用,想想还是等它正式上线了再用比较好,太坑了。
WSL2(预览版)体验笔记的更多相关文章
- VS2015预览版体验
.NET开源了,JAVA颤抖吧... 据说VS2015可以开发android,ios,wp应用程序了,还可以开发能运行在mac,linux上的ASP.NET网站,如果真是这样就太爽啦,上微软官网下载了 ...
- ASP.NET Core 3.0预览版体验
目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3. ASP.NET Core 3.0 之后将不再支持.NE ...
- 20天等待,申请终于通过,安装和体验IntelliJ IDEA新UI预览版
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于IDEA的预览版 IDEA会启用新的UI,这事情之 ...
- Windows 10简体中文最新预览版Build 9926
Windows 10 消费者预览版全新特性: • 全新的开始菜单Win 10的开始菜单产生了较大改变,磁贴界面在原有磁贴概念的基础上进行了大幅度的调整,新的磁贴界面开始支持纵向滚动,并可以利用开始按钮 ...
- .NET 6 预览版 5 发布
很高兴.NET 6 预览版5终于跟大家见面了.我们现在正处于.NET 6 的后半部分,开始整合一些重要的功能. 例如.NET SDK 工作负载,它是我们.NET 统一愿景的基础,可以支持更多类型的应用 ...
- Win10桌面预览版14316更新内容大全
下载更新: 安装之后右下角: Win10桌面预览版14316更新内容: Windows上运行乌班图Bash:通过设置开启开发者模式,更新和安全>面向开发人员.然后搜索"Wi ...
- .NET 4.5.1 预览版新特性
上个月的微软Build大会上宣布了.NET 4.5.1的推出,Heydarian的这个演讲题为".NET开发中的新内容",涵盖了.NET Framework中一些重要的新特性. H ...
- 【译】Visual Studio 15 预览版更新说明
序:恰逢Build2016大会召开,微软发布了VS2015的update2更新包和VS2016预览版.本人正在提升英文水平中,于是在这里对VS2016预览版的官方文档进行了部分翻译.因为VS有些功能使 ...
- WP8没有开发者账号升级GDR3预览版的方法
很多希望尝鲜WP8 GDR3的朋友一样希望提前体验GDR3的效果,但苦于没有开发者账号而不得其门!今天为大家带来普通账号升级GDR3的方法! 工具/原料 WP8智能手机 可用wifi热点 方法/步骤 ...
随机推荐
- Objective-C (OC)
1.OC 运行效率比较高,仅次于c.开发过程时,效率也比较高,不会次于java和C++: :表示继承 “{}”之间写字段或声明 }和@end之间写函数 import 相当于include 作用于和j ...
- 英语口语考试资料Food
新东方推荐文章:Food and Health The food we eat seems to have profound effects on our health. Although scien ...
- 【SSL题解报告】没有上司的舞会
题目: 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指 ...
- Date、Calendar和GregorianCalendar的使用
java.util 包提供了 Date 类来封装当前的日期和时间. Date 类提供两个构造函数来实例化 Date 对象. 第一个构造函数使用当前日期和时间来初始化对象. Date public st ...
- Python协程与Go协程的区别二
写在前面 世界是复杂的,每一种思想都是为了解决某些现实问题而简化成的模型,想解决就得先面对,面对就需要选择角度,角度决定了模型的质量, 喜欢此UP主汤质看本质的哲学科普,其中简洁又不失细节的介绍了人类 ...
- python 协程与go协程的区别
进程.线程和协程 进程的定义: 进程,是计算机中已运行程序的实体.程序本身只是指令.数据及其组织形式的描述,进程才是程序的真正运行实例. 线程的定义: 操作系统能够进行运算调度的最小单位.它被包含在进 ...
- 前端跨域 nginx 反向代理
1.下载ngnix稳定版 (http://nginx.org/en/download.html) 2.解压到你中意的目录. 3.将你的网页文件放到刚解压html文件目录下 4.打开conf &g ...
- windows系统安装git
一.下载git的安装包 git官网的下载地址:https://git-scm.com/download/win 选择自己的机型进行安装. 二.安装配置 一直点下一步就可以 安装完毕之后,打开电脑命令窗 ...
- [vue]数据来源
1.组件data函数return的数据 作用域是组件本身 可以在模板template及计算属性computed和方法methods中使用 2.父传子,props数据 来自父级:可以是写死的,或者是来自 ...
- 28. 实现strStr() (双指针)
实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...