在 Windows 11 电脑上安装 Linux 子系统(WSL2)的详细步骤


🔧 一、准备工作

  1. 启用虚拟化技术(默认已启用)
    • 重启电脑,进入 BIOS/UEFI(开机时按 Del/F2/F10 等键,因主板而异)。
    • 在高级设置中启用 Intel VT-xAMD-V 虚拟化支持。
    • 保存设置并重启进入 Windows。
    • 在任务管理器中确认已启用虚拟化技术。
    • image-20250816163037130
  2. 启用 Windows 功能
    • 在任务栏搜索 功能 或在控制面板中打开 启用或关闭 Windows 功能
    • 勾选 Hyper-V适用于 Linux 的 Windows 子系统 点击确定,按照提示重启电脑。

⚙️ 二、安装

  1. 通过终端安装默认的 Ubuntu 发行版

    • 以管理员身份打开 PowerShell(右键开始菜单 → “终端管理员”):

      1
      wsl --install
    • 此命令将启用运行 WSL 并安装 Linux 的 Ubuntu 分发所需的功能。

    • 安装过程中会提示设置用户名和密码。

  2. 也可以安装其他 Linux 发行版

    • 在终端中输入命令可获取所有可安装的发行版:

      1
      wsl --list --online
      image-20250816165127444
    • 通过命令安装系统如 kali-linux:

      1
      wsl.exe --install kali-linux
  3. 当国内网络导致下载问题时

    • 在命令后添加参数 --web-download

      1
      2
      wsl.exe --install --web-download
      wsl.exe --install kali-linux --web-download

🐧 三、子系统的启动和停止

  1. 查看已安装的子系统列表

    • 在 PowerShell 中执行命令:

      1
      wsl --list -v
      image-20250816170857028
    • 包括系统名称、默认子系统、系统状态等基本信息。

    • 可更改设置默认子系统:

      1
      wsl --set-default kali-linux
  2. 启动子系统

    • 在终端的标签处下拉菜单选择需要的系统点击即可快速启动子系统。

      image-20250816171208459
  3. 结束子系统

    • 直接关掉当前终端窗口标签页即可直接关闭子系统。

🔍 四、卸载备份与恢复

  1. 卸载命令

    • 终端中执行卸载命令:

      1
      2
      wsl --unregister Ubuntu
      # Ubuntu 为待卸载系统名,可由 wsl -l -v 命令获取
  2. 备份命令

    • 指定文件夹运行终端,执行备份命令:

      1
      2
      3
      wsl --export Ubuntu ubuntu.tar
      # Ubuntu 为待备份系统名,由 wsl -l -v 命令获取
      # ubuntu.tar 为备份文件名与压缩格式
  3. 备份导入

    • 终端中执行导入命令:

      1
      2
      3
      4
      wsl --import Ubuntu2 D:/wsl C:\Users\<username>\Desktop\ubuntu.tar
      # Ubuntu2 为新定义的系统名
      # D:/wsl 为导入后系统创建 vhdx 文件的路径
      # C:\Users\<username>\Desktop\ubuntu.tar 为备份文件的地址

⚡ 五、高级配置(可选,未测试)

  1. 迁移存储位置到非系统盘

    • 关闭 WSL:wsl --shutdown

    • ext4.vhdx 文件(默认位于 C:\Users\<用户名>\AppData\Local\Packages\<发行版文件夹>\LocalState)剪切到目标盘(如 D:\WSL)。

    • 管理员 CMD 中创建符号链接:

      1
      2
      mklink /J "原路径" "D:\WSL"
      ```:cite[2]:cite[7]。
  2. 安装 SSH 服务(支持远程连接)

    • Linux 子系统中执行:

      1
      2
      sudo apt install openssh-server
      sudo vi /etc/ssh/sshd_config

      修改以下两项:

      1
      2
      PermitRootLogin yes
      PasswordAuthentication yes

      重启服务:sudo service ssh restart

  3. 安装图形化桌面(如 GNOME)

    • 安装桌面环境:

      1
      sudo apt install ubuntu-desktop
    • 安装远程桌面服务:

      1
      2
      3
      4
      sudo apt install xrdp
      sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini # 避免端口冲突
      echo "gnome-session" > ~/.xsession
      sudo systemctl restart xrdp
    • Windows 端按 Win+R 输入 mstsc,连接 localhost:3390


⚠️ 六、常见问题解决

  • WSL2 安装报错:确保已开启 BIOS 虚拟化,且 Hyper-V 未占用资源。
  • 启动卡顿:检查系统更新(设置 → Windows 更新),或手动更新内核包。
  • 文件互传:直接通过 \\wsl$ 访问,或在 Linux 中操作 /mnt/c 下的 Windows 文件。

💎 总结

通过上述步骤,你的 Windows 11 已完整集成 Linux 子系统,可无缝使用命令行工具、开发环境及图形界面。后续建议:
1️⃣ 定期运行 sudo apt update && upgrade 保持更新;
2️⃣ 使用 VS Code 安装 Remote - WSL 插件 提升开发效率;
3️⃣ 关键操作前备份数据(导出系统:wsl --export <发行版> <备份路径>)。

参考文档:微软官方 WSL 文档 | WSL2 内核更新包

(WSL)操作使用遇到问题

遇到权限访问问题:

如显示:PermissionError: [Errno 13] Permission denied: ‘/data’

表示没有访问/data的权限。

1
2
# 查看权限:
ls -ld /data

可能没有权限:

1
2
3
4
5
6
7
8
9
10
# 输出:
drwxr-xr-x 3 root root 4096 Jan 1 12:00 /data
# 表示:
# - 所有者(owner)是 root,只有 root 有写入权限。
# - 普通用户没有写入权限,因此会出现 Permission denied。

# 如果 /data 目录归你使用,可以将其所有者改为当前用户:
sudo chown -R $USER:$USER /data
# -R 表示递归修改 /data 及其下所有文件的所有者。
# $USER 会自动替换为你的用户名。

可能目录不存在:

1
2
3
4
5
6
# 输出:
ls: cannot access '/data': No such file or directory
# 表示目录不存在
# 创建目录命令(需要管理员所以使用sudo)
sudo mkdir /data
# 此时再设置权限

遇到Nvidia库文件找不到问题

如在进行训练时显示,如:

1
2
Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory
Aborted (core dumped)

表示:你的系统无法与 NVIDIA GPU 通信

这通常由以下三种情况导致:

  1. NVIDIA 驱动程序没有正确安装。 (最常见)
  2. NVIDIA 驱动程序已安装,但其库文件路径不在系统的动态链接器搜索路径中。
  3. 你在一个没有 GPU 支持的环境中运行(如某些 Docker 容器)。

先确认驱动程序已安装、执行nvidia-smi有正常显示。

确认库文件是否存在:

1
2
3
4
5
6
sudo find /usr -name "libcuda.so*"
# 有返回路径表示库文件存在,如
/usr/lib/wsl/lib/libcuda.so
/usr/lib/wsl/lib/libcuda.so.1
/usr/lib/wsl/lib/libcuda.so.1.1
/usr/lib/wsl/drivers/nvxii.inf_amd64_090d60b149e384f5/libcuda.so.1.1

检查环境变量输出是否为空:

1
2
echo $LD_LIBRARY_PATH
# 输出为空表示路径缺失

设置环境变量永久解决问题:

1
2
3
4
echo 'export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 再次检查环境变量输出
echo $LD_LIBRARY_PATH

代理使用问题

  1. windows下已经安装clash并已经启用系统代理。

  2. 确保clash已安装并启用tun代理模式。

  3. 测试windows下和wls下代理状态是否正常?

1
ping google.com