WSL 2 安装和升级过程中错误的解决方法

微软近期推出了 WSL 2,相较于 WSL 1 增加了不少优点,包括完整的 Linux 内核支持、文件 IO 性能的提升、更好的系统调用兼容性、更少的内存占用。总的来说还是非常值得安装或升级的。

微软为安装和升级 WSL 2 提供了指导网页(适用于 Linux 的 Windows 子系统安装指南 (Windows 10)),但在实际操作中还是遇到了不少指南中未提及的问题。经过搜索网上各位大佬的解答和自己的实际操作,对遇到的部分问题做个小结,希望能对遇到类似问题的朋友有所帮助。

首次安装 Linux 分发版(Ubuntu)时出现 WslRegisterDistribution failed with error: 0x80370102 报错

0x80370102 报错通常会包含其他相关信息,常见的有:

  • Error: 0x80370102 The virtual machine could not be started because a required feature is not installed.

遇到这个问题首先请对照上述微软 WSL 2 安装指南,确认是否遗漏或跳过某个步骤。其次就是打开启用或关闭 Windows 功能检查Hyper-V、适用于 Linux 的 Windows 子系统、虚拟机平台这个几个选项是否勾选,特别的还应该注意 BIOS 中的 CUP 虚拟化支持是否打开在BIOS中开启VT,BIOS开启VT虚拟化技术图文教程)。

  • Error: 0x80370102 ?????????????????????

然而,在检查上述所有设置后,错误依然存在,而且提示十分令人崩溃。结合后续为现有 Linux 分发版从 WSL 1 升级到 WSL 2 遇到的问题,怀疑也是 53 端口被占用造成的。但这里先叙述实际解决问题的步骤。

首先将 WSL 1 恢复设置为默认版本

wsl --set-default-version 1

然后再重新安装 Ubuntu 就不会报错了

将 Ubuntu 从 WSL 1 升级 WSL 2 遇到 0xffffffff 报错

在成功安装 Ubuntu 后,我们使用 wsl --set-version Ubuntu 2 来升级,但提示 0xffffffff 报错。实际解决手段也比较粗暴,先用 netstat -ano 查出占用 53 端口的程序/服务,终止掉就可以了。

到这里回顾遇上面遇到的 0x80370102 报错是不是也和这个有关,希望试过的同学能反馈一下~

解决 software_reporter_tool.exe 占用 CPU 问题

Google 已经从“不作恶”演变成了“尽作恶”。

在大家都无法避免使用 chrome 的情况下,经常发现其下的一个 software_reporter_tool.exe 疯狂占用 CPU 和硬盘 IO。

解决方法其实很简单,进入 %localappdata%\Google\Chrome\User Data 删除 SwReporter 文件夹,再建一个建立个 0 字节、只读、同名、占位文件 SwReporter 即可。

fxxk Google.

Linux 设置系统时间及同步

1.调整系统时区

CentOS6 , Ubuntu16 修改方法 :
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

CentOS7 , RHEL7 , Scientific Linux 7 , Oracle Linux 7 :
timedatectl set-timezone Asia/Shanghai #其他时区以此类推

查看时间:
date

参考链接:Linux 修改时区和时间

2.配置 NTP

安装 NTP:
yum install ntp #适用于 CentOS

启动 NTPD 服务:
service ntpd start #适用于 CentOS

参考链接:NTP服务器的配置和使用

为 VPS 配置 IPv6

在如今到处都在普及 IPv6 之际,某 VPS 服务商非常不友好地不支持 Native IPv6,无奈之下只能采用曲线救国方式,利用 HE.NET 提供的 IPv6 Tunnel 来实现 VPS 对 IPv6 的支持。

检查 VPS 是否支持 IPv6

输入 ip -6 address show 看是否有显示内容,如无则表示没有启用 IPv6。
编辑文件 /etc/sysctl.conf,添加或修改一下内容启用 IPv6:

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

键入 sysctl -p 使上述设置生效,再输入 ip -6 address show 查看是否有信息显示。

为 VPS 配置 IPv6 Tunnel

/root 目录下新建一个 he-ipv6.sh 文件,将 Tunnelbroker.net 中 Linux-route2 选项下的配置内容粘贴进去,执行 ./he-ipv6.sh

设置 IPv6 优先级

尽管目前 IPv6 在全世界范围内快速普及,但在实际使用中仍然会遇到不少问题,为保守起见,我们设置了 IPv4 的优先级高于 IPv6。
方法很简单,就是在 /etc/gai.conf 中加入 precedence ::ffff:0:0/96 100 就行了。

添加一整段 IPv6

虽然我也不知道在一个 VPS 上监听 2^n 个 IP 地址有啥用…

ip -6 route add local XXXX/64 dev lo #添加
ip -6 route list table local #查看

在 Windows 系统利用 HE Tunnelbroker 配置 IPv6

现在国家大力推进 IPv6 普及,很多网站都提供了 IPv4/v6 双栈访问,IPv6 的普及也是大势所趋。但是由于我国复杂的网络环境,很多小伙伴现在还不能使用原生的 IPv6(Native IPv6),原来在 Windows 系统下普遍采用的是 Teredo 方法来配置 IPv6,但最近几乎所有网上能查到了 Teredo 服务器都已经无法使用,所以不得不另辟蹊径。

原来给 VPS 配置 IPv6 环境曾经使用过 HE.NET 的 IPv6 Tunnel,那是否也能把其移植到 Windows 上?答案是肯定的。先说一下我的电脑环境:

系统: Windows 7 SP1 Ultimate 64位
网络:有线连接路由器(内网IP:192.168.1.x,公网IP:222.x.x.x)

1.在 Tunnelbroker.net 注册一个账号

2.Create Regular Tunnel,填入公网IP,也就是 222.x.x.x。然后选择一个网络质量最好的 Tunnel Server

3.创建完成后,可以在 Main Page 最下方看见 tunnel 列表,点击打开查看详情,再进入 Example Configurations

4.在下拉菜单选择相应的系统,例如选择 Windows Vista/2008/7/8 则显示下列信息:

netsh interface teredo set state disabled
netsh interface ipv6 add v6v4tunnel interface=IP6Tunnel 192.168.1.x 216.66.88.98 #如果你是内网环境,加黑处替换为内网地址
netsh interface ipv6 add address IP6Tunnel 2001:470:XXXX:XXXX::2 #替换为你的 IPv6 地址
netsh interface ipv6 add route ::/0 IP6Tunnel 2001:470:XXXX:XXXX::1 #对应替换 IPv6 地址

5.用管理员权限启动 CMD,然后依次输入上述信息,IPv6 配置就完成了

下面陈列一下其他涉及 IPv6 配置的命令

netsh int ipv6 show int #查看 IPv6 interfaces
netsh int ipv6 add address IP6Tunnel 2001:470:XXXX:XXXX::3/64 #添加额外 IPv6 地址
netsh int ipv6 delete address IP6Tunnel 2001:470:XXXX:XXXX::3/64 #删除额外 IPv6 地址

netsh interface ipv6 delete interface ip6tunnel #删除 ip6tunnel
netsh interface ipv6 reset all #重置 IPv6 设置

netsh int ipv6 show prefixpolicies #查看前缀策略,第一列数值越大,优先级越高
netsh int ipv6 add prefixpolicy 2001:470::/32 5 11 store=persistent #降低 Tunnelbroker 的优先级

netsh int ipv6 delete prefixpolicy ::1/128 store=persistent #删除策略记录
netsh int ipv6 add prefixpolicy ::1/128 40 0 store=persistent #新增策略记录
*::1/128 #IPv6 loopback
*::/0 #Native IPv6
*::ffff:0:0/96 #IPv4
*2002::/16 #6to4
*2001::/32 #Teredo
*::/96 #v4compat
*fec0::/10 #IPv6 site-local
*3ffe::/16 #6bone