AWS如何比对两个AMI差异 排查旧AMI相对于基础镜像的修改
自定义AMI修改项排查与迁移方法
核心思路是用同版本官方原生Ubuntu 18.04 AMI作为基准参照物,和你持有的自定义AMI做逐项比对,就能把所有无记录的修改全部梳理清楚,具体操作步骤如下:
- 准备比对环境
启动两台同规格、同可用区的EC2实例,一台使用你现有的自定义Ubuntu 18.04 AMI,另一台使用官方发布的、和你当初制作自定义AMI时完全同小版本的Ubuntu 18.04 AMI(比如初始基础镜像是18.04.6就不要用18.04.1),两台实例启动后不要做任何额外修改,避免引入无关差异。 - 排查文件系统层面变更
首先确认文件系统调整项:在两台实例分别执行lsblk -f,对比分区结构、文件系统类型、挂载点配置,直接就能定位你之前做的文件系统类型修改、分区大小调整、新增/删除分区的操作记录。
先筛除包管理管控的文件篡改:在自定义AMI启动的实例上执行dpkg -V,命令会自动扫描所有apt安装包的所属文件,标记出被修改过权限、哈希值、属主的文件,这部分是你手动改过的系统或软件配置。
再排查自定义拷贝的文件:排除/proc、/sys、/dev、/run、/tmp、/var/cache、/var/log这类运行时动态生成的目录,通过文件清单对比的方式,找出自定义实例上多出来的、内容不一致的文件,重点排查/etc、/opt、/usr/local、/home、/root这类常存放自定义内容的路径即可。 - 排查系统配置与预装内容差异
- 软件包差异:两台实例分别执行
dpkg --get-selections > /tmp/pkg_list.txt、snap list > /tmp/snap_list.txt,对比导出的文件,就能列出自定义AMI额外安装、卸载的所有软件。 - 启动项与服务差异:分别执行
systemctl list-unit-files --state=enabled > /tmp/enable_service.txt导出开机自启服务列表,对比/etc/cron.d、/etc/cron.hourly等定时任务目录下的文件,找出自定义添加的自启服务、定时脚本。 - 系统参数差异:分别导出
sysctl -a内核参数、/etc/security/limits.conf资源限制配置、iptables-save防火墙规则、/etc/passwd和/etc/group用户组配置,对比找出自定义调整的参数项。 - 内核与引导差异:执行
uname -a确认自定义AMI是否更换过内核,对比/etc/default/grub的引导参数,确认是否添加过自定义启动选项。
- 软件包差异:两台实例分别执行
- 校验后迁移到22.04版本
把所有排查到的修改整理成操作清单,先在全新的Ubuntu 18.04实例上按清单复现所有操作,验证功能和原有自定义AMI完全一致,确认没有遗漏项后,再将配置适配到Ubuntu 22.04环境——注意18.04到22.04跨度两个LTS版本,部分软件包名、配置路径可能有变化,不要直接硬拷贝旧版本文件,适配完成后即可打包生成新的22.04版本AMI。
比对前不要给两台实例安装系统更新,保持初始镜像状态即可,避免官方补丁带来的无效差异,减少排查工作量。
内容的提问来源于stack exchange,提问作者Kaushik Vijayakumar
相关产品推荐
相关产品推荐

