当前位置: 首页 > news >正文

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

1. 项目概述:从Ubuntu 18.04到22.04的跨越

最近在整理手头的几台老服务器和开发机,发现好几台还跑着Ubuntu 18.04 LTS。这个版本在2023年4月已经结束了标准支持,虽然还能用,但考虑到安全更新和软件生态,升级到更新的LTS版本势在必行。Ubuntu 22.04 LTS(Jammy Jellyfish)是当前最新的长期支持版,支持到2027年,无论是内核、桌面环境还是软件仓库,都带来了不少实质性的提升。对于开发者、运维或者任何依赖Linux环境的朋友来说,把系统从18.04平稳升级到22.04,是一个既能获得新特性又能保障长期稳定的重要操作。这篇文章,我就结合自己最近几次升级的实际经验,从准备工作、详细步骤到避坑指南,完整地走一遍这个流程。无论你是用实体机、虚拟机还是WSL2,核心思路都是相通的。

2. 升级前的深度评估与万全准备

直接运行do-release-upgrade听起来很简单,但贸然操作是服务器管理的大忌。一次成功的系统大版本升级,七分靠准备,三分靠执行。

2.1 全面系统状态检查

首先,我们需要给当前的18.04系统做个全面的“体检”。打开终端,第一件事是确认当前系统的详细信息:

lsb_release -a

这会输出类似Distributor ID: UbuntuRelease: 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 关键数据与配置备份

这是整个准备环节的重中之重,再怎么强调都不为过。升级过程本质上是替换几乎所有的系统软件包,虽然设计上会尽力保留用户数据和配置,但总有出错的可能。

  1. 重要文件备份:将/home目录下你的个人文档、代码项目、配置文件(如.bashrc,.ssh/)等,打包压缩并拷贝到外部硬盘、另一台服务器或云存储。对于服务器,/etc目录下的系统配置文件(如nginx/apache配置、数据库配置、防火墙规则等)也必须备份。
  2. 应用程序数据备份:如果你运行着MySQL/MariaDB、PostgreSQL数据库,务必使用mysqldumppg_dump进行逻辑备份。对于Docker,确保重要的容器数据卷(volume)有备份,或者考虑导出容器镜像。
  3. 列出已安装软件包:生成一个当前系统所有手动安装的软件包列表,这有助于升级后快速恢复工作环境。
    # 生成已安装包的列表 dpkg --get-selections > ~/package-list-18.04.txt # 或者使用apt-mark来显示手动安装的包(更精确) apt-mark showmanual > ~/manually-installed-pkgs.txt

2.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默认使用了更新的内核和显示栈,旧的专有驱动可能无法正常工作。建议在升级前,切换回开源驱动(nouveauamdgpu),待升级完成并进入新系统后,再根据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的桌面环境中,这是最直观的方式。

  1. 确保你的18.04系统已经安装了最新的更新(如前所述,运行过sudo apt update && sudo apt upgrade)。
  2. 打开“软件和更新”应用程序。
  3. 切换到“更新”选项卡。
  4. 将“通知我有新的Ubuntu版本”设置为“任何新版本”。
  5. 关闭该窗口,系统可能会提示有可用的发行版升级。如果没有,可以打开“软件更新器”,它通常会检测到新版本并提示你升级。
  6. 按照屏幕上的向导进行操作。这个过程会下载大量数据,需要稳定的网络连接,并且耗时较长,期间电脑最好不要进行其他操作。

图形化升级的优缺点:优点是交互简单,适合不熟悉命令行的用户。缺点是升级过程的信息反馈不如命令行详细,如果中途出现网络问题或依赖错误,排查起来比较麻烦。

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

确保Prompt=lts。这表示只升级到LTS版本,这正是我们需要的。

现在,开始执行升级命令。我强烈建议使用-d参数在初期尝试,因为它会启用一些开发调试模式,并在正式替换系统前提供更多预览信息。

sudo do-release-upgrade -d

或者,直接运行正式升级(如果你的系统已经明确检测到22.04可用):

sudo do-release-upgrade

接下来,你将进入一个基于文本的交互界面。整个过程大致如下:

  1. 提示与确认:工具会告诉你发现新版本22.04,并询问是否继续。仔细阅读提示,输入y确认。
  2. 下载升级包:工具开始计算需要更改的软件包,并下载升级所需的文件。这是一个漫长的过程,取决于网速,可能需要下载超过1GB的数据。请保持网络稳定。
  3. 安装与配置:下载完成后,开始安装新软件包。过程中,对于一些重要的配置文件(如/etc/ssh/sshd_config,/etc/apache2/apache2.conf等),如果新版本提供了不同的默认文件,它会提示你如何处理:
    • 保持当前版本:保留你现有的、可能修改过的配置。
    • 安装维护者的版本:使用新系统提供的默认配置(你的自定义修改会丢失,通常备份为.dpkg-old文件)。
    • 查看差异:比较两个版本的差异,再决定。这里需要格外小心。对于你明确修改过的服务配置文件,通常选择“保持当前版本”。对于你不确定的,可以先“查看差异”再做决定。对于像passwd,group这样的核心系统文件,务必选择保持当前版本
  4. 清理与重启:所有包安装配置完成后,工具会提示你移除过时的软件包以释放空间,并最终要求重启系统以进入全新的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-upgrade

sudo apt dist-upgrade -y

这个命令会处理因升级可能引入的新的依赖关系变化。

4.2 恢复工作环境与解决兼容性问题

  1. 恢复第三方软件源:现在可以逐一检查之前备份的第三方PPA或仓库源。编辑/etc/apt/sources.list.d/下的文件,将其中的bionic替换为jammy。但注意,不是所有PPA都及时提供了Jammy版本。添加前,最好先到PPA的Launchpad页面确认。修改后,运行sudo apt update,如果没有报错(如404 Not Found),则说明该源可用。如果报错,就先注释掉它。
  2. 重装或更新关键软件:有些在18.04上手动编译安装的软件(尤其是依赖特定库版本的),可能需要在新系统上重新编译安装。使用之前备份的manually-installed-pkgs.txt列表作为参考,重新安装你需要的开发工具、运行时环境等。例如,Python 3.6在22.04已被移除,默认是Python 3.10。如果你的项目依赖特定Python版本,需要安装python3.8或使用pyenv等工具管理多版本。
  3. 检查服务状态:重启所有重要的服务,并检查其状态和日志。
    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-upgradesPrompt=lts;有时需要先升级到20.04这个中间LTS版本。可以尝试修改源列表,将archive.ubuntu.com临时替换为old-releases.ubuntu.com(针对已结束支持的版本),但更推荐直接下载22.04 ISO进行全新安装或使用官方的升级路径。
  • 问题:升级过程中下载阶段非常慢或中断。
    • 排查:可以尝试更换软件源镜像。备份/etc/apt/sources.list,将其中的archive.ubuntu.comsecurity.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)。
  • 排查思路
    1. 在GRUB界面,选择“Advanced options for Ubuntu”,尝试引导进入上一个内核版本(通常是18.04的内核)。如果成功,说明问题与新内核或驱动相关。
    2. 如果连恢复模式都进不去,需要使用Ubuntu 22.04的安装U盘启动,选择“试用Ubuntu”,然后挂载原系统根分区,chroot进去进行修复。例如,检查/etc/fstab是否正确,重新安装GRUB (grub-installupdate-grub),或者重新安装损坏的内核包 (linux-image-generic)。
    3. 显卡驱动问题常见:如果卡在图形界面登录前,可以尝试在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,规则可能因为内核模块变更而失效。需要重新应用规则,或考虑迁移到nftables(22.04更推荐)。

最后,也是最重要的建议:对于任何重要的生产环境,在物理机或主力机上执行跨大版本升级前,务必先在虚拟机中完整演练一遍。克隆一个与生产环境尽可能相似的虚拟机,执行上述所有步骤,记录下所有出现的问题和解决方法。这能极大降低正式升级的风险。升级不是目的,平稳过渡、持续服务才是。

http://www.jsqmd.com/news/1388053/

相关文章:

  • 2026深圳大件特殊物品搬运价格参考与靠谱服务商推荐:钢琴/红木家具/保险柜收费标准+正规搬家公司名单+避坑全攻略【最新版】 - 禧燕搬家
  • 2026年北京朝阳区保暖服饰源头工厂靠谱推荐:马员外服饰全产业链实力解析 - 子柔传媒
  • C/S与B/S架构深度解析:从原理到实战选型指南
  • 2026年宁波韩国留学中介哪家专业?韩国项目专业能力的5项核验标准 - 科技焦点
  • 高空外墙清洗机器人找哪家:【凌度智能】上门演示 - 松梢月冷
  • Ubuntu 22.04 下编译支持国密SSL与HTTP/2的定制化curl工具
  • Ubuntu 20.04显卡驱动配置全攻略:从原理到实战避坑指南
  • TikTok海外营销成本太高怎么办?品牌如何通过KOC矩阵降低CPM和CPE提升曝光效率
  • Spring AI Alibaba PromptTemplate:大语言模型应用中的提示词模板设计与工程实践
  • 深度解析上海华谊集团建设有限公司网站:揭秘基建背后的硬核实力与未来蓝图
  • Linux C编程时间获取全解析:从time()到clock_gettime()的实战指南
  • 2026年北京东城区保暖服饰源头工厂靠谱推荐:马员外服饰全产业链实力解析 - 企业新闻快传
  • 数学建模国赛论文Word模板:样式定义与自动化排版全攻略
  • C语言文件操作核心:从文本/二进制读写到高效I/O与错误处理
  • 2026年北京门头沟区保暖服饰源头工厂靠谱推荐:马员外服饰全产业链实力解析 - 企业新闻快传
  • 从本地到云端:AI应用迁移实战与避坑指南
  • Python 如何“变成”机器指令?从人的意图、AST、解释器到 CPU 与二进制
  • 2026甄选:低楼层隐私膜专业公司推荐——单向透视与防偷窥隔热方案解析 - 卓企推荐
  • Quartus与ModelSim-Altera联合仿真:从环境配置到调试排错的完整指南
  • ESP8685-WROOM-05-H4模组:RISC-V架构下的工业级无线方案
  • 基于Apache Paimon与Milvus构建AI原生多模态数据湖实践
  • iOS/macOS崩溃日志全解析:从获取、符号化到实战排查
  • Git学习笔记:GitHub Git Data API 完全指南,用 Go 操控 Git 底层对象 - PC2005
  • 为什么你的贵阳网站建设端觉体验这么差?资深开发者揭秘那些被忽视的细节
  • 列车车轮缺陷智能检测数据集:800张图像、4大类别,助力铁路安全运维
  • 结晶过程实时监测|助力可降解膜材与聚氨酯制品性能稳定可控
  • 2026年北京通州区保暖服饰源头工厂靠谱推荐:马员外服饰全产业链实力解析 - 企业新闻快传
  • 光伏清洗机器人哪家选哪家:【凌度智能】首选设备 - 秋山寄远
  • 2026年北京门头沟区保暖服饰源头工厂靠谱推荐:马员外服饰全产业链实力解析 - 小随科技
  • 深入解析1uF与0.1uF电容并联:电源去耦设计的核心原理与PCB布局实战