ARTICLE DETAIL

资讯详情

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

Windows 10 家庭中文版从零启用 WSL 2 全流程

Windows 10 家庭中文版从零启用 WSL 2 全流程 1. 家庭中文版用户想用 WSL 2到底卡在哪里先说说我自己的情况。单位发的笔记本预装的是Windows 10 家庭中文版平时做开发、跑脚本、搭点小服务命令行环境一直不太顺手。早几年用 Cygwin 和 Git Bash 凑合后来转 WSL体验提升一大截。等到WSL 2出来文件系统性能、完整的 Linux 内核、Docker 支持都香了不少结果在家庭版上折腾的时候一路全是坑。网上大部分教程默认你是专业版或者企业版写得云淡风轻打开启用或关闭 Windows 功能勾两个框重启完事。可家庭版用户打开那个面板一看Hyper-V 那一项压根不存在很多人当场就懵了。这篇文章就是把我踩过的坑、试过的路子一次性讲清楚。目标很明确在 Windows 10 家庭中文版上从零把 WSL 2 跑起来包括启用功能、装内核、装发行版、配置内存和存储以及后面遇到各种报错怎么救。适合的人群是用家庭版笔记本做开发的程序员、需要 Linux 命令行跑数据的学生、想在自己电脑上搭个 nginx PHP 本地环境的运维和前端以及所有被家庭版不支持这句话劝退过的人。需要说明的是家庭版确实缺一些东西但缺的不是 WSL 2 本身而是给人看的那个 Hyper-V 管理界面。搞清楚这一点后面就顺了。我先把结论摆出来Windows 10 家庭版完全可以跑 WSL 2前提是系统版本够新、CPU 虚拟化开着、并且用命令行去启用那两个可选功能而不是指望图形界面里的复选框。下面我按实际操作顺序拆开讲。2. 动手之前先做四项体检很多人一上来就敲命令结果报一堆莫名其妙的错误。我后来养成的习惯是先体检再动手。这四步花不了十分钟能省掉后面两小时的抓瞎。2.1 系统版本和内部版本号WSL 2 对系统版本有硬性要求这个绕不过去。按下Win R输入winver回车会弹出版本信息窗口。真正要看的是括号里的内部版本号不是外面那个版本 22H2。内部版本号WSL 2 支持情况操作建议18362 以下如 17134、17763不支持先升级系统否则无解18362 / 183631903 / 1909支持但部分功能受限可以装建议尽快升级到 2004 以上19041 及以上2004 / 20H2 / 21H1 / 21H2 / 22H2完整支持直接用最省心我在一台老机器上遇到过 1909 的镜像装完发行版之后wsl --set-version一直提示内核组件需要更新升级到 22H2 之后一次通过。所以如果你还在 1903 或者 1909优先考虑把系统补丁打全别硬刚。2.2 确认 CPU 虚拟化已经打开WSL 2 底层跑的是一个轻量级虚拟机所以 CPU 的虚拟化指令集必须开着。检测方法特别简单Ctrl Shift Esc打开任务管理器切到性能标签点左边最下面的CPU看右下角有没有虚拟化已启用这一行。如果显示已禁用那就得进 BIOS/UEFI 里找。Intel 平台的名字一般叫Intel Virtualization Technology、VT-x、VanderpoolAMD 平台一般叫SVM Mode、AMD-V。名字五花八门各家主板厂商都不一样笔记本通常是开机按F2或F10联想有些机型需要按Fn F2或者用侧面的 Novo 小孔。这一步没有捷径只能自己翻 BIOS 菜单。改完保存退出回到系统里再确认一次。注意部分品牌整机出厂时把虚拟化选项藏得比较深或者干脆屏蔽掉。如果 BIOS 里翻遍了都找不到可以先更新一次 BIOS 固件再说。2.3 关掉可能打架的虚拟化软件这一条特别容易被忽略。WSL 2 要用 Windows 的虚拟机平台如果你的机器上同时装了 VMware Workstation、VirtualBox、安卓模拟器这类软件它们可能已经抢占了虚拟化资源导致 WSL 2 起不来。典型症状是启动发行版时报0x80370102。我的做法是先临时退出或者卸载这些软件把 WSL 2 装好、验证能正常跑再一个个装回来测试兼容性。较新版本的 VMware 和 VirtualBox 对这种共存已经处理得不错但老版本确实会互相挤。另外 Windows 安全中心里的内核隔离 - 内存完整性在某些机器上也会干扰如果前面步骤都对却依然报错可以临时关掉它试一次。2.4 检查系统组件有没有损坏如果之前系统出过问题或者装过一些来路不明的优化工具系统组件可能已经不完整DISM 命令执行到一半会失败。保险起见先跑两条修复命令。以管理员身份打开 PowerShell 或者命令提示符sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth第一条扫描并修复系统文件第二条修复系统映像。两条都跑完再重启把地基打平。我在一台反复蓝屏过的机器上就是靠这两条命令救回来的否则后面的功能启用步骤怎么点都是失败。3. 用 DISM 命令启用两个核心功能准备工作做完进入正题。家庭版和专业版在这一步的差别最大也是最多人翻车的地方。3.1 图形界面在家庭版里为什么经常走不通专业版用户走的是这条路径控制面板 → 程序和功能 → 启用或关闭 Windows 功能然后在列表里勾选适用于 Linux 的 Windows 子系统和虚拟机平台。但家庭版的这个列表里往往看不到虚拟机平台这一项甚至有些版本连适用于 Linux 的 Windows 子系统都显示不全。不是功能不存在而是图形界面把它藏起来了。所以家庭版的正路是绕过图形界面直接用 DISM 命令行启用。DISM 是系统自带的部署映像服务和管理工具权限足够不管界面显不显示它都能把功能打开。3.2 两条命令逐字拆解以管理员身份打开 PowerShell 或命令提示符依次执行下面两条dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart参数的含义值得说一下理解了才不会瞎敲/online作用于当前正在运行的操作系统而不是某个离线镜像。/enable-feature启用功能对应还有/disable-feature。/featurename:xxx功能在系统内部的正式名称。第一个是 Linux 子系统支持第二个是虚拟机平台WSL 2 真正依赖的是第二个第一个是运行 WSL 的基础。/all如果这个功能有父级依赖一并启用。实测加上更省事。/norestart先别急着重启等两条命令都跑完再说。每条命令执行完最后会输出操作成功完成。如果提示找不到功能名称说明你的系统版本太老那个功能确实不存在回到第 2 章升级系统。3.3 重启和状态复核两条都成功之后必须重启这一点没有讨价还价的余地。重启完再做一次复核确认功能真的开了dism.exe /online /get-featureinfo /featurename:VirtualMachinePlatform输出里的状态应该是已启用。也可以用 PowerShell 的Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform来看。我一般还会顺手看一眼服务状态之前遇到过功能启用了但服务没起来的情况重启一次就好了。4. 装内核更新包把默认版本切到 2功能启用只是拿到了入场券WSL 2 需要一个独立的 Linux 内核组件这个组件不在系统镜像里得单独装。这是家庭版用户最容易漏掉的一步。4.1 内核更新包到底是个什么东西WSL 1 和 WSL 2 的架构完全不同。WSL 1 是微软自己写的一套系统调用翻译层把 Linux 的系统调用实时翻译成 Windows 的调用兼容性一般但轻量。WSL 2 干脆换了个思路跑一个真正的 Linux 内核放在一个经过高度优化的轻量虚拟机上。这个内核以.msi安装包的形式单独分发体积不大几步就装完。正因为它是独立组件所以不会随 Windows 更新自动装上去较新的系统会通过微软商店版的 WSL 分发但 Windows 10 老版本仍以 MSI 为主。搜索WSL2 Linux 内核更新包就能找到微软官方下载页选x64那个版本ARM64 设备的选 ARM64 版本。不确定自己是什么架构任务管理器 → 性能 → CPU看体系结构一行。4.2 安装顺序不能乱正确的顺序是先启用功能 → 重启 → 再装内核包。如果顺序搞反内核包装的时候会提示缺少依赖。双击.msi一路下一步装完不用重启。装完验证一下在命令行输入wsl --status能正常输出默认发行版、默认版本、内核版本这些信息就说明内核生效了。如果提示wsl不是内部或外部命令那说明第一个功能Linux 子系统没启用成功回去查第 3 章。4.3 设定默认版本并验证这一步是分水岭。执行wsl --set-default-version 2如果内核包没装这条命令会明确报错提示你需要更新内核组件——看到这个报错反而说明你找对地方了去装内核包就行。设置成功的输出是一行提示告诉你新安装的发行版会默认使用 WSL 2。这里有个细节值得提前说--set-default-version只影响之后新装的发行版对已经装好的旧发行版无效。如果你之前装过 WSL 1 的发行版需要单独升级wsl --list --verbose wsl --set-version Ubuntu 2第一条列出所有已安装的发行版注意看VERSION那一列第二条把指定的那个转成 WSL 2。转换过程本质上是一次容器导出加导入耗时可能比较久中间别断电Ubuntu 里装的软件包会原样保留但建议先备份重要数据。5. 装 Linux 发行版的三种路子前四步走完剩下就是装系统本身了。为什么要装个 Linux 发行版因为 WSL 只是一个兼容层真正让你敲ls、grep、apt的那些工具都在发行版里面。家庭版用户在这一步有三条路可选各有适用场景。5.1 走 Microsoft Store 安装最省事的方式。打开 Microsoft Store搜索 Ubuntu、Debian、Kali 之类的关键词点安装。装完在开始菜单里会出现一个入口第一次点开需要等它解压然后设置用户名和密码。家庭中文版可能遇到商店不可用或者登录异常的情况这时候别死磕直接走 5.2 或 5.3。另外要注意商店里装的发行版默认跟随你在第 4.3 步设置的默认版本所以顺序千万别搞反不然装出来还是 WSL 1。5.2 用 wsl --install 一条命令搞定系统版本在 2004 以上的话可以用wsl --install -d Ubuntu-d后面跟发行版代号。这条命令会自动完成启用功能 下载内核 安装发行版的全过程对新手最友好。不过有个坑它内部其实还是要走系统功能启用流程如果前面用 DISM 已经把功能开好了它会跳过并直接装如果系统版本偏老这条命令可能压根不认识--install参数会提示你把--install当发行版名字对待。看到这种报错别慌说明你的wsl版本太旧走 5.3。另外可以用wsl --list --online先看看有哪些可选的发行版这个列表来自官方源比在商店里瞎逛快得多。5.3 手动下载 appx 包离线安装这是我用得最多的一种专门对付商店打不开、或者需要批量部署的场景。流程是下载对应发行版的.appx安装包改后缀为.zip解压到某个目录然后双击里面的ubuntu.exe之类的可执行文件。有两个坑必须提醒解压路径不能包含中文和空格。以前版本的安装程序对路径处理有 bug路径里带着中文文件夹名启动时会直接闪退什么错误都不给你。我一般放在D:\WSL\Ubuntu这种纯英文路径下。第一次运行前不要挪动文件夹。安装程序会把当前目录作为系统根目录注册装完之后再移动会导致发行版找不到。用这种方式装完后还是要执行一次wsl --set-default-version 2确认版本再用wsl --list --verbose复核。6. 装完之后必须做的几项调优发行版能进去了不等于好用了。默认配置下有几个地方一定会让你难受尤其是内存占用和磁盘位置。6.1 换软件源和装基础工具刚装好的 Ubuntuapt update慢得让人想砸键盘。换成国内的镜像源会快很多编辑/etc/apt/sources.list把里面的域名换成镜像站点即可改之前先备份一份原文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git curl vim net-toolsbuild-essential里含 gcc、g、make几乎是必备net-tools提供ifconfig这些老工具调试网络很顺手。这一套下来大概几分钟之后的开发体验会顺畅很多。要搭本地 Web 环境的话sudo apt install nginx php-fpm就能把 nginx PHP 跑起来比在 Windows 上装一整套省事太多了。6.2 用 .wslconfig 限制内存和 CPU这是我认为最有价值的一项配置。WSL 2 默认会按比例吃掉宿主机内存我 16G 的笔记本上编译个大项目能吃掉七八个 GWindows 那边直接卡成幻灯片。解决办法是在用户目录下建一个配置文件C:\Users\你的用户名\.wslconfig注意文件名前面有个点。[wsl2] memory4GB processors2 swap2GB localhostForwardingtruememory限制最大内存processors限制 CPU 核心数swap设交换分区大小。改完必须执行wsl --shutdown完全关闭再重新进入才生效——光关窗口是不行的后台的虚拟机进程还在跑。这个参数没有标准答案我一般按宿主内存的 1/4 到 1/3来给跑编译和容器的时候再临时调大。6.3 发行版内部的 wsl.conf.wslconfig管的是 WSL 2 这个虚拟机整体wsl.conf管的是单个发行版内部的行为位置在/etc/wsl.conf。几个常用配置[user] defaultyourname [interop] enabledtrue appendWindowsPathtrue [boot] systemdtrue第一项设默认登录用户尤其是用wsl --import迁移过来的发行版默认会变成 root 登录一定要在这里改回来。第二项控制能不能在 Linux 里直接调用 Windows 的 exe比如notepad.exe、explorer.exe默认开启挺好用。第三项是启用 systemd让发行版里的服务管理方式和原生 Linux 一致这个需要比较新的 WSL 版本支持启用后用systemctl管 nginx、mysql 会很方便。6.4 把发行版挪到非系统盘C 盘空间紧张是很多人的痛点WSL 的虚拟磁盘文件动辄几个 G 甚至几十个 G。迁移的思路是导出 → 注销 → 导入wsl --shutdown wsl --export Ubuntu D:\wsl-backup\ubuntu.tar wsl --unregister Ubuntu wsl --import Ubuntu D:\wsl\ubuntu D:\wsl-backup\ubuntu.tar --version 2--unregister会删掉原来的发行版执行前一定要确认 tar 包导出成功可以用dir看看文件大小对不对。导入完成后别忘了回到 6.3 节把默认用户改回来否则你会发现自己变成了 root之前配的环境变量和别名全都不见了。我踩过这个坑还以为是配置文件丢了。顺带一提如果你需要在 WSL 里访问 Windows 侧的 USB 设备比如烧录开发板、接调试器可以了解一下 USB/IP 这套方案对应的 Windows 端转发工具它能把宿主机的 USB 设备映射进 WSL 2原理和网络共享设备类似配置稍微有点绕但能用。7. 常见问题排查速查表WSL 2 的报错信息大多很抽象全是十六进制代码。我把遇到过的整理成一张表遇到问题先对号入座。错误代码 / 现象根本原因解决办法0x8007019e没有启用适用于 Linux 的 Windows 子系统回到第 3 章用 DISM 启用后重启0x800701bc没装 WSL 2 内核更新包下载安装内核包再执行wsl --set-default-version 20x80370102CPU 虚拟化未开启或被其他虚拟化软件占用进 BIOS 开启 VT-x / SVM临时卸载 VMware、VirtualBoxWslRegisterDistribution failed发行版解压在中文路径或安装包损坏换成纯英文无空格路径重新解压wsl命令不存在子系统功能未启用或系统版本过低检查版本号重新执行 DISM 启用命令能进系统但没网DNS 解析异常或宿主机网络配置冲突查看/etc/resolv.conf必要时手动指定 DNS 并设置生成策略时间差了好几个小时WSL 与宿主机时钟同步失败执行wsl --shutdown后重进或在发行版内执行sudo hwclock -s修改 .wslconfig 无效只关了窗口虚拟机没真正停止执行wsl --shutdown确认wsl -l -v显示已停止7.1 网络不通的排查顺序网络问题最磨人。我的排查顺序是固定的先ping一个公网地址如果不通看/etc/resolv.conf里的 DNS 有没有内容如果文件是空的或者指向了一个奇怪的地址可以临时手动写一个公共 DNS 进去测试。cat /etc/resolv.conf sudo sh -c echo nameserver 8.8.8.8 /etc/resolv.conf如果这样能通说明是自动生成的配置有问题可以在.wslconfig或wsl.conf里关掉自动生成改成固定配置。另外如果你所在的网络环境对出站流量有严格限制某些端口被挡住也会表现为能解析但连不上这时候可以换成 HTTP 端口试试区别对待。7.2 磁盘空间和权限的小坑WSL 2 的虚拟磁盘文件是动态增长的删掉文件之后宿主机上的那个 vhdx 不会自动缩小。跑久了会发现它膨胀到几十个 G。压缩方法是先wsl --shutdown然后用diskpart挂载 vhdx执行compact vdisk。这个过程有点繁琐我一般半年做一次。还有一个常见问题在 Windows 里访问 Linux 文件用\\wsl$\Ubuntu\home\...这个路径速度尚可但反过来在 Linux 里操作/mnt/c/...下的文件会非常慢因为跨了文件系统。所以我的原则是项目代码放在 Linux 侧的 home 目录里需要给 Windows 工具用时再复制出去别长期在挂载点上做编译。7.3 几个实操心得别迷信一键脚本。网上有些号称自动配置 WSL 的脚本会顺手改一堆系统设置出问题后很难回滚。老老实实敲 DISM 命令每一步的结果你都能看到。善用wsl --shutdown这个万能钥匙。很多诡异问题——内存不释放、配置不生效、网络抽风、发行版卡死——第一反应都是 shutdown 再重进能解决八成。版本信息随手记。wsl --version、wsl -l -v、winver这三个输出在求助的时候一并贴出来比描述半天我装不上有用得多。重要数据不要只放在 WSL 里。虚拟磁盘是单文件一旦损坏整个发行版很难救。定期wsl --export导出一份 tar 存到别的盘这是我吃过亏之后雷打不动的习惯。家庭版不要装 Hyper-V。有人为了装 WSL 2硬去找 Hyper-V 的安装方法甚至用一些来路不明的解锁脚本把系统搞崩。其实 WSL 2 只需要虚拟机平台这一项Hyper-V 完全不需要千万别画蛇添足。这套流程我在三台家庭中文版的机器上走过最早那台是 1909现在是 22H2从第一次折腾到熟练大概花了一个周末。真正麻烦的从来不是命令本身而是不知道哪一步该跳过、哪一步不能跳过。按着顺序来遇到报错先查表再动手基本不会有走不通的情况。
返回列表