新闻详情

新闻详情

首页 / 资讯中心 / 详情

Windows10 安装 WSL2 全流程:初始化、避坑与调优

发布时间:2026/9/30 13:24:22来源:尧图网络
Windows10 安装 WSL2 全流程:初始化、避坑与调优
1. 先想清楚WSL到底能帮你省掉多少事Windows10上跑 Linux 这件事十年前的标准答案是在 VMware 或 VirtualBox 里装一台完整虚拟机五年后的答案是双系统而现在的答案绝大多数场景下都指向WSL。我自己是从 WSL 还在 Beta 阶段就开始用的中间踩过的坑、重装过多少次已经数不清了。这篇文章不打算复述官方文档里那几句干巴巴的说明我想做的是把在 Windows10 上装 WSL这件事从头到尾拆开讲透——包括你到底该不该装、装哪一版、网络不好怎么绕、装完必须做哪些初始化、以及那些只有真正用过才会遇到的坑。先说清楚它适合谁。如果你是全栈开发、需要跑 Python 脚本、写 Django 服务、做数据清洗、用 binwalk 分析固件、跑 Redis 做本地缓存、或者在 VS Code 里写代码但想用 Linux 工具链编译那 WSL 基本可以让你把开虚拟机这个动作从日常工作流里彻底删掉。如果你是学生党、预算有限笔记本只有 8GB 内存那 WSL 更是比虚拟机友好得多——它不需要给 Linux 单独划一块固定内存跑起来吃多少用多少。至于不适合的场景后面我会专门讲比如需要完整内核模块、需要直通硬件、跑某些不看好的图形化桌面这时候老老实实上虚拟机反而更省心。1.1 WSL 和传统虚拟机、双系统到底差在哪打个比方。传统虚拟机像是在你家客厅里又盖了一间独立的房子施工慢、占地固定、进出要绕一圈门双系统是把房子推倒重建一半每次换用途都得重启搬家而 WSL 更像是在你家墙上开了一扇门门后面直接连着一个已经装修好的厨房——你走进去就能开火不需要额外的砖头和地基。具体到技术层面WSL1 的做法是翻译把 Linux 系统调用实时翻译成 Windows 能听懂的话所以它启动快秒级、文件互访快但是遇到需要真实 Linux 内核行为的操作就容易翻车比如某些 Docker 镜像、需要 epoll 精细语义的服务。WSL2 干脆不翻译了直接在轻量级虚拟化上跑一个真正的 Linux 内核兼容性好到几乎和原生机器没区别代价是跨系统访问文件在 Linux 里读/mnt/c/...会慢一个数量级因为要走 9P 协议跨文件系统。我自己的判断标准很简单只要你不打算在 Linux 里大量读写 Windows 盘上的文件一律选 WSL2。现在的默认安装也是 WSL2除非你有非常特殊的理由别去折腾 WSL1 了。1.2 为什么我建议把它当成主力开发环境很多人装完 WSL 就放在那儿吃灰原因往往是没做初始化配置——默认源慢得像蜗牛、默认终端丑得没法看、默认用户是 root、文件互访路径又长又难记。这些问题花半小时解决掉之后WSL 的体验是可以超过纯 Linux 机器的因为它同时具备了 Windows 的软件生态和 Linux 的命令行生态。举个我自己的例子。我写 Python 项目的时候代码库放在 Linux 侧的~/projects注意不是/mnt/c/...这是关键用 VS Code 的 WSL 远程模式打开终端里跑 pytestWindows 侧同时开着 Excel 和微信需要传文件就用 Windows 资源管理器直接敲\\wsl$进去拖。整个过程我不需要重启不需要切系统不需要配置共享文件夹也不需要担心虚拟机那个越来越大的 vmdk 文件。这种无缝感才是 WSL 真正的价值也是我一直推荐它的核心原因。2. 动手之前这三件事必须先确认装东西最怕的就是半路翻车然后回头找原因发现是前置条件没满足。WSL 安装失败的原因里80% 都集中在三件事上系统版本不够、虚拟化没开、磁盘空间和路径没规划好。我把它们放在最前面就是希望你先花五分钟把这些确认掉后面能省掉两个小时抓头发。2.1 系统版本与授权状态核对WSL2 对系统版本有硬性要求。你需要在 PowerShell管理员身份里执行winver弹出来的窗口会告诉你具体版本号。对于 Windows10我要求你至少是2004 版本内部版本 19041 及以上。低于这个版本wsl --install这条命令根本不存在你会得到无法识别的选项这样的提示。如果版本太低建议先把系统更新到最新的 22H2 分支这是目前 Windows10 生命周期里最稳的版本。顺便说一句授权问题。系统如果长期处于未激活状态某些功能更新和组件安装会被限制间接影响 WSL 相关组件的部署所以我建议先通过官方渠道把授权状态处理干净确认设置 - 更新和安全 - 激活里显示的是正常激活状态。这一步属于基础环境治理和 WSL 本身关系不大但它确实会影响你后续的更新体验。检查命令很简单# 查看系统版本与内部版本号 winver # 或者用命令行获取更精确的信息 [System.Environment]::OSVersion.Version如果你还想确认虚拟化平台相关的组件是否受支持可以顺手看一眼# 查看 Hyper-V 与虚拟机平台相关功能的状态 Get-WindowsOptionalFeature -Online | Where-Object { $_.FeatureName -match Hyper|VirtualMachinePlatform|Linux } | Select-Object FeatureName, State这条命令会把Microsoft-Windows-Subsystem-LinuxWSL 本体、VirtualMachinePlatformWSL2 依赖的虚拟化平台、Microsoft-Hyper-V完整 Hyper-V一般不需要开这几个功能的状态列出来。State 显示 Enabled 就是已开启Disabled 就是没开后面会用到。2.2 硬件虚拟化与 BIOS 开关WSL2 依赖硬件虚拟化能力具体来说是 CPU 的 VT-xIntel或 AMD-VAMD。这个概念不复杂现代 CPU 都支持让一个操作系统租出资源给另一个系统用但出于安全考虑主板厂商默认经常把它关着。怎么确认打开任务管理器CtrlShiftEsc切到性能选项卡点左侧的 CPU右下角会有一行虚拟化已启用 / 已禁用。如果是已禁用你就得重启进 BIOS 了。不同品牌主板进入 BIOS 的键不一样华硕/微星通常是 Del 或 F2联想笔记本是 F1 或 FnF2戴尔是 F2惠普是 F10 或 Esc。进去之后找的选项名字也五花八门Intel 平台叫Intel Virtualization Technology、VT-x、VanderpoolAMD 平台叫SVM Mode、AMD-V、Secure Virtual Machine。把它设成 Enabled保存退出通常 F10重启。注意部分品牌机在开启虚拟化后会与某些安全软件产生冲突表现为系统启动变慢或者蓝屏。如果遇到这种情况先更新主板 BIOS 和芯片组驱动绝大多数问题就解决了不要急着关回去。还有一个容易忽略的点内存完整性核心隔离功能。Windows 的内核隔离 - 内存完整性在某些版本上会和 Hyper-V 抢占虚拟化资源导致 WSL 启动时报HCS_E_HYPERV_NOT_INSTALLED之类的错误。如果你遇到这类报错可以到设置 - 隐私和安全性 - Windows 安全中心 - 设备安全性 - 内核隔离里把内存完整性临时关掉试试确认是它的问题后再决定长期方案。我自己是保持关闭的因为我不是做安全攻防的日常开发用不到这个特性。2.3 磁盘空间与目录规划WSL2 的虚拟磁盘默认放在C:\Users\你的用户名\AppData\Local\Packages\下面文件名是ext4.vhdx。这个东西是动态增长的你往里写多少数据它就长多大但它不会因为你删文件而自动缩小。一个常年不清理的开发环境这个文件涨到 50GB 甚至 100GB 都很常见。所以我的建议是如果 C 盘紧张从一开始就把发行版装到其他盘。后面第 4 章我会给具体的迁移步骤。初始分配上一个干净安装的 Ubuntu 大约占 1.5GB加上基础工具链和几个项目依赖预留 20GB 是合理起点。另外提醒一下文件名和路径的坑。WSL 的默认安装路径里包含你的 Windows 用户名如果你的用户名是中文或者含有空格和特殊字符某些老版本组件会在路径解析上出问题。这不是必然发生但确实是排查列表里的常客。如果你的用户名是中文我建议在安装前新建一个纯英文的本地账户或者干脆在安装时通过命令行参数指定安装目录后面会讲。3. 三条安装路线按你的网络情况挑一条理想情况下你只需要在管理员 PowerShell 里敲一条命令剩下的事系统自己办完。但现实是wsl --install需要从微软的服务器下载内核更新包和发行版镜像网络一波动就卡住甚至报服务器不支持或者下载失败。所以我把安装分成三条路线从最省事到最兜底你可以按实际情况选。3.1 路线A一条命令走完网络好时的首选这是当前最推荐的方式。以管理员身份打开 PowerShell开始菜单搜索 PowerShell右键以管理员身份运行输入wsl --install这条命令做的事情其实挺多开启 WSL 和虚拟机平台两个可选功能、下载并安装 WSL2 内核更新包、安装默认发行版目前是 Ubuntu。整个过程中会要求你重启一次重启后系统会弹出一个终端窗口让你设置 Linux 用户名和密码。如果你想指定发行版比如装 Ubuntu 22.04# 先看看有哪些可装的发行版 wsl --list --online # 再指定安装 wsl --install -d Ubuntu-22.04设置用户名密码这一步有几个细节值得说。用户名建议全小写、不含特殊字符因为后面很多脚本包括某些 Docker 和 CI 配置会直接引用它。密码输入时终端不回显这是正常的别以为是键盘坏了。这个密码就是你的sudo密码忘了的话需要用wsl -u root进去重置稍微麻烦所以建议记牢或者用密码管理器存上。如果你敲完wsl --install之后长时间卡在正在安装不动或者报网络相关错误直接跳到路线 B。3.2 路线B手动开功能 离线包安装下载太慢的解法这条路线把大动作拆成小步每一步都能单独验证排查起来也方便。第一步手动开启两个 Windows 功能。在管理员 PowerShell 里执行# 开启 WSL 本体功能 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 开启虚拟机平台WSL2 必需 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart两条都执行完之后重启一次。重启是必须的不要跳过功能开关不重启是不会真正生效的。第二步安装 WSL2 内核更新包。这个东西是一个独立的 MSI 安装程序官方下载地址是微软文档里的那个短链接直接搜WSL2 Linux 内核更新包就能找到。下载下来是一个几十 MB 的 msi 文件双击按提示装完即可。提示如果你所在网络环境访问官方下载地址不稳定可以尝试用浏览器手动下载而不是命令行拉取浏览器有断点续传成功率会高不少。下载完成后校验一下文件大小是否和官方标注一致避免拿到损坏包。第三步把默认版本设为 WSL2wsl --set-default-version 2第四步装发行版。这里有两种做法。一种是从 Microsoft Store 搜索 Ubuntu 安装图形化操作适合不想碰命令行的朋友。另一种是用命令行wsl --install -d Ubuntu-22.04如果这条还是慢那就走路线 C。3.3 路线C导入 rootfs 离线包终极兜底方案这是最稳的方案也是我在内网环境里部署时的标准做法。原理很简单WSL 允许你用一个 tar 格式的根文件系统压缩包直接导入成一个发行版实例完全绕开在线下载。首先你得拿到 rootfs 包。Ubuntu 官方会在镜像站发布 WSL 专用根文件系统文件名类似ubuntu-22.04-server-cloudimg-amd64-wsl.rootfs.tar.gz。这个包通常两三百 MB用浏览器下载比命令行靠谱。下载完成后假设你放在D:\wsl\目录下。接下来分两步先确保D:\wsl\ubuntu22这个目录存在导入时会用它当虚拟磁盘的存放位置然后执行导入# 创建目标目录 mkdir D:\wsl\ubuntu22 # 导入发行版发行版名字自己起比如叫 Ubuntu-22.04-dev wsl --import Ubuntu-22.04-dev D:\wsl\ubuntu22 D:\wsl\ubuntu-22.04-server-cloudimg-amd64-wsl.rootfs.tar.gz # 查看已安装的发行版列表 wsl -l -vwsl -l -v的输出会显示每个发行版的名字、当前状态Running/Stopped和 WSL 版本号1 或 2。如果版本列显示的是 1用wsl --set-version Ubuntu-22.04-dev 2转过来。导入方式的发行版有一个特点默认登录用户是 root。怎么改成普通用户我放在下一章讲。这里先给个快速办法# 进入系统 wsl -d Ubuntu-22.04-dev # 创建你的用户 useradd -m -s /bin/bash devuser # 设置密码 passwd devuser # 把它加入 sudo 组 usermod -aG sudo devuser # 退出 exit然后在 Windows 侧的用户目录下建一个配置文件C:\Users\你的用户名\.wslconfig……不对改默认用户用的是/etc/wsl.conf在 Linux 里写[user] defaultdevuser写完之后在 PowerShell 里执行wsl --terminate Ubuntu-22.04-dev关闭实例再重新进去默认用户就变成 devuser 了。3.4 把发行版搬到非系统盘如果你一开始用了路线 A装在了 C 盘后面发现空间吃紧可以在不重装的前提下把它搬走。原理是导出为 tar然后重新导入到新位置最后注销旧的。操作如下# 1. 先关掉所有 WSL 实例 wsl --shutdown # 2. 导出到文件这一步可能要几分钟取决于你的数据量 wsl --export Ubuntu-22.04 D:\wsl\ubuntu-backup.tar # 3. 在新位置导入 mkdir D:\wsl\ubuntu-new wsl --import Ubuntu-22.04 D:\wsl\ubuntu-new D:\wsl\ubuntu-backup.tar # 4. 确认新实例能正常启动后注销旧的这会删除 C 盘上的虚拟磁盘 wsl --unregister Ubuntu-22.04等一下这里有个逻辑问题第 3 步导入时用的名字如果和第 4 步注销的名字一样会冲突。正确顺序应该是先用新名字导入比如Ubuntu-22.04-new启动确认数据都在再把旧的注销掉最后如果想恢复原名字再导出导入一次或者接受新名字。我一般就直接用新名字了反正只是配置里改一下引用不折腾。注意wsl --unregister是不可逆的它会把虚拟磁盘直接删掉。执行前一定要确认备份 tar 文件完好最好先把它复制一份到别的地方放两天确认新实例稳定运行再删。4. 装完不配置等于白装必做的初始化很多人对 WSL 的印象停留在能用但不好用问题基本都出在这一步没做。一个刚装好的 Ubuntu源是境外的、终端是简陋的、默认没装几个工具、和 Windows 的文件互访也很别扭。这一章我把自己每次重装后必做的配置从头到尾列一遍大概二十分钟能全部搞定。4.1 换源与基础工具链第一步换软件源。默认的archive.ubuntu.com在国内访问速度很不稳定换成国内镜像源能快十倍不止。以 Ubuntu 22.04 为例# 先备份原配置 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 用 sed 批量替换为清华源这里以清华 TUNA 为例 sudo sed -i s|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list sudo sed -i s|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list # 更新索引 sudo apt update sudo apt upgrade -y顺手把 pip 源也换掉不然装 Python 包的时候你会等到怀疑人生mkdir -p ~/.pip cat ~/.pip/pip.conf EOF [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn EOF然后是基础工具链。下面这个列表是我十几年里筛出来的最小可用集按需增减sudo apt install -y build-essential git curl wget unzip zip \ vim tmux htop tree jq net-tools iputils-ping \ python3 python3-pip python3-venvbuild-essential是编译工具链很多 Python 包和 Node 原生模块都要用它tmux是终端复用工具网络断了任务不会死tree看目录结构特别直观jq处理 JSON 输出是神器。这几个装完日常开发基本不会再有命令找不到的情况。实操心得apt upgrade在 WSL 里有时候会因为内核相关包被锁住而报错提示某些包被hold住了。这是因为 WSL 用的是微软定制内核不要强行升级linux-image之类的包遇到提示直接跳过就好不影响使用。4.2 用户权限与 Windows-Linux 文件互访权限这块最常见的坑是 sudo 免密。我不建议设免密但如果你经常跑自动化脚本可以给特定命令开白名单而不是把整个 sudo 放开。做法是sudo visudo之后加一行你的用户名 ALL(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl文件互访有两个方向都得说清楚。Windows 访问 Linux 文件最简单的方式是在资源管理器地址栏敲\\wsl$回车你会看到所有运行中的发行版点进去就是根目录。也可以敲\\wsl$\Ubuntu-22.04\home\你的用户名直接跳到 home。这个路径可以映射成网络驱动器天天用的话挺方便。Linux 访问 Windows 文件所有盘符挂在/mnt/下面C 盘就是/mnt/c。比如要访问桌面就是/mnt/c/Users/你的用户名/Desktop。但这里有个性能陷阱必须强调跨系统的文件读写非常慢。我实测过同样一个包含一万个小文件的 node_modules 目录放在 Linux 侧~/下安装依赖要 40 秒放在/mnt/c/下要 15 分钟以上差不多是二十倍的差距。原因在于 WSL2 通过网络协议访问 Windows 文件系统每个文件操作都要过一次协议栈。所以我的原则是代码库一律放在 Linux 侧~/projects这种位置只在必要的时候通过/mnt/c拿一下素材文件。VS Code 的 WSL 模式默认就是这么工作的它把工作区放在 Linux 侧编辑器界面在 Windows 侧两边各干各擅长的事。4.3 图形界面与 VS Code 联动WSLg 是让 WSL 直接跑图形化 Linux 程序的能力从较新的版本开始默认开启。验证方法很简单在 WSL 里装个图形小程序跑跑看sudo apt install -y x11-apps xeyes如果弹出两个跟着鼠标转的眼睛说明 WSLg 工作正常。这意味着你可以直接在 WSL 里跑带界面的工具比如gedit、nautilus甚至某些需要显示窗口的测试程序不用再折腾 X Server 了。再说 VS Code。装好 VS Code 之后在扩展市场搜WSL装微软官方那个 Remote - WSL 扩展。装完之后在 WSL 终端里进入你的项目目录敲code .VS Code 会自动以远程模式打开这个目录。这时候你看到的是左下角显示WSL: Ubuntu-22.04终端默认就是 WSL 的 bash所有扩展Python、Pylance 等需要在这个远程环境里再装一次装的是 Linux 版本断点调试、单元测试、Git 操作全部在 Linux 环境下执行这套组合我用下来体验比在 Windows 原生跑 Python 好太多尤其是涉及路径分隔符、文件权限、shebang 脚本的时候Linux 环境的行为才是你线上服务器真正会有的行为。4.4 Docker 与 CUDA两个高频难点WSL 里跑 Docker 有两条路。第一条是装 Docker Desktop for Windows然后在设置里开启 WSL2 后端集成这样 WSL 里敲docker能直接用 Windows 侧的 Docker 引擎。这条路配置简单但依赖 Docker Desktop 这个图形程序常驻。第二条是在 WSL 内部直接装 Docker Engine不装 Desktop。好处是资源占用低、完全命令行管理坏处是它跑在 WSL 的虚拟化环境里和 Windows 侧的 Docker 是两套东西。安装步骤# 添加官方 GPG key sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 添加软件源 echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 把当前用户加进 docker 组免得每次敲 sudo sudo usermod -aG docker $USER加组之后要退出 WSL 再重新进才生效这步经常被忽略然后就会奇怪为什么还是要 sudo。如果你用 Docker Desktop 并且遇到there was a problem with WSL这类报错九成是因为 Docker Desktop 的 WSL 集成指向了一个已经注销的发行版或者 WSL 内核版本太旧。到 Docker Desktop 的 Settings - Resources - WSL Integration 里重新勾选一下发行版或者在 PowerShell 里wsl --update更新一下内核基本都能解决。CUDA 这边现在 NVIDIA 官方对 WSL2 的支持已经很成熟了。前提是 Windows 侧装好支持 WSL 的显卡驱动不是 Linux 侧驱动这点特别容易搞错然后在 WSL 里装 CUDA Toolkit 就行不需要装显卡驱动本体。验证方法是跑nvidia-smi如果能看到显卡信息链路就通了。用 PyTorch 的话装对应 CUDA 版本的 wheel 就能用上 GPU 加速训练小模型时比纯 CPU 快十几倍。5. 踩坑实录这些报错我都遇到过这一章是整篇里我最想写好的部分因为前面所有的步骤都是可以照抄的而报错才是真正消耗时间的地方。我把这些年遇到的典型问题按阶段整理出来附上排查思路和解决办法。5.1 安装阶段的高频报错报错一wsl --install提示无法识别的选项或命令不存在。这说明你的系统版本太老或者没有以管理员身份运行。先winver确认版本号低于 19041 就先更新系统。另外有些精简版系统把相关组件裁掉了这种系统装 WSL 会非常痛苦建议换回完整版。报错二安装卡在正在下载不动或者超时。这就是网络问题别硬等直接切到路线 B 或 C。如果你坚持要用命令行下载可以试试wsl --install --web-download这个参数会走浏览器同样的下载通道有时候比默认通道稳。报错三重启后启动 WSL 报WSL 2 requires an update to its kernel component。这就是内核更新包没装回到路线 B 的第二步手动下载那个 msi 装上。报错四your version of windows subsystem for linux (wsl) is too old. run the command...。这个提示很明确就是 WSL 本体版本太旧按提示执行wsl --update就行。如果wsl --update也慢可以从官方 GitHub 发布页手动下载最新版的 wsl msi 包安装。报错五0xc03a001a或其他 0x 开头的错误码。这类错误多数和虚拟磁盘文件损坏有关或者磁盘剩余空间不足。先检查 C 盘或安装盘剩余空间留够 20GB 以上再试。如果空间够还是报错可以用wsl --unregister注销后重装重装前记得先导出备份。5.2 运行阶段的典型问题问题一Python 脚本里的路径莫名其妙报错。检查你是不是在/mnt/c/下跑代码同时脚本里用了相对路径或硬编码的 Windows 风格路径反斜杠。解决办法是把项目移到 Linux 侧或者用pathlib处理路径。问题二MATLAB 识别不到 WSL 里的 Python 或编译器。这是跨环境调用的问题MATLAB 跑在 Windows 侧它看不到 WSL 的文件系统和可执行文件。折中方案是在 Windows 侧也装一个 Python两边通过文件交换数据或者在 WSL 里跑 MATLAB 的命令行版本把结果传回去。问题三服务端口在 Windows 侧访问不了。WSL2 的网络是独立命名空间但微软做了自动端口转发正常情况下localhost是通的。如果不通先确认服务监听的是0.0.0.0而不是127.0.0.1这是个经典错误。另外 Windows 防火墙有时候会拦截可以在入站规则里给对应的端口放行。问题四WSL 里的时间比实际时间快或慢。这是 WSL2 虚拟机的时钟漂移问题执行sudo hwclock -s同步一下或者在 Windows 侧关闭自动设置时间再打开触发一次同步。问题五终端工具连不上 WSL 里的 SSH。像 Xshell、Xftp 这类终端软件如果要在 WSL 里用需要先在 WSL 里装 openssh-server 并启动。这里顺带说一句这类商业终端软件的授权问题建议走正规渠道或者直接换用 VS Code 内置终端、Windows Terminal 加原生 ssh功能完全够用还省掉了授权管理的麻烦。问题六远程桌面相关错误。远程桌面报错误代码比如 0x204 这类通常和网络级别身份验证、凭据缓存有关。清一下凭据管理器里的相关条目或者临时关闭网络级别身份验证再试多半能定位到原因。5.3 问题排查速查表下面这张表我把常见现象、可能原因、处理方式整理在一起方便你出问题时按图索骥现象最可能的原因处理方式wsl --install命令不识别系统版本低于 19041更新系统到 22H2安装过程长时间无响应下载通道网络不稳定改用离线包导入提示内核组件需要更新未安装 WSL2 内核包手动下载 msi 安装启动报 0x 开头错误码虚拟磁盘损坏或空间不足清理空间后重装Linux 侧读写 Windows 文件极慢跨文件系统走 9P 协议把项目放到 Linux 侧Windows 侧访问不了服务端口服务绑定 127.0.0.1 或防火墙改绑 0.0.0.0 并放行端口docker命令需要 sudo用户未加入 docker 组加组后重启 WSL 实例显卡在 WSL 里不可用装的是 Linux 版驱动换装支持 WSL 的 Windows 驱动提示遇到任何 WSL 报错第一反应应该是执行wsl --status和wsl --version把输出记下来。这两个命令给出的信息比其他任何方式都直接很多问题看一眼版本号和内核号就能猜个八九不离十。6. 让 WSL 长期好用调优与数据安全安装和配置只是开始能不能长期用下去取决于你有没有做资源限制、有没有定期备份、有没有搞清楚网络模型。这一章讲三个我觉得最有价值的实践。6.1 用 .wslconfig 控制资源占用WSL2 默认会尽可能多地占用内存因为它把 Windows 的空闲内存当成自己的缓存。这在笔记本上会造成一个尴尬局面WSL 跑起来之后Windows 侧开始卡。解决办法是在 Windows 用户目录下建一个.wslconfig文件路径是C:\Users\你的用户名\.wslconfig。[wsl2] # 最多用 4GB 内存8GB 机器建议 416GB 可以给 8 memory4GB # 最多用 2 个物理核心 processors2 # 交换分区大小 swap2GB # 关闭页面报告能省一点资源 pageReportingfalse # 开启稀疏磁盘让 vhdx 文件能自动回收空间 sparseVhdtrue改完这个文件后执行wsl --shutdown关闭所有实例下次启动就生效了。参数怎么定我的一般建议是按物理内存的一半给8GB 机器给 4GB16GB 给 8GB32GB 给 16GB。处理器数不要给满留一两个核心给 Windows 侧否则编译大项目的时候整个系统会卡到没法操作。sparseVhd这个参数值得单独说一下。开启之后你在 Linux 里删掉文件对应的 vhdx 文件会逐渐缩小而不是只增不减。这个特性在老版本上是关闭的开启后能省下不少磁盘空间。如果你的版本不支持这个参数就得手动压缩# 先关闭 WSL wsl --shutdown # 用 diskpart 压缩虚拟磁盘 diskpart # 进去之后执行 # select vdisk fileC:\Users\你的用户名\AppData\Local\Packages\...\ext4.vhdx # compact vdisk # exit具体路径要从wsl -l -v配合资源管理器一层层找比较麻烦所以我更推荐直接把发行版迁移到非系统盘然后定期用导出导入的方式做一次整容。6.2 网络模型和端口转发的正确理解WSL2 的网络架构是这样的它有一个独立的虚拟网卡Windows 侧通过 NAT 把流量转进去。这带来两个后果。第一WSL 的 IP 地址是动态的每次重启都可能变。如果你需要从局域网其他机器访问 WSL 里的服务用localhost是不行的得用 WSL 的 IP。查 IP 的命令是ip addr show eth0或者简单点hostname -I。第二Windows 侧的localhost转发是微软做的便利特性大多数情况能用但它对某些协议和某些绑定方式不生效。最稳的做法还是让服务监听0.0.0.0然后用localhost:端口或者 WSL 的 IP 访问。如果你需要固定的访问方式可以在 Windows 侧用netsh做端口代理把 Windows 的某个端口转发到 WSL 的端口# 把 Windows 的 8080 转发到 WSL 的 8080 netsh interface portproxy add v4tov4 listenport8080 listenaddress0.0.0.0 connectport8080 connectaddressWSL的IP这条命令有个缺点WSL 重启后 IP 变了转发就失效了得重新配。所以我一般只在需要固定的场景下用它日常开发还是靠localhost转发就够了。顺便提一句 Docker 的场景。如果你用 Docker Desktop 的 WSL2 后端容器的端口映射会自动打通到 Windows 侧localhost:端口直接能用不需要额外配置。如果用的是 WSL 内部自装的 Docker Engine容器的端口映射只在 WSL 内部有效要在 Windows 访问还得再加一层转发。这是我更推荐 Docker Desktop 的原因虽然它有点重。6.3 备份别等出事才想起来WSL 的数据都在那个 vhdx 文件里这个文件损坏了基本就救不回来。我吃过一次亏某次强制关机之后 vhdx 直接挂了里面一个月的项目全没了。从那之后我养成了两个习惯。一是定期导出备份。不用太频繁两周一次就够wsl --shutdown wsl --export Ubuntu-22.04 D:\backup\ubuntu-$(Get-Date -Format yyyyMMdd).tar把这个命令写成一个.ps1脚本配合 Windows 的任务计划程序设置成每两周自动跑一次备份文件保留最近四份就循环删除旧的。这个自动化花十分钟搞定能省下你无数个加班的夜晚。二是代码不依赖 WSL 的磁盘。所有项目都用 git 管理远程仓库推一份。这样即使 vhdx 彻底挂了重装一个 WSLclone 下来就恢复了大半。真正会丢的只有那些没提交的本地改动和环境配置所以我把环境配置也写成了 shell 脚本放在仓库里新环境一条命令初始化。注意wsl --export导出的 tar 文件包含整个根文件系统可能有好几个 GB别放在同一个物理盘上。另外导出前一定要wsl --shutdown运行中导出容易得到不一致的状态。7. 我的几点真实体会写到这里该讲的步骤和坑基本都覆盖了。最后我想分享几个纯粹是个人经验的判断不一定是标准答案但都是真金白银换来的。关于发行版选择我一直用 Ubuntu LTS因为绝大多数文档和教程都基于它遇到问题时能搜到的答案最多。如果你有特殊偏好Debian 和 AlmaLinux 也很稳但小众发行版在 WSL 上的适配问题会明显多一些出问题时参考资料少。关于 WSL1 和 WSL2 的取舍我的态度是除非你的场景明确需要 WSL1比如必须在 Linux 里高速读写 Windows 文件又不方便把文件挪过去否则一律 WSL2。现在还有人在纠结这个我觉得没必要WSL2 的兼容性优势太大了。关于要不要装图形桌面我的建议是不要。WSLg 让你能跑单个图形程序这就够了。在 WSL 里装完整的 GNOME 或者 KDE资源消耗大、体验割裂还不如直接开虚拟机。保持 WSL 的命令行 单窗口定位才是最舒服的用法。还有一个小技巧是我用得最多的在 Windows Terminal 里给 WSL 配置一个专门的配置文件设置启动目录为~字体用等宽字体配色方案选一个护眼的再绑定CtrlShiftT快速新建标签。这些细节看起来无关紧要但每天用八小时的东西顺手和不顺手差距很大。最后说个我踩过的坑。有段时间我的 WSL 启动特别慢进系统要十几秒一度以为是磁盘问题。后来发现是.bashrc里加了一堆nvm、conda、pyenv的初始化脚本每次开终端都要跑一遍。解决办法是把这些初始化写成按需加载的函数或者用lazy-load的方式延迟执行启动时间立马回到两秒以内。如果你也觉得 WSL 启动慢先去检查 shell 初始化脚本十有八九问题在那儿而不是系统本身。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

03 ·纯 C11 在 MCU 上写 Transformer 推理:无 SIMD 的标量内核全解析 2026/9/30 14:18:14

03 ·纯 C11 在 MCU 上写 Transformer 推理:无 SIMD 的标量内核全解析

03 纯 C11 在 MCU 上写 Transformer 推理:无 SIMD 的标量内核全解析 English version: en/03-scalar-inference-kernel.md 本篇对应源码:main/kmcu.c main/kmcu.h main/main.c 目标:理解 kmcu.c/h 如何在一个 32 位 RISC-V MCU 上、用纯标…

阅读更多 →
第三篇 HTTP 请求解析状态机 2026/9/30 14:18:14

第三篇 HTTP 请求解析状态机

原项目:qinguoyi/TinyWebServer 复刻仓库:L2501031968/ccTinyWebServer 完整 20 章教程:仓库内 docs/TinyWebServer-Recreation.md 第 4 章 HTTP 请求解析状态机 4.1 本章目标 第 3 章已经能够通过 epoll 接收多个客户端连接,但…

阅读更多 →
手机号状态检测API:从空号、停机号到风险号的全面识别 2026/9/30 14:18:07

手机号状态检测API:从空号、停机号到风险号的全面识别

一、为什么要做手机号状态检测在用户触达的业务场景中,手机号的"有效性"是一个经常被忽略却直接影响 ROI 的环节。一个触达场景的完整链路是:获取手机号 → 发送消息/拨打语音 → 用户响应 → 转化。如果手机号本身就不可达(空号、…

阅读更多 →
25.58万的腾势Z9S给你百万豪华座驾体验 2026/9/30 14:17:53

25.58万的腾势Z9S给你百万豪华座驾体验

过去,大型豪华轿车的产品逻辑几乎围绕后排展开:加长轴距、舒适座椅、静谧座舱,驾驶者更像被服务的 "专职司机"。但二三十万价位的豪华车用户正在发生变化 —— 绝大多数时间由车主本人驾驶,在豪华体面之外,操…

阅读更多 →
首次体验workbuddy代码修改功能 2026/9/30 14:17:11

首次体验workbuddy代码修改功能

前段时间我写了一个爬取网站的图片的python程序,代码如下:#codingutf-8#支持本程序中有汉字,否则报错 import re#导入正则表达式模块 import requests#导入网络请求,如果没有安装命令:pip install requests import os #urlhttp://…

阅读更多 →
Hello-Python 零基础实战指南:从 Python 基础、FastAPI 后端到 MongoDB 与云端部署 2026/9/30 14:17:11

Hello-Python 零基础实战指南:从 Python 基础、FastAPI 后端到 MongoDB 与云端部署

示例工程教程 【免费下载链接】Hello-Python Curso para aprender el lenguaje de programacin Python desde cero y para principiantes. 100 clases, 44 horas en vdeo, cdigo, proyectos y grupo de chat. Fundamentos, frontend, backend, testing, IA... 项目地址&#xf…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉