资讯动态

WSL 2中Ubuntu 20.04升级至22.04 LTS全流程与避坑指南

发布时间:2026/8/12 13:38:32 来源:尧图企业网站定制
1. 项目概述为什么要在WSL里升级Ubuntu如果你和我一样日常工作离不开Windows但又需要Linux环境来跑开发、测试或者学习那Windows Subsystem for LinuxWSL绝对是个神器。它让你能在Windows里无缝运行一个完整的Linux发行版免去了虚拟机或双系统的麻烦。我自己的主力开发环境就是WSL 2 Ubuntu 20.04 LTS用了好几年一直很稳定。但技术栈在更新一些新的工具链、库或者Docker镜像开始要求更新的系统版本作为基础。比如你想用上Ubuntu 22.04 LTSJammy Jellyfish里默认的Python 3.10、更新的Glibc库或者只是想体验一下更现代的桌面环境如果你装了WSLg升级就提上了日程。直接在WSL里把一个Ubuntu发行版从20.04升级到22.04听起来就像在实体机或虚拟机上操作一样但毕竟环境特殊有些坑只有踩过才知道。今天我就把这次完整的升级过程、遇到的“惊喜”以及事后总结的避坑指南从头到尾梳理一遍目标是让你能无痛、安全地完成这次跨越两个LTS版本的大升级。2. 升级前的深度评估与准备工作升级系统尤其是生产或开发环境最忌讳的就是头脑一热直接敲命令。在WSL这个相对独立但又与Windows宿主有交互的环境里准备工作做得越细升级过程就越稳。2.1 明确升级动机与风险首先问自己为什么非要升级对于WSL环境常见的驱动因素有几个一是软件包依赖比如你需要安装的某个最新版软件只支持22.04的仓库二是开发一致性团队或项目要求统一使用22.04作为基础镜像三是尝鲜与学习想体验新系统的特性。我这次升级主要是因为一些基于CUDA的机器学习工具链在22.04上有更好的官方支持。明确动机后更要清醒认识风险。WSL内的系统升级本质上是对这个Linux子系统的根文件系统进行大规模改动。虽然WSL 2使用了虚拟硬盘VHDX与Windows文件系统隔离但风险依然存在核心服务中断升级过程中大量的核心包如systemd, libc, apt会被替换或更新任何意外中断如Windows主机休眠、断电都可能导致系统无法启动。配置冲突新旧版本软件的配置文件格式可能变化自动升级脚本未必能完美处理所有自定义配置可能导致服务启动失败。第三方源兼容性如果你添加了PPAPersonal Package Archive或其他第三方软件源它们可能尚未适配22.04升级后会导致apt update报错甚至损坏软件源列表。2.2 执行全面的系统状态备份这是最重要、没有之一的一步。WSL提供了非常方便的导出/导入功能这相当于给你的整个Ubuntu环境做了一个完整的、可移植的快照。操作步骤如下列出当前WSL发行版在Windows PowerShell管理员身份不是必须但建议中运行wsl -l -v确认你的Ubuntu 20.04发行版名称例如Ubuntu-20.04和状态应为Running或Stopped。导出备份执行导出命令。这里的关键是选择一个剩余空间充足的路径并给备份文件起个清晰的名字。wsl --export Ubuntu-20.04 D:\WSL_Backups\ubuntu_20.04_backup_20231027.tar--export导出指令。Ubuntu-20.04你的发行版名称根据第一步的列表填写。D:\WSL_Backups\...备份文件保存的路径和文件名。我强烈建议使用.tar格式它是标准的归档格式兼容性好。这个过程会将整个发行版的文件系统打包耗时几分钟到十几分钟取决于你环境的大小。备份的深层考量这个备份文件是“冷备份”。一旦升级失败系统崩溃你可以通过wsl --import命令将这个备份文件作为一个全新的发行版导入瞬间回退到升级前的状态。这是你最大的安全垫。务必确保备份文件所在的磁盘有足够空间通常是你的WSL虚拟硬盘大小的1-1.5倍。2.3 检查与清理系统环境在升级前给系统做个“体检”和“大扫除”能极大减少升级过程中的冲突和错误。更新当前系统确保20.04系统本身的所有包都是最新的。这能解决很多因旧包导致的升级脚本问题。sudo apt update sudo apt upgrade -y如果有需要重启的服务最好现在重启一下WSL实例通过wsl --shutdown然后重新启动。清理无用包自动移除那些已安装但不再需要的依赖包。sudo apt autoremove -y sudo apt autoclean检查第三方软件源PPA运行ls /etc/apt/sources.list.d/查看所有第三方源列表文件。你需要逐一判断每个PPA是否官方支持Ubuntu 22.04。一个保守但安全的做法是在升级前注释掉或移除所有第三方源。你可以通过sudo nano /etc/apt/sources.list.d/某个-ppa.list将文件内的所有行开头加上#来注释。升级成功后再逐一检查其是否支持Jammy并决定是否恢复。记录关键配置简单记下一些关键的自定义配置位置如~/.bashrc,~/.profile,/etc/ssh/sshd_config, 以及任何你修改过的服务配置文件如Nginx, PostgreSQL等的路径。虽然升级通常会保留这些文件但心中有数排查问题时更快。3. 执行升级核心步骤与详细解析准备工作万无一失后我们就可以开始正式的升级流程了。Ubuntu提供了专门的升级工具do-release-upgrade它会处理版本检测、包替换、配置迁移等复杂工作。3.1 启动升级管理工具在WSL终端中直接运行sudo do-release-upgrade如果提示命令未找到你可能需要先安装update-manager-core包sudo apt install update-manager-core。第一次运行时你可能会遇到一个关键提示工具检测到你通过WSL运行可能会询问是否允许它替换一些与系统启动相关的服务管理脚本如/etc/init.d下的脚本。在纯WSL 2环境中这些脚本通常由Windows的WSL服务管理务必选择“否”N以保留WSL特定的启动行为避免升级后WSL无法正常启动。这是WSL升级区别于物理机升级的最大不同点之一。3.2 跟随交互式升级向导do-release-upgrade是一个交互式工具它会检查新版本自动访问Ubuntu服务器查找可用的新LTS版本20.04之后就是22.04。计算更新列出需要安装、升级或移除的软件包数量。这个列表会非常长因为涉及几乎所有核心包。下载包开始下载总计约1GB左右的软件包。速度取决于你的网络。这里有个重要提示WSL的网络代理设置。如果你在Windows上使用了网络代理需要确保WSL能继承或正确配置代理否则下载可能极慢或失败。可以在WSL中临时设置环境变量export http_proxyhttp://windows_host_ip:proxy_port export https_proxyhttp://windows_host_ip:proxy_portwindows_host_ip可以从Windows的ipconfig命令中获取通常是以太网适配器 vEthernet (WSL)下的IPv4地址。安装与配置这是最耗时且不可中断的阶段。工具会自动解包、安装、运行维护脚本。过程中会不时弹出一些配置文件更新的提示例如“保留本地版本”如果你修改过某个配置文件工具会问你是保留自己的版本Y使用软件包维护者的新版本N还是查看差异D。对于不熟悉的配置通常建议选择“保留本地版本Y”尤其是像/etc/bash.bashrc,/etc/profile这类系统级shell配置文件。对于像SSH、Apache等服务配置如果你有自定义也需要仔细比对差异后决定。3.3 升级完成与重启所有包安装配置完成后工具会提示你需要重启。在WSL中所谓的“重启”并不是像物理机那样重启而是需要完全终止这个WSL发行版实例然后重新启动它。在WSL终端中按提示确认完成升级。关闭所有WSL终端窗口。在Windows PowerShell中关闭该发行版wsl --terminate Ubuntu-20.04发行版名称可能仍是旧的没关系。重新从开始菜单或命令行启动你的Ubuntu。此时它应该已经是Ubuntu 22.04 LTS了。4. 升级后的关键验证与问题排查系统“重启”后第一件事不是庆祝而是进行系统性的验证确保核心功能完好。4.1 基础系统状态验证确认版本号lsb_release -a cat /etc/os-release输出应显示Ubuntu 22.04 LTS和Jammy Jellyfish。检查包管理器运行sudo apt update。这是试金石。如果成功说明软件源列表已成功升级到Jammy的官方源且没有语法错误。如果失败错误信息通常会指向某个无效的软件源很可能是之前未处理的第三方PPA。你需要根据错误提示去/etc/apt/sources.list或/etc/apt/sources.list.d/下修正或删除对应的源。测试核心工具快速测试一些最常用的工具是否正常工作如python3 --version(应该是3.10),git --version,docker --version(如果你装了Docker Desktop的WSL2后端)以及gcc --version。4.2 常见问题与修复实录即使按照流程操作也可能遇到一些“特色”问题。以下是我遇到和收集的典型案例问题一sudo apt update失败提示“Release file for ... is not valid yet”现象更新时大量报错提示仓库的Release文件尚未生效无效。根因WSL虚拟机与Windows宿主机的系统时间不同步。这在WSL中偶尔会发生。解决在WSL中同步时间。sudo hwclock -s # 将系统时间同步为硬件时钟时间通常来自宿主机 # 或者安装并启动NTP服务 sudo apt install systemd-timesyncd -y sudo systemctl start systemd-timesyncd执行后再运行sudo apt update。问题二之前安装的软件尤其是通过源码编译的无法运行现象运行命令时提示“找不到共享库”或“版本GLIBC_2.33‘ not found”等。根因Ubuntu 22.04使用了更新的Glibc等基础库。通过源码编译安装的软件其二进制文件链接的是旧版本的库。解决对于这类软件最彻底的方法是在22.04环境下重新编译安装。这也是升级后需要付出的必要维护成本。优先查看该软件是否有官方提供的22.04的二进制包或PPA。问题三WSL启动变慢或启动后某些服务异常现象启动WSL后命令行卡住一段时间才出现提示符或者之前配置的自启动服务如ssh没起来。根因升级过程中systemd的配置或兼容性可能发生变化。虽然WSL默认不启用systemd但如果你通过一些方法启用了它可能会受影响。排查检查/etc/wsl.conf文件是否还在内容是否被修改。这个文件是WSL特有的配置。如果你使用了systemd检查相关服务状态systemctl list-units --failed。查看启动日志journalctl -xe或dmesg | tail -50寻找错误线索。解决对于WSL启动慢可以尝试重建WSL内核缓存在Windows PowerShell中运行wsl --shutdown彻底关闭再启动。对于服务问题根据日志修复配置或重新安装服务。问题四磁盘空间不足警告现象升级后操作磁盘时提示空间不足。根因升级过程下载和安装了大量新包但旧版本的内核包、软件包缓存可能没有被自动清理。解决# 清理旧版本内核包非常有效 sudo apt autoremove --purge -y # 清理APT缓存 sudo apt clean # 查看WSL虚拟硬盘使用情况 df -h /如果清理后空间依然紧张你可能需要考虑扩展WSL 2虚拟硬盘的大小这需要在Windows PowerShell中操作并借助第三方工具。5. 环境恢复与性能调优当系统稳定运行后我们还需要把开发环境恢复到最佳状态并做一些针对WSL的优化。5.1 恢复开发环境与第三方软件恢复第三方软件源逐一打开之前注释掉的PPA文件将其中的发行版代号从focal(20.04) 手动改为jammy(22.04)。然后运行sudo apt update测试该源是否有效。如果无效返回404说明该PPA尚未支持22.04你需要寻找替代方案或等待。重装/重编译关键工具对于通过apt安装的软件通常已自动升级。对于通过pip、npm、cargo等语言包管理器安装的全局工具建议检查其是否正常工作必要时重新安装。对于通过源码make install安装的软件如前所述大概率需要重编。检查容器与虚拟环境如果你使用Python的venv或conda环境它们通常与系统Python隔离不受升级影响可以直接激活使用。但Docker容器内的基础镜像如果指定了ubuntu:20.04则需要你重建镜像或更换为ubuntu:22.04。5.2 WSL 2 专属性能优化建议升级到新系统也是个重新审视和优化WSL配置的好时机。内存与CPU限制在Windows用户目录C:\Users\你的用户名\下创建或编辑.wslconfig文件可以限制WSL 2的资源使用避免它占用过多宿主机资源。[wsl2] memory8GB # 限制最大内存根据你的主机内存调整 processors4 # 限制使用的CPU核心数 localhostForwardingtrue修改后需要运行wsl --shutdown重启WSL生效。优化文件系统性能将项目代码放在WSL的Linux根文件系统内如/home/yourname/projects而不是挂载的Windows盘符如/mnt/c/...下。前者是原生EXT4性能后者是跨网络文件系统9pIO性能差异巨大尤其对于有大量小文件读写的操作如Node.js的node_modules Git操作。配置默认用户确保升级后你的默认登录用户没有变。可以通过在Windows PowerShell中运行ubuntu2204 config --default-user 你的用户名来设置假设发行版名已变为Ubuntu-22.04或类似。整个升级过程从准备到验证我花了大约两个小时其中大部分时间在等待包下载和安装。最深的体会是备份就是生命线。那份.tar备份文件让我在整个过程中心态非常放松因为我知道无论发生什么都有一条绝对可靠的退路。WSL环境下的升级核心在于处理好它与Windows宿主之间的边界问题如时间同步、服务管理以及第三方源的兼容性。只要按部就班胆大心细这次跨越两个LTS版本的升级完全可以平滑完成。现在我可以在Windows上继续享受22.04带来的新特性和更现代的软件生态了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价