type
Post
status
Published
date
Jun 25, 2023
slug
windows-subsystem
summary
Windows中安装wsl并更新到wsl2
tags
工具
软件
category
技术分享
icon
password
URL
文章来自实操技术总结
需要开启的服务
- AppX Deployment Service (AppXSVC)
- 与Microsoft Store有关的基础服务
- 关闭会导致应用打不开
- Windows Defender Firewall
- 不开启会遇到错误0x80070005
- 将服务设为自动启动
- Windows更新
- 用于打开Windows子系统和虚拟机平台等功能
- LxssManager
- wsl的基础服务,必须开启,设为自动启动
安装过程
安装Linux子系统
- 控制面板 > 程序和功能 > 启用或关闭Windows功能 > 适用于Linux的Windows子系统 > 启用
- 重启
安装Linux分发版
在power shell中下载并安装Ubuntu应用安装包
- 以管理员权限启动power shell
- 查看分发版,这一步需要科学上网
PS C:\Windows\system32> wsl --list --online 以下是可安装的有效分发的列表。 请使用“wsl --install -d <分发>”安装。 NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_7 Oracle Linux 8.7 OracleLinux_9_1 Oracle Linux 9.1 SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4 openSUSE-Leap-15.4 openSUSE Leap 15.4 openSUSE-Tumbleweed openSUSE Tumbleweed
- 执行以下命令
Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing Add-AppxPackage .\Ubuntu.appx
- 查看分发版
- 由于未安装成功,wsl会提示需要安装分发版子系统
- 适用于 Linux 的 Windows 子系统没有已安装的分发版
注意事项:
- 在第一步中,下载Ubuntu没有问题,但是安装会报错,这里会提示wsl的内核版本过低,可以继续往下做
- 这里是通过power shell中命令行来下载安装分发版的子系统,你也可以通过Microsoft Store来搜索并安装,或者使用wsl命令来安装
更新wsl
下载链接:
下载完成后直接安装就可以了
注意事项:
更新到wsl2以后,继续安装Ubuntu分发版,这里会提示要求安装“虚拟机平台”,我们继续往下做
安装虚拟机平台
- 控制面板 > 程序和功能 > 启用或关闭Windows功能 > 虚拟机平台 > 启用
- 重启
到这里,依赖的软件环境已经全部配置完成,重新安装Ubuntu分发版,此时应该安装完成
查看Ubuntu分发版
PS C:\Windows\system32> wsl -l -v NAME STATE VERSION * Ubuntu Stopped 2
子系统的用户名是leif,密码是xing
导出子系统
默认子系统会安装在C盘中,我们需要导出子系统并重新导入到其他盘中
wsl --export Ubuntu Ubuntu.tar wsl --unregister Ubuntu wsl --import Ubuntu D:/workspace/subsystem/Ubuntu Ubuntu.tar --version 2
遇到的问题
- WindowsApps目录权限问题,获取管理员权限
- 通过everything找到WindowsApps,通过右键“管理员取得所有权”
- 分发版所在盘必须大于20GB以上
- 通过wsl导出包并重新导入即可,导出后注销原来的分发版
报错分析
App installation failed with error message: AppxManifest.xml(33,14): 错误 0x80070005: 无法注册 CanonicalGroupLimited.UbuntuonWindows_2004.2021.825.0_x64__79rhkp1fndgsc 程序包,因为在注册 windows.appExecutionAlias 扩展时遇到以下错误: 拒绝访问。 。请重试,如果问题仍然存在,请联系程序包发布者。 (0x80070005)
这个错误是权限问题,获取WindowsApps的管理员权限可以解决
Add-AppxPackage Ubuntu.appx Add-AppxPackage : 部署失败,原因是 HRESULT: 0x80073CF6, 无法注册包。 错误 0x800706D9: 在处理请求时,由于以下错误,系统无法注册 windows.firewall 扩展: 终结点映射器中没有更多的终结点可用。
解决这个问题,只需要启动Windows防火墙服务就可以了
Docker的配置与应用
配置
- /etc/docker/daemon.json
- docker后台服务配置文件
- ~/.docker/config.json
- docker的用户配置文件
- /var/lib/docker
- docker的数据目录,存放镜像和容器等数据
windows链接ubuntu子系统的docker目录,在windows中执行以下命令
cd d:/workspace/data mklink /D docker "\\wsl$\Ubuntu\var\lib\docker"
用户登录,不指定镜像源时默认是docker hub
docker login docker logout docker login --username=zdcy2012 registry.cn-hangzhou.aliyuncs.com docker logout registry.cn-hangzhou.aliyuncs.com
设置加速器,不指定默认使用docker hub源
{ "registry-mirrors": ["https://qyps2ser.mirror.aliyuncs.com"] }
#!/bin/bash if [ -z "$1" ]; then echo "No parameter provided. Exiting..." exit 0 fi if [ "$1" = "aliyun" ]; then cp /etc/docker/daemon.json.bak2 /etc/docker/daemon.json elif [ "$1" = "dockerhub" ]; then rm /etc/docker/daemon.json fi service docker restart
使用以上脚本可以切换镜像源
应用
释放空间
docker在使用过程中,镜像、容器和数据会占用大量空间,具体目录是/var/lib/docker/overlay2,本节介绍一种方法如何释放空间,并将vhdx格式的磁盘映像文件瘦身,具体方法如下:
- 停用并删除容器
docker stop <container> docker rm <container>
- 删除映像
docker rmi <image>
- 释放overlay2空间
docker system prune
- all stopped containers - all networks not used by at least one container - all dangling images - all dangling build cache
- 停止docker服务并退出Ubuntu子系统
service docker stop exit wsl --shutdown
- 为vhdx文件瘦身
- 将该文件命名为compact.cmd
- 与vhdx文件同一个目录
- 以管理员权限来执行
@set "script_dir=%~dp0" @echo 当前的工作目录是: %script_dir% @cd /d "%script_dir%" @echo select vdisk file="%script_dir%ext4.vhdx" > compact_disk.txt @echo attach vdisk readonly >> compact_disk.txt @echo compact vdisk >> compact_disk.txt @echo detach vdisk >> compact_disk.txt @diskpart /s .\compact_disk.txt @rm -f compact_disk.txt @pause
- 作者:紫电穿云
- 链接:https://zidy.eu.org/article/windows-subsystem
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。



