行业资讯
Ubuntu系统升级全攻略:从准备到灾备
1. 项目概述Ubuntu系统升级的典型痛点作为Linux系统管理员Ubuntu LTS版本的跨版本升级是每个运维人员都会遇到的常规操作。从Ubuntu 16.04 LTS(Xenial Xerus)升级到18.04 LTS(Bionic Beaver)看似是一个简单的do-release-upgrade命令但实际操作中总会遇到各种依赖冲突、源配置错误和软件包问题。我在管理超过200台生产服务器时曾因忽视升级前的准备工作导致整个集群出现apt锁死的情况这个教训让我总结出一套完整的升级检查清单。2. 升级前的关键准备工作2.1 系统状态检查清单在按下回车键执行升级命令前这些检查项能避免80%的升级失败# 1. 检查当前系统版本和内核 lsb_release -a uname -r # 2. 确认磁盘空间至少需要5GB空闲空间 df -h / # 3. 检查已安装的第三方PPA可能造成依赖冲突 ls /etc/apt/sources.list.d/ # 4. 验证网络代理设置企业环境常见问题 cat /etc/apt/apt.conf.d/* | grep -i proxy # 5. 检查自动更新服务状态 systemctl status unattended-upgrades重要提示如果发现系统使用了自定义内核如linux-image-extra务必记录下当前内核版本升级后可能需要手动重新安装对应版本。2.2 备份策略实施我采用三级备份方案确保升级可回退系统级快照适用于虚拟化环境# VMware环境创建快照 vmware-toolbox-cmd snapshot create Pre-Upgrade-16.04-to-18.04 # LXC容器备份 lxc-stop -n 容器名 lxc-snapshot -n 容器名关键配置文件备份# 创建备份目录 mkdir ~/ubuntu_upgrade_backup # 备份apt源列表 cp -r /etc/apt/sources.list* ~/ubuntu_upgrade_backup/ # 备份重要配置文件 tar czvf ~/ubuntu_upgrade_backup/etc_backup.tar.gz /etc/ssh/sshd_config /etc/network/interfaces /etc/fstab应用数据备份# 数据库备份示例MySQL mysqldump -u root -p --all-databases ~/ubuntu_upgrade_backup/mysql_all.sql # Web应用备份 tar czvf ~/ubuntu_upgrade_backup/var_www.tar.gz /var/www/3. 升级过程中的典型问题解决方案3.1 更新源配置问题修复当执行sudo apt update出现Failed to fetch错误时按以下步骤处理# 首先替换为国内镜像源以阿里云为例 sudo sed -i s|http://.*archive.ubuntu.com|https://mirrors.aliyun.com|g /etc/apt/sources.list sudo sed -i s|http://.*security.ubuntu.com|https://mirrors.aliyun.com|g /etc/apt/sources.list # 清理旧的软件包列表 sudo rm -rf /var/lib/apt/lists/* sudo apt clean # 重新生成缓存 sudo apt update如果仍然报错可能是SSL证书问题尝试# 临时使用HTTP协议仅测试用 sudo sed -i s|https|http|g /etc/apt/sources.list sudo apt update # 安装CA证书 sudo apt install --reinstall ca-certificates3.2 依赖冲突的深度处理遇到held broken packages错误时这个组合命令通常有效# 尝试自动修复 sudo apt --fix-broken install sudo apt dist-upgrade # 如果仍失败显示详细依赖树 apt-cache depends 冲突包名 # 强制降级特定包示例 sudo apt install 包名版本号我曾遇到libssl1.0.0与openssl的冲突解决方案是# 记录当前版本 apt-cache policy libssl1.0.0 openssl # 手动指定版本安装 sudo apt install libssl1.0.01.0.2g-1ubuntu4.20 openssl1.0.2g-1ubuntu4.20 # 标记为手动保留 sudo apt-mark hold libssl1.0.0 openssl4. 升级后的必要调优工作4.1 服务兼容性验证清单升级完成后必须检查这些关键服务# 网络服务 ip a # 检查网卡命名规则是否变化可能从eth0变为ens192 systemctl restart networking # SSH服务 sshd -t # 配置文件语法检查 systemctl restart sshd # 数据库服务 mysql_upgrade -u root -p # MySQL特定命令 sudo -u postgres psql -c SELECT version(); # PostgreSQL检查4.2 性能调优建议18.04默认使用systemd-resolved处理DNS在企业环境中可能需调整# 禁用systemd-resolved如使用本地DNS缓存 sudo systemctl disable systemd-resolved sudo systemctl stop systemd-resolved # 恢复传统resolv.conf sudo rm /etc/resolv.conf sudo echo nameserver 8.8.8.8 /etc/resolv.conf对于高负载服务器建议调整内核参数# 编辑sysctl配置 sudo nano /etc/sysctl.conf # 添加以下优化参数根据服务器角色调整 net.core.somaxconn 4096 net.ipv4.tcp_max_syn_backlog 4096 vm.swappiness 105. 灾难恢复方案当升级导致系统无法启动时按此流程恢复使用Live CD/USB启动挂载原系统分区mkdir /mnt/rescue mount /dev/sda1 /mnt/rescue # 根据实际分区调整 mount --bind /dev /mnt/rescue/dev mount --bind /proc /mnt/rescue/proc mount --bind /sys /mnt/rescue/syschroot到原系统chroot /mnt/rescue /bin/bash修复关键包apt install --reinstall ubuntu-minimal linux-image-generic重建GRUBgrub-install /dev/sda update-grub6. 自动化升级脚本示例对于需要批量升级的环境我使用如下Ansible playbook--- - name: Ubuntu 16.04 to 18.04 Upgrade hosts: all become: yes vars: target_release: bionic tasks: - name: Check current release command: lsb_release -cs register: current_release changed_when: false - name: Verify upgrade condition fail: msg: Target release must be newer than current when: current_release.stdout target_release - name: Install update manager core apt: name: update-manager-core state: present - name: Configure release upgrade prompt lineinfile: path: /etc/update-manager/release-upgrades regexp: ^Prompt line: Promptlts - name: Perform dist-upgrade command: apt dist-upgrade -y args: warn: no - name: Start system upgrade command: do-release-upgrade -f DistUpgradeViewNonInteractive async: 3600 poll: 30注意自动化升级前必须确保playbook中包含完善的pre-task检查项和post-task验证步骤。
郑州网站建设
网页设计
企业官网