目录
5.2 WslRegisterDistribution 失败并出现错误 0x8007019e
5.3 安装失败,出现错误 0x80070003 或错误 0x80370102
5.4 尝试升级时出错:Invalid command line option: wsl --set-version Ubuntu 2
5.5 由于虚拟磁盘系统的某个限制,无法完成所请求的操作。虚拟硬盘文件必须是解压缩的且未加密的,并且不能是稀疏的
5.6 无法将词语“wsl”识别为 cmdlet、函数、脚本文件或可运行程序的名称
5.7 错误:此更新仅适用于装有适用于 Linux 的 Windows 子系统的计算机
一、安装WSL2.0
WSL2.0相比WSL1.0具备完整的Linux内核、托管VM和完全的系统调用兼容性,所以我们这里使用WSL2.0
- 启用适用于 Linux 的 Windows 子系统:打开powershell并输入:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2. 检查WSL2的要求:win+R打开运行,然后输入winver检查windows版本
查看Linux版本
3. 此版本需要大于1903
4. 启用虚拟化:以管理员打开powershell输入下列命令
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
5. 下载X64的WSL2 Linux内核升级包并安装
6. 设置WSL默认版本
wsl --set-default-version 2
二、安装Ubuntu20.04LTS
- 打开Microsoft Store
2. 一般Windows都会将ubuntu加入到我的软件库中,如果没有可以自行搜索ubuntu然后安装,搜索到商店的有可能安装不了
3. 找到Ubuntu 20.04LTS点击安装即可,这里我已经安装好了直接点击启动就行
4. 打开后设置初始的用户名和密码即可,如果出现参考的对象类型不支持尝试的操作,请重置下网络net winsock reset
5. 设置root密码
sudo passwd
三、配置ssh
-
修改配置文件/etc/ssh/sshd_config,开启下列选项
PermitRootLogin yes #允许root认证登录
PasswordAuthentication yes #允许密码认证
RSAAuthentication yes #秘钥认证
PubkeyAuthentication yes
2. 由于自带的openssh-server没有生成密钥所以需要生成密钥文件,否则会出现sshd: no hostkeys available -- exiting.
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
3. 启动ssh
service ssh start
4. 开机启动ssh:win+R打开运行,输入shell::startup进入开机启动项,创建wsl_ssh_start.bat,其内容为
C:\Users\用户名\AppData\Local\Microsoft\WindowsApps\ubuntu2004.exe run "sudo service ssh restart"
5. 设置默认root登录:以管理员打开powshell,输入以下命令,
注意:用户名需要替换掉,版本页需要替换掉,如果wsl的路径不在这里可以去C:\Program Files\WindowsApps\XXX.UbuntuXXX\ubuntu版本.exe
C:\Users\用户名\AppData\Local\Microsoft\WindowsApps\ubuntu版本.exe config --default-user root
四、设置分发版本
检查分配给已安装Linux的WSL版本wsl -l -v
wsl --list --verbose
设置分发版本为某个wsl版本
wsl --set-version <distribution name> <versionNumber>
五、常见问题解决
5.1 安装失败并出现错误 0x80070003
适用于 Linux 的 Windows 子系统只能在系统驱动器(通常是 C: 驱动器)中运行。 请确保分发版存储在系统驱动器上:打开“设置”->“系统”-->“存储”-> “更多存储设置”: 更改新内容的保存位置”
5.2 WslRegisterDistribution 失败并出现错误 0x8007019e
未启用“适用于 Linux 的 Windows 子系统”可选组件:
打开“控制面板” -> “程序和功能” -> “打开或关闭 Windows 功能”-> 选中“适用于 Linux 的 Windows 子系统”,或使用本文开头所述的 PowerShell cmdlet。
5.3 安装失败,出现错误 0x80070003 或错误 0x80370102
请确保在计算机的 BIOS 内已启用虚拟化。 有关如何执行此操作的说明因计算机而异,并且很可能在 CPU 相关选项下。WSL2 要求 CPU 支持二级地址转换 (SLAT) 功能,后者已在 Intel Nehalem 处理器(Intel Core 第一代)和 AMD Opteron 中引入。 即使成功安装了虚拟机平台,旧版 CPU(例如 Intel Core 2 Duo)也无法运行 WSL2。
5.4 尝试升级时出错:Invalid command line option: wsl --set-version Ubuntu 2
请确保已启用适用于 Linux 的 Windows 子系统,并且你使用的是 Windows 内部版本 18362 或更高版本。 若要启用 WSL,请在 PowerShell 提示符下以具有管理员权限的身份运行此命令:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux。
5.5 由于虚拟磁盘系统的某个限制,无法完成所请求的操作。虚拟硬盘文件必须是解压缩的且未加密的,并且不能是稀疏的
- 取消选中“压缩内容”(如果已选中“加密内容”,请一并取消选中),方法是打开 Linux 发行版的配置文件文件夹。 它应位于 Windows 文件系统上的一个文件夹中,类似于:USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited...
- 在此 Linux 发行版配置文件中,应存在一个 LocalState 文件夹。 右键单击此文件夹可显示选项的菜单。 选择“属性”>“高级”,然后确保未选择(未勾选)“压缩内容以节省磁盘空间”和“加密内容以保护数据”复选框。 如果系统询问是要将此应用到当前文件夹还是应用到所有子文件夹和文件,请选择“仅此文件夹”,因为你只是要清除压缩标志。 完成此操作后,wsl --set-version 命令应正常工作。
5.6 无法将词语“wsl”识别为 cmdlet、函数、脚本文件或可运行程序的名称
请确保已安装“适用于 Linux 的 Windows 子系统”可选组件。 此外,如果你使用的是 ARM64 设备,并从 PowerShell 运行此命令,则会收到此错误。 请改为从 PowerShell Core 或从命令提示符运行 wsl.exe。
5.7 错误:此更新仅适用于装有适用于 Linux 的 Windows 子系统的计算机
- 若要安装 Linux 内核更新 MSI 包,需要 WSL,应先启用它。 如果失败,将看到以下消息:This update only applies to machines with the Windows Subsystem for Linux。
- 出现此消息有三个可能的原因:
- 你仍使用旧版 Windows,不支持 WSL 2。 有关版本要求和要更新的链接,请参阅步骤 #2。
- 未启用 WSL。 需要返回到步骤 #1,并确保在计算机上启用了可选的 WSL 功能。
- 启用 WSL 后,需要重新启动才能使其生效,请重新启动计算机,然后重试。
5.8 错误:WSL 2 要求对其内核组件进行更新
如果 %SystemRoot%\system32\lxss\tools 文件夹中缺少 Linux 内核包,会遇到此错误。 若要解决此问题,请在安装说明的步骤 #4 中安装 Linux 内核更新 MSI 包。 可能会需要从添加或删除程序卸载 MSI,然后重新安装。
六、忘记WSL密码
如果忘记了 Linux 分发版的密码:
- 请打开 PowerShell,并使用以下命令进入默认 WSL 分发版的根目录:wsl -u root
- 如果需要在非默认分发版中更新忘记的密码,请使用命令:wsl -d Debian -u root,并将 Debian 替换为目标分发版的名称。
- 在 PowerShell 内的根级别打开 WSL 发行版后,可使用此命令更新密码:passwd <WSLUsername>,其中 <WSLUsername> 是 DISTRO 中帐户的用户名,而你忘记了它的密码。
- 系统将提示你输入新的 UNIX 密码,然后确认该密码。 在被告知密码已成功更新后,请使用以下命令在 PowerShell 内关闭 WSL:exit