问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

修复WSL无法启动的完整指南

创作时间:
作者:
@小白创作中心

修复WSL无法启动的完整指南

引用
1
来源
1.
https://www.hetong-re4per.com/posts/fixing-wsl-startup-issues/

WSL(Windows Subsystem for Linux)是Windows系统下常用的Linux子系统,许多开发者和IT技术人员都会使用。但是有时候WSL会出现无法启动的问题,本文将详细介绍如何修复WSL无法启动的问题。

起因

昨天重置了电脑的网络,然后今天启动 WSL 就连不上网络了,上网上找了一堆教程,结果后面直接无法启动 WSL 了。所以有了这一篇博客。

无法启动的表现

尝试启动 WSL 时会直接卡着,如果是通过 Windows Terminal 启动就会一直是空白的;如果直接启动 Ubuntu22.04.5 LTS 也会一直是一个黑框。

如果想尝试使用 wsl 指令,例如

wsl --shutdown

wsl -v

wsl --status

等等指令也都会直接卡住。

修复过程

大致过程其实就是先备份虚拟磁盘,然后重装 WSL,同时将虚拟磁盘放回去。非常的简单,对吧。

备份虚拟磁盘

我们需要备份一下磁盘,防止后面重装 WSL 后数据丢失。

你可以先尝试使用使用 WSL 自带的磁盘导出指令:

# 先查询发行版的名称
wsl -l -v
# 再导出磁盘到你想要的路径
# 例如:wsl --export Ubuntu-22.04 E:\wsl-ubuntu22.04.tar
wsl --export <虚拟机名称> <保存路径>\<导出文件名>.tar

如果你和我一样这些都没法使用,那么你需要知道你的 WSL 的虚拟磁盘(ext4.vhdx)的位置,如果你没有移动过默认的位置就在
%USERPROFILE%/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc/LocalState
下。(复制到资源管理器地址栏回车可以直接打开)

如果你之前修改或者迁移过磁盘位置请在自己修改的位置下寻找,例如我存放在
E:\WSL\Ubuntu-22.04\
下。

将这个虚拟磁盘复制或者移动出来,存放在你想要的位置。

重装 WSL

首先尝试完全卸载 WSL:

  1. 前往设置(+I)的应用->应用和功能中,找到你的发行版对应的 App,然后点击「卸载」。如果你有安装过 WSL 升级包「Windows Subsystem for Linux Update」也请一起卸载。
  2. 在控制面板->程序->程序和功能找到「启用或者关闭 Windows 功能」,找到「适用于 Linux 的 Windows 子系统」,取消勾选。接下来会提示你重启电脑,重启即可。

接下来我们在重启过后重新安装 WSL 即可(其实就是将卸载的步骤倒过来进行一次):

在重新安装前先放一张流程图:

  1. 在控制面板->程序->程序和功能找到「启用或者关闭 Windows 功能」,找到「适用于 Linux 的 Windows 子系统」,勾选。重启电脑。
  2. 前往 Microsoft Store 安装你想要的 WSL 发行版。此时先不急着启动 WSL(「Windows Subsystem for Linux Update」似乎不需要再安装,因为我在
    wsl --version
    中发现没有安装我的 WSL 也是 WSL2)。
  3. 安装虚拟磁盘:
    1. 首先确认 WSL 关闭:
      wsl --shutdown
      
    2. 导入磁盘:
  • 如果你是通过
    bash wsl --export
    重装WSL:
    导入磁盘备份:
    bash wsl --import <发行版名称> <目标文件夹> <备份磁盘路径>\<备份磁盘文件名>.tar
    ,例如:
    bash wsl --import Ubuntu-22.04 E:\WSL\Ubuntu-22.04 E:\wsl-ubuntu22.04.tar
    .(如果你还是想安装在默认位置自己指定目标位置为默认的位置,在备份虚拟磁盘小节有提到);
  • 如果是直接复制虚拟磁盘(ext4.vhdx)出来的话:
    先启动一次 WSL,再
    bash wsl --shutdown
    想放在默认位置的话先启动 WSL,在
    bash wsl --shutdown
    后直接将你复制备份的
    ext4.vhdx
    覆盖到默认位置就不用下面的导出再导入的操作了(默认磁盘位置备份虚拟磁盘小节有提到),直接跳到下一步;如果想指定安装位置就先启动一次 WSL 将新生成的磁盘在导出到你想要的 WSL 磁盘位置
    bash # 先查询发行版的名称 wsl -l -v # 再导出磁盘到你想要的路径 # 例如:wsl --export Ubuntu-22.04 E:\wsl-ubuntu22.04.tar wsl --export <虚拟机名称> <保存路径>\<导出文件名>.tar # 导入到新位置 # 例如:wsl --import Ubuntu-22.04 E:\WSL\Ubuntu-22.04 E:\wsl-ubuntu22.04.tar wsl --import <发行版名称> <目标文件夹> <备份磁盘路径>\<备份磁盘文件名>.tar
    然后直接将你自己复制在外面的
    ext4.vhdx
    覆盖到你的
    <目标文件夹>
    下。
    1. 启动后你会发现使用的是默认的用户是 root,可以通过
      <发行版exe名> config --default-user <用户名>
      
      指定默认登录用户,例如:
      ubuntu2204 config --default-user he_tong
      

结语

以上就是主要步骤了,重新启动 WSL 就会发现还是我们自己的 WSL,不用重新配置环境等等。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号