系统盘更换(无论是云厂商的“重装系统”功能,还是物理机的硬盘替换)本质上是一次裸机重置。数据盘通常不受影响,但系统盘里的 OS 环境、应用配置、服务状态全部归零。
如果处理不好,会出现“业务恢复慢”、“服务起不来”或者“安全组/防火墙策略失效”导致网络不通的情况。以下是基于生产环境经验的完整操作清单,按优先级排序:
一、 核心基础设施与网络层
-
确认 IP 地址与路由
- 弹性公网 IP (EIP):如果是绑定 EIP,重启后通常会自动关联,无需操作。但务必登录控制台检查 EIP 是否仍绑定在该实例上。
- 固定内网 IP:大多数云平台在重装系统后会保留原有的私网 IP。进入新系统后,立即执行
ip addr或ifconfig确认 IP 是否正确。如果发现 IP 变了(极少见,取决于云厂商实现),需要重新配置/etc/network/interfaces(Debian/Ubuntu) 或/etc/sysconfig/network-scripts/ifcfg-eth0(CentOS/RHEL)。 - 主机名 (Hostname):重装后主机名通常会重置为默认值(如
localhost或云厂商生成的 ID)。如果你们的监控、DNS 解析或集群软件依赖主机名,请立即修改并同步到 DNS 和 hosts 文件中。
-
安全组与防火墙
- 安全组 (Security Group):这是云层面的访问控制。重装系统不会改变安全组规则。但是,你需要确认新系统的内部防火墙(iptables/firewalld/ufw)是否放行了对应端口。
-
内部防火墙:新系统是干净的,默认可能开启 firewalld 且只允许 SSH。如果你运行 Web 服务,必须手动开放 80/443 端口。
# CentOS/RHEL 示例 firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload # Ubuntu 示例 ufw allow 80/tcp ufw enable
二、 运行时环境与依赖
-
安装基础依赖包
- 不要指望新系统里有 Nginx, MySQL, Redis, Docker 等。你需要从备份中提取安装包,或者从官方源重新安装。
- 关键点:记录旧系统的软件版本!特别是数据库内核版本、JDK 版本、Python 版本等。不同小版本的兼容性可能导致代码报错。
- 建议编写自动化脚本(Ansible/SaltStack)或使用 Docker 镜像来快速还原环境,避免手动安装的疏漏。
-
时区与时间同步
- 新系统默认时区可能是 UTC。国内业务务必设置为
Asia/Shanghai。 - 检查
timedatectl status或date。 - 确保 NTP 服务正常运行,日志时间和业务时间一致至关重要,否则排查问题时会疯掉。
- 新系统默认时区可能是 UTC。国内业务务必设置为
三、 数据挂载与权限
-
数据盘挂载
- 系统盘换了,数据盘(如
/dev/vdb,/dev/xvdb)还在。但新系统里可能没有自动挂载点。 - 检查
/etc/fstab是否保留了数据盘的挂载配置。如果没有,需手动挂载:mount /dev/vdb1 /data - 权限校验:这是最容易踩的坑。新系统创建的用户 UID/GID 可能与旧系统不一致。如果你的应用以特定用户(如
www-data,nginx,mysql)运行,需要确保这些用户存在,并且对/data目录有读写权限。chown -R nginx:nginx /data/www chmod -R 755 /data/www
- 系统盘换了,数据盘(如
-
数据库迁移与启动
- MySQL/MariaDB:直接启动服务即可读取数据文件。但注意字符集设置(
my.cnf中的default-character-set=utf8mb4),防止中文乱码。 - PostgreSQL:需要确认
postgresql.conf和pg_hba.conf的配置,特别是认证方式(md5/scram-sha-256),新系统默认配置可能拒绝远程连接。 - Redis:纯内存数据库,重启即清空。确保你的持久化文件(RDB/AOF)在数据盘上,且路径正确。启动后检查是否加载了正确的 dump 文件。
- MySQL/MariaDB:直接启动服务即可读取数据文件。但注意字符集设置(
四、 应用部署与配置
-
配置文件还原
- 将备份的
nginx.conf,php-fpm.conf,application.yml等配置文件拷贝回对应目录。 - 环境变量:检查
.bashrc,.profile,/etc/environment中是否有自定义的环境变量(如 JAVA_HOME, PATH)。很多应用在启动时依赖这些变量。
- 将备份的
-
证书与密钥
- SSL/TLS 证书(
.crt,.key)必须从备份中恢复。新系统没有这些文件,HTTPS 将无法工作。 - API 密钥、数据库密码等敏感信息,建议使用密钥管理工具(如 Vault)或加密的配置文件,不要硬编码。
- SSL/TLS 证书(
-
进程守护与自启动
- 新系统是干净的,所有服务都是停止状态。
- 使用
systemctl enable <service>将关键服务设为开机自启。 - 对于非标准管理的进程,检查 crontab 是否已恢复定时任务。
五、 验证与监控
-
业务连通性测试
- 先本地 curl 测试接口:
curl http://127.0.0.1:80 - 再内网其他机器测试:确保同 VPC 内的服务器能访问该实例。
- 最后公网测试:通过域名或 EIP 访问。
- 先本地 curl 测试接口:
-
日志检查
- 查看
/var/log/messages,/var/log/syslog, 以及应用自身的日志(如/var/log/nginx/error.log)。 - 重点查找:Permission denied, Connection refused, File not found 等错误。
- 查看
-
监控XX重装
- 如果你使用了 Zabbix, Prometheus Node Exporter, CloudMonitor 等 agent,新系统里没有这些进程。
- 需要重新安装 Agent,并更新其配置文件中的 Hostname 或 Instance ID,以便监控平台能识别这台新机器。
六、 避坑指南(经验之谈)
- 不要急于割接流量:先在后台跑完所有测试用例,确认无报错后再切换 DNS 或负载均衡权重。
- 备份旧系统快照:在点击“重装系统”之前,务必对当前系统盘打一个快照。万一新系统配置错了,可以一键回滚,省时省力。
- 注意磁盘格式:确认新系统使用的文件系统(ext4/xfs)与数据盘一致。虽然云厂商通常统一,但自行分区时容易出错。
- SSH 密钥:如果使用公钥登录,新系统默认的
/etc/ssh/sshd_config可能禁用了公钥登录(PubkeyAuthentication no),记得检查并启用,同时将自己的公钥加入/root/.ssh/authorized_keys。
总结流程:
重装 -> 配网络/IP -> 开防火墙 -> 装依赖 -> 挂数据盘 -> 调权限 -> 拷配置 -> 启服务 -> 查日志 -> 验业务 -> 加监控。
按这个顺序走,基本不会翻车。
云技术博客