会丢,但丢的主要是系统盘上的内容。阿里云换镜像时系统盘会被重新初始化,写在系统盘里的程序、日志和配置都会清空。数据盘上的内容一般保留,不过动手前最好先确认,并做好备份。很多人在系统升级或环境迁移时都会遇到这个需求,比如老服务器的 CentOS 7 已经停止维护,需要换成更新的系统;或者团队统一了基础环境,要让新实例的操作系统保持一致。换镜像看起来只是几次点击,处理不好就容易丢数据、丢配置。

一个案例
某电商团队有一台用了四年的 ECS 实例,系统是 CentOS 7.6,上面跑着 Nginx、MySQL 和一批定时任务脚本。系统生命周期快到头了,运维打算换成 Alibaba Cloud Linux 3。他们没有直接在线上动手,而是先做了三件事。
第一件事是理清数据边界。系统盘里的程序和配置会被清空,挂在数据盘上的数据库文件不受影响。团队把 MySQL 的数据目录迁到了独立数据盘,后面换镜像才有底气。如果你的数据库还和系统盘混在一起,这一步要先做。
第二件事是给系统盘打快照。在 ECS 控制台的云盘管理里对系统盘创建快照,记下快照 ID 和创建时间,免得以后找不到。快照是回滚的依据,新系统要是出了问题,还能恢复到原来的状态。
第三件事是在测试实例上演练。团队用快照拉起一台临时实例,在上面执行换镜像,检查应用能否正常启动,端口和域名解析是否正常,定时任务能不能跑。这一步前后不到一小时,却提前暴露了几个问题。
换镜像的基本流程
下面的步骤按控制台常见路径整理,按钮名称和位置请以阿里云当前页面为准,界面调整时可能会有差别。
- 进入 ECS 控制台找到目标实例,确认状态为“已停止”。有些实例类型必须先停机才能更换操作系统,没停机直接操作通常会被拦下来。
- 在实例操作菜单里选择“更多”,找到“磁盘和镜像”下的“更换操作系统”入口。
- 选择镜像来源,可以是公共镜像、自定义镜像或共享镜像。案例中团队选的是公共镜像里的目标版本。如果用的是自定义镜像,先确认它和当前业务环境是否匹配。
- 设置登录凭据,推荐使用密钥对。明文密码如果写进脚本或工单,后续管理中很容易泄露。
- 核对提示信息后提交。系统盘重新初始化需要一点时间,实例启动后先逐个检查服务状态,确认没问题再切流量。
换之前要备份什么
备份不要只做系统盘快照,下面这几类内容也要单独处理,否则换完之后很难找回。
- 系统盘快照:对系统盘创建快照并记录 ID,这是最后的回滚手段。
- 数据库逻辑备份:对 MySQL 做一次导出,比如用 mysqldump 生成 SQL 文件,并把文件同步到数据盘以外的位置。
- 应用代码和配置目录:Nginx 的配置文件、应用目录、证书和密钥文件要单独打包,不要只依赖快照。
- 定时任务:导出 crontab 内容,同时保留脚本文件,换完后逐条对照检查。
- 网络配置:记录安全组规则、白名单、域名解析记录,换之后要用来比对。
容易被忽略的几个风险点
系统盘数据会被清空。这是换镜像最直接的风险。写在系统盘里的应用、日志和配置,只要没有备份,换完就找不回来。数据盘内容一般保留,但仍建议一并做快照,多一层保险。
内网 IP 和实例 ID 通常不变,公网 IP 要看情况。负载均衡后端、白名单和域名解析都依赖这些地址。如果公网 IP 有变化,解析记录和安全组规则要同步调整,否则服务可能正常启动,外部却访问不到。换之前以控制台的实际提示为准。
应用依赖需要重新验证。从 CentOS 换到其他发行版后,glibc、OpenSSL 版本和 yum 源都可能不同。案例中 Nginx 的一个第三方模块因为编译版本不匹配无法加载,是在测试阶段发现的。如果你的服务有自行编译的组件,这类问题最容易漏掉。
镜像选择要和业务兼容性一起考虑。版本号是最新的,不代表最适合你的应用。
出问题时怎么回滚
服务异常时,最稳妥的办法是用之前的系统盘快照回滚。先停止实例,在云盘管理里选择快照执行回滚;或者用快照创建新的系统盘,再挂载替换。回滚会覆盖当前系统盘的全部内容,所以执行前要确认新系统里有没有还没备份的东西,比如刚生成的日志或临时改过的配置。
团队最终的做法是:先在测试实例上完整验证,线上操作安排在业务低峰期,操作前完成快照和数据库逻辑备份,操作后保留旧快照至少七天。整个过程耗时约两小时,业务中断控制在二十分钟以内。
换镜像本身不复杂,真正花时间的是准备。把数据边界划清、快照和备份做好、在测试实例上跑一遍,线上操作就只是按步骤执行。拿不准的地方,先在非生产环境验证。