直接给结论:默认情况下,数据会丢失。
阿里云 ECS(云服务器)在控制台点击“重装系统”时,本质上是一次重新初始化云盘的操作。这意味着:
- 系统盘(System Disk):会被完全格式化并写入新的操作系统镜像。你原本安装在系统盘上的所有文件、配置、软件、数据库等都会消失。
- 数据盘(Data Disk):默认情况下,不会被清除。只要你没有手动勾选“同时重置数据盘”或者执行了类似
fdisk -f这种危险操作,挂载在实例上的数据盘里的内容通常是安全的。
但!这里有几个极其重要的“坑”,很多人栽在这里:
1. “重装系统” ≠ “更换操作系统”
很多用户以为只是从 CentOS 7 换成 Ubuntu 18.04,但实际上,“重装系统”这个动作在底层是删除旧系统盘 -> 创建新系统盘 -> 挂载新系统盘。
- 如果你的应用数据、网站代码、数据库都放在
/var/www、/home或者/data目录下,而这些目录恰好位于系统盘上,那么恭喜你,全没了。 - 只有那些明确挂载为独立数据盘(比如
/dev/vdb挂载到/mnt/data)的内容,才大概率保留。
2. 快照才是唯一的救命稻草
在点击“重装系统”之前,必须做一件事:创建系统盘和数据盘的快照。
- 如果数据在系统盘上,且没做备份,重装后想恢复?除非你有之前的快照,否则神仙难救。
- 阿里云的快照功能是按小时增量备份的,成本极低,建议对重要实例开启自动快照策略。
3. 特殊场景:自定义镜像 vs 公共镜像
- 使用公共镜像重装:肯定丢数据(系统盘部分)。
- 使用自定义镜像重装:如果你之前用某个状态良好的系统创建了“自定义镜像”,然后用这个镜像重装,那么系统盘会恢复到那个镜像的状态。但这依然不是“保留当前运行中的数据”,而是“回滚到过去某个时间点的数据”。
4. 云盘类型的影响
- ESSD / SSD 云盘:性能高,但重装逻辑不变,依然是覆盖写入。
- 本地盘实例:某些老旧或特定高性能实例使用本地物理磁盘,这类实例不支持快照,也不支持灵活重装。一旦重装或故障,数据极难恢复。请务必确认你的实例是否使用了本地盘。
正确做法:如何安全地“换系统”而不丢数据?
如果你真的需要更换操作系统(比如从 Windows Server 2012 换成 Linux),请按以下步骤操作:
-
评估数据位置:
- 登录服务器,执行
df -h查看各个分区挂载点。 - 区分哪些是系统盘(通常
/根目录所在盘),哪些是数据盘。
- 登录服务器,执行
-
备份关键数据:
- 方法一(推荐):对系统盘和数据盘分别创建快照。这是最稳妥的,万一出错可以一键回滚。
- 方法二:将数据盘中的业务数据打包下载到自己的电脑,或者上传到 OSS(对象存储)、NAS 等其他存储服务。
- 方法三:如果数据量不大,可以用
tar命令打包压缩,通过 SCP/SFTP 传到另一台机器。
-
执行重装:
- 在阿里云控制台选择“重装系统”,选择新的镜像版本。
- 注意:确保只勾选系统盘操作,不要误触其他选项。
-
恢复数据:
- 重装完成后,服务器 IP 不变(如果是弹性公网IP),SSH/RDP 连接进去。
- 检查数据盘是否还在,是否还能挂载。
- 将之前备份的数据还原回去。
高阶玩家建议:架构解耦
为了避免未来再出现这种焦虑,建议在架构设计上做到:
- 系统与数据分离:永远不要把生产环境的核心数据放在系统盘上。系统盘只装操作系统和基础服务,业务数据全部放在独立的数据盘、OSS、RDS(云数据库)或 NAS 中。
- 使用镜像市场或 Packer 构建标准化镜像:如果你经常需要重建服务器,不如花时间去学习如何使用 Ansible/Terraform/Packer 来自动化部署环境。这样即使服务器挂了,几分钟内就能拉起一台全新的、配置一致的服务器,而不是依赖“重装系统”这种高风险操作。
总结
| 操作 | 系统盘数据 | 数据盘数据 | 建议 |
|---|---|---|---|
| 直接点击“重装系统” | ❌ 丢失 | ✅ 通常保留(未格式化前提下) | 极度危险! |
| 先创建快照,再重装 | ❌ 可快照恢复 | ✅ 可快照恢复 | 标准流程 |
| 先导出数据,再重装 | ✅ 已备份 | ✅ 已备份 | 最安全 |
一句话忠告:在阿里云(以及任何主流云厂商)上,没有快照的重装系统,等同于裸奔。别手滑,先备份。
云技术博客