ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

WSL2安装Ubuntu完整指南:从虚拟化原理到开发环境配置

WSL2安装Ubuntu完整指南:从虚拟化原理到开发环境配置 前后折腾了几天到了第六周才总算把 WSL2 和 Ubuntu 的组合跑通。如果你也正在 Windows 上想装一套 Linux 环境来写代码、跑脚本、试 Docker或者只是单纯想体验一下 Ubuntu 而不愿意直接装双系统那这篇把我完整踩坑过程梳理出来的记录应该能帮你省下不少时间。标题虽然是“【第六周】WSL2安装Ubuntu”但看完这篇你会发现真正耗时间的从来不是安装命令本身而是装完之后的系统初始化、环境配置、网络问题和各种莫名其妙的报错。我会从最基础的原理讲起把安装步骤、常见坑位、配置优化、进阶玩法一条龙讲透争取让你一个下午就能跑通我花了六周才彻底搞明白的流程。1. 为什么第六周才装上WSL2先搞清楚它是给谁用的1.1 WSL2是虚拟机还是容器跟VMware、双系统差在哪在动手安装之前我觉得有必要先把 WSL2 的定位说清楚因为很多人对它有一个模糊的认知以为 WSL2 是 Windows 里的一个 Linux 模拟器或者只是一个增强版终端。实际上 WSL2 是一个轻量级的、高度定制的虚拟机它的核心是一个跑在 Hyper-V 虚拟机平台上的真实 Linux 内核。我用一个生活化的类比Windows 是房子WSL2 是在房子里单独隔出来的一间精装次卧。这间次卧有自己独立的地基Linux 内核、独立的门禁文件系统隔离但它进出大门用的还是主屋的通道Windows 的网络栈和文件系统互通机制。相比之下VMware 虚拟机是你花钱租了隔壁另一套房子完整的独立操作系统每次进去都要穿过走廊虚拟机管理软件做硬件虚拟化而双系统呢是同一套房子里只有一间房想从 Windows 切到 Ubuntu 必须先把当前房间清空退出来然后重新开锁进去。这个差异带来的直接体验是WSL2 启动时间通常只要几秒内存占用比完整虚拟机小得多而且你能在 Windows 文件管理器和 WSL2 之间直接拖文件、直接调用 VS Code、直接用 Windows 上的浏览器访问 WSL2 里跑的服务。对于绝大多数开发场景这间“次卧”已经足够。1.2 装它之前必须满足的三个条件第一部分要讲的“前置条件”是我踩过的第一个坑网上很多教程上来就让你敲命令但根本没提你的机器得先满足前提。我总结下来有三个条件缺一不可。第一操作系统版本不能太老。WSL2 需要 Windows 10 版本 2004 及以上或者 Windows 11。Win11 上体验最好因为后面要讲的 WSLg 图形界面支持和 systemd 支持都更完善。如果你还在 Win10 老版本先更新系统再折腾 WSL不然装到一半各种功能组件对不上号报错会非常难受。第二CPU 虚拟化必须在 BIOS 里打开。这一步很多人容易忽略。你可以在任务管理器-性能-CPU 里看右下角“虚拟化”一栏是否显示“已启用”如果是“已禁用”就得重启进 BIOS戴尔按 F2、联想按 F1/F2、华硕按 Del 之类的找到 Intel VT-xIntel 平台或 SVM ModeAMD 平台打开。这一步不做后面一定会遇到“此计算机上未启用虚拟化”的报错。第三Windows 的“虚拟机平台”和“适用于 Linux 的 Windows 子系统”这两个功能得开启。这个可以直接用命令来启用我后面会给出实测的完整命令流程不用去“启用或关闭 Windows 功能”窗口里手动勾选。这三个条件都满足之后安装的本体其实很简单难的是后面怎么让它好用。2. 一条命令装完和手动装两条路我都走过2.1 最快路径wsl --install 全自动安装如果你用的是 Win10 2004 或者 Win11并且系统比较新那最省事的安装方式是一条命令直接搞定。用管理员身份打开 PowerShell 或者 Windows Terminal执行wsl --install这条命令会自动完成三件事启用 WSL 和虚拟机平台功能、下载并安装最新版本的 WSL 内核、默认安装 Ubuntu 发行版默认商店头像。执行完之后系统会提示你重启电脑。重启完Ubuntu 会自动走初始化流程弹出终端让你创建用户名和密码。但这里我要特别提醒一个坑wsl --install在部分网络环境下会卡在“正在下载”这一步很久尤其是商店下载比较慢的时候。第一次我执行完等了十几分钟没动静一度以为电脑卡死了。如果遇到这种情况不用干等可以另外开一个窗口手动把发行版安装包下载好后用离线方式装具体做法我放在 2.4 小节讲。2.2 手动路径先开Windows功能再装发行版如果你的系统版本比较旧或者wsl --install命令在新系统上反而遇到奇怪问题那手动安装路线更稳。我第二次重装就是走的手动路线整个流程可以拆成三步。第一步以管理员身份打开 PowerShell依次执行下面两条命令分别启用“适用于 Linux 的 Windows 子系统”和“虚拟机平台”dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart第二步重启电脑之后在管理员 PowerShell 里把 WSL2 设置为默认版本wsl --set-default-version 2第三步安装发行版。如果你已经装好了 Ubuntu但不确定用的是 WSL1 还是 WSL2可以用后面要讲的版本验证命令确认并转换版本如果还没装可以从 Microsoft Store 里搜索 Ubuntu 安装也可以用wsl --install -d Ubuntu命令指定发行版安装。2.3 版本验证装完先确认是在WSL2而不是WSL1这块看起来小但直接影响你后面能不能用 Docker、CUDA 这些功能。我第一次装完就没检查后面一度跑容器各种不顺才发现系统自动装成了 WSL1。虽然 WSL1 和 WSL2 都是 WSL但内核架构完全不一样性能表现和使用场景差别很大。装完之后在 PowerShell 里执行wsl -l -v看到类似这样的输出就说明没问题NAME STATE VERSION * Ubuntu Running 2如果 NAME 那一行 VERSION 显示的是 1那就执行下面的命令把它转换成 WSL2wsl --set-version Ubuntu 2这个转换过程需要一点时间中间会提示正在转换等它跑完就行。要特别提醒的是一旦以后遇到某些服务没法启动先查一下是不是某个发行版处于 WSL1 状态这是排查效率最高的第一步。2.4 离线安装包的补充方案热搜词里出现了“wsl2离线安装包”和“用powershell命令行安装wsl2太慢”看来不少人在这步被网络难住了。实测下来WSL2 本体和发行版其实是分开的两个下载环节。如果你卡在某一步可以考虑离线包方案去微软官网下载“适用于 x64 计算机的 WSL2 Linux 内核更新包”并安装Ubuntu 发行版则可以直接从 Ubuntu 官网或者一些镜像站下载 appx 安装包下载完之后在 PowerShell 里执行Add-AppxPackage .\Ubuntu.Appx这种离线路线在网络状况不好的时候非常救急而且版本可以自己指定不容易出现“商店装到一半失败”的问题。3. 装完系统第一天换源、升级、设置root密码3.1 为什么要换国内镜像源Ubuntu 装好之后第一件真正要紧的事不是急着装软件而是换软件源。默认配置下apt 指向的是官方源服务器而这个服务器从国内访问的速度时好时坏装个普通的编译依赖都可能卡半天甚至直接超时报错。换源的方法很简单用我常用的阿里云镜像为例。先备份原始配置然后修改 sources 文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo nano /etc/apt/sources.list在文件里把原来的地址整体替换掉。新版本的 Ubuntu 源配置格式可能有变化统一套路是把archive.ubuntu.com和security.ubuntu.com换成mirrors.aliyun.com。如果你不想手动一行行改也可以用 sed 命令批量替换sudo sed -i s//.*archive.ubuntu.com//mirrors.aliyun.comg /etc/apt/sources.list sudo sed -i ssecurity.ubuntu.commirrors.aliyun.comg /etc/apt/sources.list清华源、中科大源也都行选哪个按自己网络实测来没有绝对的好坏。替换完执行sudo apt update你会立刻感受到速度差别这一步做完后面所有的 apt 安装体验才会正常。3.2 系统更新这句命令是每天的开场白换完源之后顺手把系统更新到最新。update是更新软件包索引upgrade才是真正升级已安装的软件包理解这两个命令的区别很重要sudo apt update sudo apt upgrade -y我建议这两个命令最好在装完系统当天就跑一遍因为基础镜像里的软件包不一定是最新有些安全补丁和兼容性修复不升级不生效。升级过程中如果看到类似“配置文件需不需要更新”的交互提示一般情况直接保持默认即可。这里也顺便解决一个新手经常有的疑问要不要时不时跑sudo apt upgrade我的习惯是一周一次频率太高意义不大太低容易积累大量待升级包到时候升级可能会有冲突。3.3 超级管理员切换和root密码热搜词里“Ubuntu 怎么切换到超级管理员以及密码是多少”这条热度很高说明这是几乎每个刚接触 Ubuntu 的人都会卡一下的点。这里我先说清楚概念Ubuntu 安装时创建的那个用户是普通用户但它默认在 sudo 用户组里所以它有权通过 sudo 临时用管理员权限执行命令。而 root 用户是系统真正的超级管理员Ubuntu 默认不给 root 设置密码也没有让你直接在图形界面登录 root 的入口这是 Ubuntu 的安全设计和 Windows 的 Administrator 概念不完全一样。如果你确实需要设置 root 密码在当前用户终端里执行sudo passwd root系统会让你先输入当前用户的密码sudo 验证然后设置一个新的 root 密码。设置成功之后你可以执行su - root切换到 root 用户。这里要注意日常使用我不太建议经常用 root权限太大容易出问题。真正需要管理员权限时在每个命令前加sudo就够了。如果你装完某个软件发现“权限不够”第一反应不应该是切 root而是想想这个软件是不是真需要 root 权限以及命令前面有没有加 sudo。4. 日常使用优化内存限制、磁盘瘦身、把系统挪到D盘4.1 .wslconfig限流避免WSL2吃掉全部内存WSL2 默认的内存管理策略是能用多少用多少Windows 物理内存空闲时会逐渐分配给 WSL2这导致两个问题一个是运行大型编译任务时 WSL2 内存占用飙升另一个是 Windows 本机可能因此变得卡顿。我在实际使用中就有过一次跑测试脚本发现 Windows 桌面卡到鼠标都飘的经历后来查内存发现 WSL2 占掉了 12GB。解决办法是在 Windows 用户目录下C:\Users\你的用户名\创建一个名为.wslconfig的文本文件然后写入[wsl2] memory8GB processors4 swap2GB localhostForwardingtrue参数含义分别是WSL2 最大内存 8GB、最多使用 4 个 CPU 核心、交换分区大小 2GB、允许 localhost 转发这样 Windows 浏览器能直接访问 WSL2 里启动的 Web 服务。配置好之后在 PowerShell 里执行wsl --shutdown重启 WSL2 让配置生效然后用free -h命令查看确认。这个配置文件给我的启发是WSL2 虽然有默认策略但你要根据自己电脑的实际配置主动给它“定规矩”尤其内存小于 16GB 的机器限流之后 Windows 的整体流畅度会明显改善。4.2 把发行版挪到非系统盘导入导出的正确姿势C 盘空间不足是另一个高频痛点。WSL2 的虚拟磁盘文件ext4.vhdx默认存放在 C 盘平时没感觉跑一段时间就会发现 C 盘空间悄悄缩水了十几个 GB。而且 Ubuntu 里那些缓存apt 缓存、Docker 镜像等都很占地方。把整个 Ubuntu 发行版从 C 盘搬到 D 盘操作不复杂核心命令是三连wsl --shutdown wsl --export Ubuntu D:\wsl\ubuntu-backup.tar wsl --unregister Ubuntu wsl --import Ubuntu D:\wsl\ubuntu D:\wsl\ubuntu-backup.tar --version 2第一行先把 WSL2 停掉第二行把当前的 Ubuntu 系统导出成一个备份压缩包第三行注销掉原来的发行版注意这个操作会删除原系统但因为我们已经有 tar 备份了第四行从备份包重新导入到 D 盘指定目录。--version 2保证导入后仍然是 WSL2 架构。这里有一个非常容易踩的坑通过wsl --import导入的发行版默认登录用户会变成 root而不是你之前的用户名。解决办法是在 Ubuntu 终端里把当前用户设置为默认用户sudo nano /etc/wsl.conf在[user]小节下写[user] default你的用户名保存后wsl --shutdown再重启一次就恢复正常。另外热词里“wsl2删除”对应的就是上面那行wsl --unregister如果想彻底删掉某个发行版这条命令最干净不过记得先备份因为你删掉的发行版不会进回收站。4.3 图形界面没有桌面环境也能跑GUI程序热搜词里有“wsl2安装图形化界面”、“wsl2 ubuntu 22.04 ros2”。关于 WSL2 里要不要装完整桌面我的建议是如果你只在 WSL2 里跑开发工具、写代码、起服务完全没必要装桌面环境但如果你的目标是 ROS2 仿真、Qt 开发或者就是想体验 Linux 图形软件也不用急着装整个 Ubuntu 桌面。Win11 自带的 WSLg 已经能原生运行 GUI 应用了前提是系统更新到较新版本并且 WSL2 状态正常。你只需要在 Ubuntu 里装一个图形软件比如sudo apt install gedit gedit窗口会直接弹在 Windows 桌面上看起来就像 Windows 原生程序一样。这套机制是通过 WSLg 在 Windows 里起了一个配套的 Wayland/X11 环境省去了额外配置 X Server 的麻烦。如果你用的是 Win10那需要另外安装或配置 WSLg配合 VcXsrv 这类工具也能跑。想跑支持的 GUI 应用时直接用命令行启动就行不用装桌面。如果你确实需要完整桌面体验可以安装ubuntu-desktop或者xubuntu-desktop这类元包然后用 VcXsrv / RDP 连接。这种方法可行但性能体验一般资源开销不小。我的建议是先想清楚自己的目标是“能在 WSL2 里干活”还是“在 Windows 里体验桌面版 Ubuntu”如果是后者直接用 VMware 完整虚拟机更省心。另外中文输入法这块搜狗输入法在 WSL2 图形界面里的安装是个独立的坑涉及 fcitx 输入法框架和 X11 环境变量一两句话讲不完建议先用默认输入法或者先不折腾等核心开发流程跑顺了再单独处理。5. 启动失败、连不上网、systemd不生效六周里的排错记录5.1 “此计算机上未启用虚拟化”先看BIOS再看Windows功能第六周里最让我崩溃的一个报错是启动 WSL2 时提示“此计算机上未启用虚拟化”。这个报错不像代码报错那样有具体行号完全靠猜所以我把排查链路完整记录在这里。第一步先在任务管理器-性能-CPU 看“虚拟化”状态。如果显示“已禁用”那就直接重启进 BIOS 打开 Intel VT-x / AMD SVM这一步没有替代方案。第二步确认 Windows 功能里的“虚拟机平台”是否开启可以执行dism.exe /online /get-featureinfo /featurename:VirtualMachinePlatform看State是否为Enabled。第三步如果前两步都正常再检查 Windows 安全中心-设备安全性-内核隔离的设置内存完整性打开时偶尔会影响虚拟化组件启动可以临时关掉试试。这个排查链路的顺序非常重要很多人一上来就查网络或者重装浪费大量时间实际 90% 的“未启用虚拟化”都是前两道关卡的问题。5.2 WSL2启动报一串错误码给内核和系统补丁条WSL2 启动报错的另一种常见表现是弹出一串错误码比如Error code: Wsl/0x80370102、Wsl/0x80070003。这类错误码含义很隐晦我先说一个盲目重装之前的通用解法更新 WSL2 内核和管理组件。在管理员 PowerShell 里执行wsl --update这个命令会拉取最新的 WSL 版本并更新内核。然后wsl --shutdown wsl -l -v再试一次启动。如果还不行检查 Windows Update 里有没有系统补丁待安装尤其是涉及“虚拟机平台”的补丁比如 Win10 特定版本需要安装 “Microsoft 更新 KB5004296” 之后 WSL2 才能稳妥运行。这类问题千奇百怪但主线思路就是“先更新 WSL 组件、再更新系统补丁、最后考虑重装发行版”。5.3 Ubuntu里的SSH连不上默认根本没装sshdWSL2 里你可能会遇到这种情况Windows 终端访问 Ubuntu 正常但只要你想从其他机器 SSH 连进来甚至想用 Xshell 连 WSL2都会失败。根本原因很简单Ubuntu 默认镜像里根本没有安装和启动 SSH 服务端。你可能以为 Ubuntu 作为 Linux 肯定自带 sshd但 WSL2 的默认镜像做了裁剪顺手帮你省掉了网络监听服务。解决方式sudo apt install openssh-server sudo systemctl enable ssh --now安装完成之后用sudo service ssh status确认状态。如果要允许 root 通过 SSH 登录还要修改/etc/ssh/sshd_config里的PermitRootLogin选项但出于安全考虑我不推荐直接开 root SSH建议用普通用户登录再用 sudo。另一点是 Windows 防火墙如果 WSL2 做端口映射后还是连不上检查 Windows 防火墙入站规则是否放行了 22 端口。5.4 systemd不生效WSL2默认压根不跑init很多人装完 WSL2 后执行systemctl status docker之类的命令会看到System has not been booted with systemd as init system (PID 1)的报错。这个现象在 WSL1 时代非常普遍因为 WSL1 根本不跑 systemd而是用自己的 init 机制而 WSL2 虽然作为轻量虚拟机没有完整跑 systemd 也不算致命但如果你后面要跑 Docker 这类依赖 systemd 服务的软件没有它就会非常别扭。新版 WSL2 已支持在/etc/wsl.conf里开启 systemd。具体做法sudo nano /etc/wsl.conf在[boot]小节下加一行[boot] systemdtrue保存后执行wsl --shutdown然后重新进入 Ubuntu执行systemctl list-units --typeservice | head -20验证只要能列出 service 列表就说明 systemd 已经作为 1 号进程跑起来了。这个配置解决了没有 systemd 导致各种服务无法自启的问题属于 WSL2 进阶使用的分水岭操作。顺带提一句如果你发现/etc/wsl.conf改了之后不生效优先检查wsl --update是否把配套组件更新到支持 systemd 的版本Win10 的老版本 WSL 对 systemd 支持确实不佳。6. 从终端到生产力Docker、CUDA与日常开发的承载能力6.1 WSL2里装Docker和Docker Desktop如何配合WSL2 集成 Docker 有两种路线一种是在 Windows 上装 Docker Desktop用 WSL2 backend 来运行容器另一种是在 Ubuntu 发行版内部直接装 Docker Engine。两条路线我都试过如果只是课程实验建议 Ubuntu 里直接apt install docker.io或者用官方脚本安装 Docker Engine如果你需要图形化界面管理容器、要在 Windows 和 Linux 之间共享容器上下文那 Docker Desktop 更方便。在 Ubuntu 内部安装 Docker Engine 之后需要把当前用户加入 docker 用户组才能免 sudo 使用 Dockersudo usermod -aG docker $USER然后重新登录或者重启 WSL2使组权限生效。这里注意WSL2 环境下 Docker 的存储驱动默认走 vhdx 文件和 Windows 文件系统互通性没有原生那么强所以不要在 Windows 目录里跑大量文件 IO 型容器操作会很慢。把项目代码放在 Linux 文件系统~/project下跑 Docker 是最佳实践。6.2 WSL2能用CUDA吗深度学习环境的另一条路热度词里有“wsl2安装cuda”说明不少人想在 Windows 上直接用 WSL2 做深度学习或 CUDA 加速。好消息是 WSL2 官方支持 NVIDIA CUDA而且做法和物理 Linux 机器不太一样不需要在 Ubuntu 里安装完整的 NVIDIA 驱动只需要确保 Windows 侧装了较新的 NVIDIA 驱动然后在 Ubuntu 内部安装 CUDA Toolkit 即可。具体流程大致是Windows 装好对应显卡驱动后到 NVIDIA 官网下载 WSL2 版 CUDA Toolkit 安装包按官方指引安装到 Ubuntu 里然后运行nvidia-smi验证。实测下来WSL2 里的 CUDA 性能接近原生 Linux 环境非常适合在交互式开发阶段跑小规模模型。如果你是深度学习初学者不用急着折腾双系统WSL2 CUDA 的方案已经足够日常实验使用。6.3 实用小配置开发工作流里值得做的几件事安装和排错都搞定之后再分享几个让日常开发体验提升不少的小配置设置默认发行版如果你以后装了多个发行版用wsl --set-default Ubuntu设置默认进入的发行版。直接用 VS Code Remote在 Windows 上打开 VS Code装好 Remote-WSL 扩展然后code .就能在 Ubuntu 里开发文件读写走 Linux 文件系统速度非常快。配置 zsh oh-my-zsh如果原生的 bash 用腻了sudo apt install zsh再配合 oh-my-zsh 和主题插件终端颜值和效率直接提升一个档次。Windows Terminal 图标和字体Windows Terminal 配合 Cascadia Code / Nerd Fonts 克隆字体WSL2 的终端体验几乎超越原来任何终端工具。一个小提示WSL2 的 localhost 转发让它天然适合跑 Web 开发比如在 Ubuntu 里python3 -m http.server启动一个服务Windows 浏览器直接访问localhost:8000就能看到内容完全不需要额外配置端口转发。如果你想从同一局域网的手机或另一台电脑访问这个服务那就需要额外做端口转发或者设置 WSL2 的网络模式了这部分更复杂以后有机会单独开一篇。折腾 WSL2 这段时间我最后悔的是刚开始没有先去理解它和虚拟机、双系统的区别导致前面几周一直在错误的方向上浪费时间。如果你也是 Windows 环境、想快速用上 Linux 生态工具链WSL2 Ubuntu 是当前性价比最高的方案。建议你装完系统后第一件事先把软件源换好、系统更新跑一遍再根据自己是否需要 Docker、CUDA、图形界面来做后续扩展。只要把前四章的基础配置做扎实后面遇到的绝大多数问题都有迹可循不会像我当时一样一上来就卡在虚拟化没开启和版本不对这两个大坑里。
返回列表