WSL 故障排查

WSL 常见错误、性能问题和解决方案


📋 目录


安装问题

问题 1:WSL 2 安装失败

错误信息

WSL 2 requires an update to its kernel component

解决方案

  1. 下载并安装 Linux 内核更新包

  2. 确保启用虚拟化功能

    # 检查虚拟化是否启用
    systeminfo | findstr /C:"Hyper-V"
     
    # 如果未启用,需要在 BIOS 中启用虚拟化
  3. 启用虚拟机平台功能

    # 以管理员身份运行
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    Restart-Computer

问题 2:发行版安装失败

错误信息

Error: 0x80070003

解决方案

  1. 检查磁盘空间

    # 检查 C: 盘空间
    Get-PSDrive C
  2. 清理临时文件

    # 清理 WSL 临时文件
    wsl --shutdown
    # 删除临时文件
    Remove-Item $env:TEMP\wsl* -Recurse -Force
  3. 重新安装发行版

    # 注销发行版
    wsl --unregister Ubuntu-22.04
    # 重新安装
    wsl --install -d Ubuntu-22.04

问题 3:无法从 Microsoft Store 安装

解决方案

  1. 使用命令行安装

    wsl --install -d Ubuntu-22.04
  2. 手动下载并安装


启动问题

问题 1:发行版无法启动

错误信息

Error code: WslRegisterDistribution failed with error: 0x8007019e

解决方案

  1. 检查 WSL 功能是否启用

    # 启用 WSL 功能
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    Restart-Computer
  2. 检查发行版状态

    wsl --list --verbose
  3. 重置发行版

    wsl --unregister Ubuntu-22.04
    wsl --install -d Ubuntu-22.04

问题 2:启动时卡住

解决方案

  1. 强制关闭 WSL

    wsl --shutdown
  2. 检查进程

    # 查看 WSL 相关进程
    Get-Process | Where-Object {$_.ProcessName -like "*wsl*"}
  3. 重启 WSL 服务

    # 重启 LxssManager 服务
    Restart-Service LxssManager

问题 3:启动后立即退出

解决方案

  1. 检查默认用户

    # 在 Windows 中检查
    ubuntu config --default-user
  2. 重置默认用户

    ubuntu config --default-user root
    wsl -d Ubuntu-22.04
    # 在 WSL 中修复用户
  3. 检查用户主目录

    # 在 WSL 中(以 root 身份)
    ls -la /home
    # 如果用户目录损坏,重新创建

网络问题

问题 1:无法访问互联网

解决方案

  1. 检查网络连接

    # 测试网络
    ping 8.8.8.8
    ping google.com
  2. 检查 DNS 配置

    cat /etc/resolv.conf
    # 如果被覆盖,禁用自动生成
    sudo nano /etc/wsl.conf
    # 添加:
    [network]
    generateResolvConf = false
  3. 手动配置 DNS

    sudo nano /etc/resolv.conf
    # 添加:
    nameserver 8.8.8.8
    nameserver 8.8.4.4
  4. 重启 WSL

    wsl --shutdown
    wsl

问题 2:端口无法访问

解决方案

  1. 检查端口转发

    netsh interface portproxy show all
  2. 配置端口转发

    $wslIp = (wsl hostname -I).Trim()
    netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=$wslIp
  3. 检查防火墙

    # 允许端口
    New-NetFirewallRule -DisplayName "WSL Port 3000" -Direction Inbound -LocalPort 3000 -Protocol TCP -Action Allow

问题 3:DNS 解析失败

解决方案

  1. 检查 /etc/resolv.conf

    cat /etc/resolv.conf
  2. 禁用自动生成

    sudo nano /etc/wsl.conf
    # 添加:
    [network]
    generateResolvConf = false
  3. 手动配置 DNS

    sudo nano /etc/resolv.conf
    nameserver 8.8.8.8
    nameserver 8.8.4.4

性能问题

问题 1:WSL 运行缓慢

解决方案

  1. 确保使用 WSL 2

    wsl --list --verbose
    # 如果显示版本 1,转换为 WSL 2
    wsl --set-version Ubuntu-22.04 2
  2. 增加资源分配

    # 在 .wslconfig 中
    [wsl2]
    memory=8GB
    processors=4
  3. 优化文件系统位置

    # 将项目放在 Linux 文件系统中
    # 推荐:~/projects
    # 不推荐:/mnt/c/Users/...

问题 2:文件操作缓慢

解决方案

  1. 使用 Linux 文件系统

    • 避免在 /mnt/c/ 下进行大量文件操作
    • 将项目文件放在 ~/ 目录下
  2. 优化挂载选项

    # 在 /etc/wsl.conf 中
    [automount]
    options = "metadata,umask=22,fmask=11"
  3. 使用符号链接

    # 创建符号链接
    ln -s /mnt/c/Users/Username/Documents ~/Documents

问题 3:内存不足

解决方案

  1. 增加内存分配

    # 在 .wslconfig 中
    [wsl2]
    memory=8GB
    swap=4GB
  2. 检查内存使用

    free -h
    top
  3. 清理内存

    # 清理缓存
    sudo apt clean
    sudo apt autoremove

文件系统问题

问题 1:文件权限显示为 777

原因:Windows 文件系统不支持 Linux 文件权限

解决方案

  1. 配置挂载选项

    # 在 /etc/wsl.conf 中
    [automount]
    options = "metadata,umask=22,fmask=11"
  2. 将文件复制到 Linux 文件系统

    cp /mnt/c/file.txt ~/file.txt
    chmod 644 ~/file.txt

问题 2:无法删除文件

解决方案

  1. 检查文件权限

    ls -l file.txt
  2. 修改权限

    chmod 755 file.txt
    # 或
    sudo chmod 755 file.txt
  3. 强制删除

    sudo rm -f file.txt

问题 3:符号链接不工作

解决方案

  1. 检查符号链接

    ls -l link_name
  2. 创建绝对路径符号链接

    ln -s /absolute/path/to/target link_name
  3. 在 Windows 中创建符号链接

    # 需要管理员权限
    New-Item -ItemType SymbolicLink -Path "link" -Target "target"

权限问题

问题 1:Permission denied

解决方案

  1. 检查文件权限

    ls -l file.txt
  2. 修改权限

    chmod +x script.sh
    # 或
    sudo chmod +x script.sh
  3. 使用 sudo

    sudo command

问题 2:无法写入文件

解决方案

  1. 检查目录权限

    ls -ld directory
  2. 修改目录权限

    chmod 755 directory
    # 或
    sudo chmod 755 directory
  3. 修改文件所有者

    sudo chown username:username file.txt

问题 3:sudo 需要密码

解决方案

  1. 配置无密码 sudo

    sudo visudo
    # 添加:
    username ALL=(ALL) NOPASSWD: ALL
  2. 将用户添加到 sudo 组

    sudo usermod -aG sudo username

Docker 相关问题

问题 1:Docker 命令未找到

解决方案

  1. 检查 Docker Desktop 是否运行

    • 查看任务栏 Docker 图标
  2. 启用 WSL 集成

    • Docker Desktop → Settings → Resources → WSL Integration
    • 启用 “Enable integration with my default WSL distro”
  3. 重启 WSL

    wsl --shutdown
    wsl

问题 2:无法连接到 Docker daemon

解决方案

  1. 重启 Docker Desktop

    • 右键任务栏 Docker 图标 → Restart
  2. 检查 Docker 服务

    # 在 WSL 中
    docker ps
  3. 重启 WSL

    wsl --shutdown
    wsl

问题 3:Docker 容器无法访问网络

解决方案

  1. 检查 Docker 网络

    docker network ls
  2. 重启 Docker Desktop

  3. 检查防火墙规则

    Get-NetFirewallRule | Where-Object DisplayName -like "*Docker*"

通用故障排查步骤

1. 检查 WSL 状态

# 查看所有发行版状态
wsl --list --verbose
 
# 查看 WSL 版本
wsl --version
 
# 查看 WSL 状态
wsl --status

2. 重启 WSL

# 关闭所有 WSL 实例
wsl --shutdown
 
# 重新启动
wsl

3. 检查日志

# 查看 Windows 事件日志
Get-WinEvent -LogName System | Where-Object {$_.ProviderName -like "*WSL*"}
 
# 在 WSL 中查看系统日志
journalctl -xe

4. 更新 WSL

# 更新 WSL
wsl --update
 
# 检查更新
wsl --status

5. 重置发行版

# 导出发行版
wsl --export Ubuntu-22.04 backup.tar
 
# 注销发行版
wsl --unregister Ubuntu-22.04
 
# 重新导入
wsl --import Ubuntu-22.04 C:\WSL\Ubuntu-22.04 backup.tar

获取帮助

官方资源

诊断信息

# 收集诊断信息
wsl --status
wsl --list --verbose
systeminfo | findstr /C:"System Type"

📚 参考资源


返回 WSL 知识体系

WSL 故障排查 问题解决