努力
加油

升级到 Ubuntu Server 24.04 LTS 有哪些需要注意的事项?

升级 Ubuntu Server 24.04 LTS (Noble Numbat) 和桌面版不同,服务器环境讲究的是“稳”、“准”、“狠”。作为长期混迹 Linux 运维圈的人,我直接给你列几个最核心的坑和注意事项,别等上线了再哭。

1. 先确认你的硬件架构和内核支持

24.04 默认的内核是 6.8(HWE 栈),这对新硬件(特别是近两年的 CPU、网卡、NVMe SSD)支持更好。但如果你跑的是老旧的专用硬件(比如某些老款 RAID 卡、特定型号的 GPU 或工业控制设备),务必先去查厂商官网是否提供了 Ubuntu 24.04 的驱动包。

  • 动作:检查 /var/log/dmesg 里有没有关键的驱动加载失败报错。如果有,别急着升,先找驱动。

2. “原地升级” vs “全新安装”

这是最大的争议点。对于生产环境,我的建议非常明确:除非你是个人测试机,否则强烈建议备份后全新安装。

为什么?因为 do-release-upgrade 在处理复杂的服务配置(如 Nginx, MySQL, Docker, K8s 组件)时,经常会出现配置文件冲突、依赖关系混乱的问题。虽然官方文档说可以原地升级,但在实际生产中,它就像拆弹,稍有不慎就导致服务起不来。

  • 如果必须原地升级:
    • 确保系统完全更新到当前版本的最新状态(apt update && apt full-upgrade)。
    • 清理第三方源(PPA),这些源在 24.04 上大概率会失效。
    • 记录所有自定义的 systemd service 文件和 crontab 任务。

3. Python 版本的变化:从 3.10 到 3.12

这是一个容易被忽视的破坏性变更。Ubuntu 24.04 将默认 Python 版本提升到了 3.12。

  • 影响:如果你的业务代码强依赖 Python 3.10 或 3.11 的特定行为,或者使用了基于 C 扩展的库(如 numpy, pandas, scipy),这些库可能没有预编译好的 wheel 包适配 3.12,你需要重新编译。
  • 注意:很多旧脚本假设 python 命令存在,现在可能需要显式使用 python3。检查你的 shebang (#!/usr/bin/env python) 是否指向了正确的解释器。

4. Systemd 和日志系统的细微变化

24.04 继续强化 systemd-journald 的地位。

  • Journal 轮转:默认的日志保留策略可能变了,检查 /etc/systemd/journald.conf,确保 MaxUse 和 MaxFileSec 符合你的审计要求。
  • NetworkManager vs Netplan:Server 版依然推荐用 Netplan。但要注意,Netplan 的后端生成器对 NetworkManager 的支持在增强。如果你之前手动改过 /etc/network/interfaces,现在可能被忽略或冲突。统一用 Netplan YAML 文件管理网络是最佳实践。

5. 安全模块:AppArmor 更严格了

24.04 启用了更严格的 AppArmor 配置文件,尤其是针对 snap 包和核心系统服务。

  • 风险:某些自定义部署的应用(非 snap,非 deb 包管理的)可能会因为权限不足被 AppArmor 拦截,导致无法启动或无权限访问资源。
  • 排查:如果应用启动失败,第一时间看 dmesg | grep apparmor 或 /var/log/syslog 里的 DENIED 记录。可能需要临时设置为 complain 模式调试。

6. 云厂商镜像的差异

如果你是在阿里云、腾讯云、华为云等国内云厂商上运行:

  • 不要直接用官方 ISO 装完就跑! 云厂商通常会提供定制化的 Ubuntu 24.04 镜像,里面预装了 cloud-init、特定的内核模块(如 virtio-net, virtio-scsi)和监控XX。
  • 检查 cloud-init:确保 /etc/cloud/cloud.cfg.d/ 下的配置文件没有被本地修改覆盖。升级后,cloud-init 的状态很重要,它决定了实例能否正确获取 IP、设置主机名和注入 SSH 密钥。
  • 内核版本:云厂商往往有自己的 HWE 内核分支,建议保持与云厂商推荐的内核一致,以获得最好的虚拟化性能优化。

7. 备份!备份!备份!

这听起来像废话,但我见过太多人跳过这一步。

  • 最小化备份:至少备份 /etc, /var/lib/docker (如果用 docker), /var/lib/mysql (或用逻辑导出), 以及所有自定义脚本。
  • 快照:如果是云服务器,在操作前打一个系统盘快照。这是最后的救命稻草。

总结 checklist:

  1. [ ] 全量备份数据 + 系统快照。
  2. [ ] 检查关键服务的兼容性(Python, Java, DB, Web Server)。
  3. [ ] 清理第三方 PPA 源。
  4. [ ] 测试环境先行验证(先在非生产机器上做同样操作)。
  5. [ ] 升级后,立即检查 systemctl status 所有自启服务是否正常。
  6. [ ] 检查防火墙规则(UFW)是否因升级被重置或冲突。
  7. [ ] 观察日志,特别是 AppArmor 和内核错误信息。

最后,Ubuntu 24.04 是一个优秀的 LTS 版本,支持周期长,安全性好。但只要按规范操作,做好预案,升级过程其实很平滑。别慌,一步步来。