资讯动态

Ubuntu 18.04到22.04 LTS系统升级全攻略:从评估到故障排查

发布时间:2026/8/13 23:19:27 来源:尧图企业网站定制
1. 项目概述从Ubuntu 18.04到22.04的跨越最近在整理手头的几台老服务器和开发机发现好几台还跑着Ubuntu 18.04 LTS。这个版本在2023年4月已经结束了标准支持虽然还能用但考虑到安全更新和软件生态升级到更新的LTS版本势在必行。Ubuntu 22.04 LTSJammy Jellyfish是当前最新的长期支持版支持到2027年无论是内核、桌面环境还是软件仓库都带来了不少实质性的提升。对于开发者、运维或者任何依赖Linux环境的朋友来说把系统从18.04平稳升级到22.04是一个既能获得新特性又能保障长期稳定的重要操作。这篇文章我就结合自己最近几次升级的实际经验从准备工作、详细步骤到避坑指南完整地走一遍这个流程。无论你是用实体机、虚拟机还是WSL2核心思路都是相通的。2. 升级前的深度评估与万全准备直接运行do-release-upgrade听起来很简单但贸然操作是服务器管理的大忌。一次成功的系统大版本升级七分靠准备三分靠执行。2.1 全面系统状态检查首先我们需要给当前的18.04系统做个全面的“体检”。打开终端第一件事是确认当前系统的详细信息lsb_release -a这会输出类似Distributor ID: Ubuntu和Release: 18.04的信息确保我们没搞错起点。接着检查系统是否已经更新到了18.04的最新状态sudo apt update sudo apt upgrade -y这个操作会更新所有已安装的软件包到18.04仓库中的最新版本。非常重要的一点upgrade是原地升级软件包而dist-upgrade会处理依赖关系的变更比如删除旧包、安装新包。在跨大版本升级前我们只做upgrade确保当前系统处于一个一致且稳定的状态。如果系统很久没更新这个过程可能会下载几百MB的更新需要一点时间。接下来检查磁盘空间。跨版本升级过程会下载大量新软件包并保留旧内核等文件对/根分区的空间消耗不小。我建议至少预留10GB的可用空间。df -h /如果空间紧张可以清理一些不必要的文件比如旧的日志/var/log、缓存包sudo apt clean以及不再使用的旧内核。使用uname -r查看当前运行的内核然后使用dpkg --list | grep linux-image列出所有已安装的内核镜像手动移除那些版本号远低于当前运行内核的旧包。2.2 关键数据与配置备份这是整个准备环节的重中之重再怎么强调都不为过。升级过程本质上是替换几乎所有的系统软件包虽然设计上会尽力保留用户数据和配置但总有出错的可能。重要文件备份将/home目录下你的个人文档、代码项目、配置文件如.bashrc,.ssh/等打包压缩并拷贝到外部硬盘、另一台服务器或云存储。对于服务器/etc目录下的系统配置文件如nginx/apache配置、数据库配置、防火墙规则等也必须备份。应用程序数据备份如果你运行着MySQL/MariaDB、PostgreSQL数据库务必使用mysqldump或pg_dump进行逻辑备份。对于Docker确保重要的容器数据卷volume有备份或者考虑导出容器镜像。列出已安装软件包生成一个当前系统所有手动安装的软件包列表这有助于升级后快速恢复工作环境。# 生成已安装包的列表 dpkg --get-selections ~/package-list-18.04.txt # 或者使用apt-mark来显示手动安装的包更精确 apt-mark showmanual ~/manually-installed-pkgs.txt2.3 潜在兼容性问题排查Ubuntu 18.04 (Bionic) 到 22.04 (Jammy) 跨越了4年一些软件、驱动或内核模块可能存在兼容性问题。第三方仓库和PPA检查/etc/apt/sources.list和/etc/apt/sources.list.d/目录下的文件。很多第三方PPA可能不提供对22.04的支持。在升级前最好注释掉或移除所有非Ubuntu官方的软件源。升级完成后再逐一检查这些第三方源是否有Jammy版本并重新添加。专有驱动如果你使用了NVIDIA或AMD的专有显卡驱动需要留意。Ubuntu 22.04默认使用了更新的内核和显示栈旧的专有驱动可能无法正常工作。建议在升级前切换回开源驱动nouveau或amdgpu待升级完成并进入新系统后再根据22.04的版本安装合适的专有驱动。对于服务器这通常不是问题。关键服务如果这是台生产服务器计划一个维护窗口。提前通知用户并准备好回滚方案例如从备份中快速恢复虚拟机快照或系统镜像。注意对于通过WSL2安装的Ubuntu 18.04升级过程与原生系统几乎一致。但请确保Windows侧的WSL2内核是最新的并且为Ubuntu子系统分配了足够的磁盘空间可在PowerShell中用wsl --shutdown关闭后在%USERPROFILE%\AppData\Local\Packages\找到对应发行版目录检查.vhdx文件大小。3. 执行升级两种路径与详细操作解析准备工作就绪后我们就可以开始升级了。Ubuntu提供了两种主要的升级方式图形界面GUI和命令行CLI。对于服务器或无图形界面的系统命令行是唯一选择而且我个人也更推荐这种方式因为它输出信息更详细便于排查问题。3.1 方法一使用图形化更新管理器如果你在Ubuntu 18.04的桌面环境中这是最直观的方式。确保你的18.04系统已经安装了最新的更新如前所述运行过sudo apt update sudo apt upgrade。打开“软件和更新”应用程序。切换到“更新”选项卡。将“通知我有新的Ubuntu版本”设置为“任何新版本”。关闭该窗口系统可能会提示有可用的发行版升级。如果没有可以打开“软件更新器”它通常会检测到新版本并提示你升级。按照屏幕上的向导进行操作。这个过程会下载大量数据需要稳定的网络连接并且耗时较长期间电脑最好不要进行其他操作。图形化升级的优缺点优点是交互简单适合不熟悉命令行的用户。缺点是升级过程的信息反馈不如命令行详细如果中途出现网络问题或依赖错误排查起来比较麻烦。3.2 方法二使用命令行工具推荐这是最可靠、信息最透明的方式适用于所有环境。我们需要使用update-manager-core这个包提供的do-release-upgrade工具。首先安装升级工具如果尚未安装sudo apt install update-manager-core默认情况下Ubuntu LTS版本只会在下一个LTS版本发布后的第一次点版本更新时才提示跨LTS升级。为了从18.04直接升级到22.04我们需要确保升级工具的行为设置正确。检查/etc/update-manager/release-upgrades文件cat /etc/update-manager/release-upgrades确保Promptlts。这表示只升级到LTS版本这正是我们需要的。现在开始执行升级命令。我强烈建议使用-d参数在初期尝试因为它会启用一些开发调试模式并在正式替换系统前提供更多预览信息。sudo do-release-upgrade -d或者直接运行正式升级如果你的系统已经明确检测到22.04可用sudo do-release-upgrade接下来你将进入一个基于文本的交互界面。整个过程大致如下提示与确认工具会告诉你发现新版本22.04并询问是否继续。仔细阅读提示输入y确认。下载升级包工具开始计算需要更改的软件包并下载升级所需的文件。这是一个漫长的过程取决于网速可能需要下载超过1GB的数据。请保持网络稳定。安装与配置下载完成后开始安装新软件包。过程中对于一些重要的配置文件如/etc/ssh/sshd_config,/etc/apache2/apache2.conf等如果新版本提供了不同的默认文件它会提示你如何处理保持当前版本保留你现有的、可能修改过的配置。安装维护者的版本使用新系统提供的默认配置你的自定义修改会丢失通常备份为.dpkg-old文件。查看差异比较两个版本的差异再决定。这里需要格外小心。对于你明确修改过的服务配置文件通常选择“保持当前版本”。对于你不确定的可以先“查看差异”再做决定。对于像passwd,group这样的核心系统文件务必选择保持当前版本。清理与重启所有包安装配置完成后工具会提示你移除过时的软件包以释放空间并最终要求重启系统以进入全新的Ubuntu 22.04。实操心得在整个命令行升级过程中不要关闭终端窗口。如果升级因网络中断而停止可以尝试重新运行sudo do-release-upgrade工具通常会尝试从中断处恢复。但最好还是一次性完成。4. 升级后的关键配置与验证工作系统重启后你应该能看到全新的GRUB引导界面和Ubuntu 22.04的登录屏幕。登录进去先别急着干活有几件重要的事情需要立即处理。4.1 基础系统状态验证首先确认升级成功lsb_release -a现在应该显示Release: 22.04。然后检查系统是否完全更新sudo apt update sudo apt upgrade -y刚升级完可能还有一些后续的更新包需要安装。同时也检查一下是否需要dist-upgradesudo apt dist-upgrade -y这个命令会处理因升级可能引入的新的依赖关系变化。4.2 恢复工作环境与解决兼容性问题恢复第三方软件源现在可以逐一检查之前备份的第三方PPA或仓库源。编辑/etc/apt/sources.list.d/下的文件将其中的bionic替换为jammy。但注意不是所有PPA都及时提供了Jammy版本。添加前最好先到PPA的Launchpad页面确认。修改后运行sudo apt update如果没有报错如404 Not Found则说明该源可用。如果报错就先注释掉它。重装或更新关键软件有些在18.04上手动编译安装的软件尤其是依赖特定库版本的可能需要在新系统上重新编译安装。使用之前备份的manually-installed-pkgs.txt列表作为参考重新安装你需要的开发工具、运行时环境等。例如Python 3.6在22.04已被移除默认是Python 3.10。如果你的项目依赖特定Python版本需要安装python3.8或使用pyenv等工具管理多版本。检查服务状态重启所有重要的服务并检查其状态和日志。sudo systemctl restart nginx mysql docker sudo systemctl status nginx sudo journalctl -u nginx --since today重点关注那些在升级过程中你选择“保持旧配置”的服务确保它们与新版本的软件兼容。4.3 性能与稳定性观察升级后的头几天建议对系统进行一段时间的观察。监控资源使用htop,nmon等工具观察CPU、内存、磁盘I/O情况看是否有异常进程或资源泄漏。测试核心功能测试网络连接、文件共享、数据库访问、Web服务等所有核心业务功能是否正常。内核与驱动22.04使用了更新的内核5.15 LTS或更新对硬件支持更好。但如果遇到硬件问题如无线网卡、特殊打印机可能需要寻找更新的驱动。对于NVIDIA显卡现在通过sudo apt install nvidia-driver-535或推荐版本来安装会更加顺畅。5. 常见问题与故障排查实录即使准备再充分升级过程中也可能遇到意外。下面是我和同事们遇到过的一些典型问题及解决方法。5.1 升级过程本身失败问题运行sudo do-release-upgrade时提示“No new release found”。排查检查网络连接确认/etc/update-manager/release-upgrades中Promptlts有时需要先升级到20.04这个中间LTS版本。可以尝试修改源列表将archive.ubuntu.com临时替换为old-releases.ubuntu.com针对已结束支持的版本但更推荐直接下载22.04 ISO进行全新安装或使用官方的升级路径。问题升级过程中下载阶段非常慢或中断。排查可以尝试更换软件源镜像。备份/etc/apt/sources.list将其中的archive.ubuntu.com和security.ubuntu.com替换为国内的镜像源如阿里云mirrors.aliyun.com或清华源mirrors.tuna.tsinghua.edu.cn然后重新运行升级命令。问题在配置阶段出现“dpkg错误”或“无法解压某个包”。排查这通常是磁盘空间不足或下载的包损坏导致的。检查磁盘空间df -h。可以尝试清理/var/cache/apt/archives/目录然后重新运行sudo do-release-upgrade。如果某个特定包反复出错可以尝试在升级过程中跳过它不推荐或者事后手动用sudo dpkg -i --force-overwrite强制安装。5.2 升级后系统无法启动这是最糟糕的情况但仍有挽救余地。症状GRUB引导后黑屏、卡在启动画面、或进入紧急恢复模式emergency mode。排查思路在GRUB界面选择“Advanced options for Ubuntu”尝试引导进入上一个内核版本通常是18.04的内核。如果成功说明问题与新内核或驱动相关。如果连恢复模式都进不去需要使用Ubuntu 22.04的安装U盘启动选择“试用Ubuntu”然后挂载原系统根分区chroot进去进行修复。例如检查/etc/fstab是否正确重新安装GRUB (grub-install和update-grub)或者重新安装损坏的内核包 (linux-image-generic)。显卡驱动问题常见如果卡在图形界面登录前可以尝试在GRUB启动参数中加入nomodeset来禁用内核级显卡驱动进入系统后再安装合适的驱动。5.3 升级后应用程序无法运行问题依赖旧版库的软件报错如“GLIBCXX_3.4.26 not found”。解决这通常是因为动态链接库版本不匹配。使用ldd /path/to/your/binary检查缺失的库。解决方案是1) 寻找为22.04编译的软件新版本2) 使用容器Docker封装旧环境运行该软件3) 手动编译安装所需版本的库复杂且可能引发冲突。问题自定义编译的软件如PHP扩展、内核模块失效。解决在新系统上重新编译安装是唯一可靠的方法。确保安装了新版本所需的所有开发包-dev或-devel包。5.4 网络与服务异常问题网络管理器NetworkManager或netplan配置不生效。解决Ubuntu从17.10开始引入netplan作为默认的网络配置工具但18.04可能还在用旧的ifupdown。升级后检查/etc/netplan/下的YAML配置文件并根据22.04的文档重新配置。sudo netplan apply应用配置。问题防火墙规则丢失或失效。解决如果使用ufw规则通常能保留。如果使用iptables规则可能因为内核模块变更而失效。需要重新应用规则或考虑迁移到nftables22.04更推荐。最后也是最重要的建议对于任何重要的生产环境在物理机或主力机上执行跨大版本升级前务必先在虚拟机中完整演练一遍。克隆一个与生产环境尽可能相似的虚拟机执行上述所有步骤记录下所有出现的问题和解决方法。这能极大降低正式升级的风险。升级不是目的平稳过渡、持续服务才是。

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

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

免费获取报价