努力
加油

阿里云ECS实例存储空间快满了如何扩容?

ECS 实例磁盘空间满了,这是运维过程中最常见、也最让人头疼的问题之一。别慌,处理这个问题的核心逻辑只有一条:扩容文件系统之前,必须先扩容云盘本身。

很多人容易搞反顺序,导致扩容后系统里看不到新空间,或者更糟——数据丢失。下面我按操作风险从低到高、适用场景分类,给你梳理一套完整的实战方案。

一、 核心原则:先扩盘,再扩文件系统

阿里云的云盘(无论是高效云盘、SSD 云盘还是 ESSD)是块存储设备。你在操作系统里看到的 /dev/vdb 或 /dev/xvda 只是这块物理存储的一个“窗口”。

  • 第一步:在阿里云控制台修改云盘的“大小”属性。这步操作不会立即改变操作系统里的分区大小,它只是扩大了底层存储池。
  • 第二步:在 Linux/Windows 操作系统内部,通过命令或工具识别并扩展文件系统,让操作系统真正使用这部分新增的空间。

二、 具体操作步骤(以最常见的 Linux + LVM + ext4/xfs 为例)

假设你的数据盘挂载点为 /data,对应的云盘设备为 /dev/vdb。

1. 控制台扩容云盘

  1. 登录阿里云 ECS 控制台。
  2. 找到目标实例 -> 点击“云盘”标签页。
  3. 选中你要扩容的那块数据盘,点击“更多” -> “云盘设置” -> “扩容”。
  4. 输入新的容量值(例如从 100G 扩容到 200G),确认订单支付。
  5. 注意:扩容完成后,云盘状态会变为“运行中”,但此时进入服务器 df -h 查看,空间通常不会变。

2. 重启实例(可选但推荐)

虽然大多数现代 Linux 内核支持热加载,但为了确保分区表识别无误,建议重启一次 ECS 实例。如果业务不允许停机,可以尝试执行 echo 1 > /sys/class/block/vdb/device/rescan 来扫描 SCSI 总线,但重启是最稳妥的。

3. 操作系统内扩容

这里分两种情况:LVM 管理 和 非 LVM(直接分区)。

情况 A:使用 LVM(推荐生产环境)

如果你的磁盘是通过 LVM 管理的(大部分云主机默认如此),这是最安全、最灵活的方式。

# 1. 确认当前分区状态
lsblk

# 2. 扩容分区表(假设原分区为 vdb1)
parted /dev/vdb resizepart 1 100%
# 或者使用 fdisk/gdisk,但 parted 对无损扩容支持更好

# 3. 通知 LVM 有新空间
pvresize /dev/vdb1

# 4. 扩容逻辑卷(LV)
lvextend -l +100%FREE /dev/mapper/<vg_name>-<lv_name>
# 例如: lvextend -l +100%FREE /dev/mapper/data-data

# 5. 扩容文件系统
# 如果是 ext4:
resize2fs /dev/mapper/data-data
# 如果是 xfs (CentOS 7+/Ubuntu 18+ 常见):
xfs_growfs /data
情况 B:非 LVM,直接格式化在分区上

这种情况多见于早期创建的实例或特殊定制镜像。操作风险稍高,务必先备份!

# 1. 扩容分区
fdisk /dev/vdb
# 依次输入: d (删除旧分区), n (新建分区), p (主分区), 1 (分区号), 
#           回车(默认起始扇区), 回车(默认结束扇区), w (保存)
# 注意:只要起始扇区不变,文件系统元数据不会损坏,但强烈建议测试环境验证后再上生产。

# 2. 刷新内核分区表
partprobe /dev/vdb

# 3. 扩容文件系统
# ext4:
resize2fs /dev/vdb1
# xfs:
xfs_growfs /data
情况 C:Windows 实例
  1. 控制台扩容云盘。
  2. 进入 Windows 服务器,打开“磁盘管理” (diskmgmt.msc)。
  3. 右键点击对应磁盘 -> “扩展卷”,按照向导完成即可。

三、 高阶方案:不重启、不停机扩容(高级用户)

如果你正在跑高可用集群,无法接受任何重启,且使用的是较新的 Linux 内核(4.x+)和云盘类型(ESSD),可以考虑以下方法:

  1. 在线扩容云盘:在控制台操作时,选择“在线扩容”(部分云盘类型支持)。
  2. 内核热加载:如前所述,使用 rescan 命令。
  3. LVM 在线扩容:上述 pvresize 和 lvextend 配合 resize2fs 或 xfs_growfs 均支持在线操作,无需卸载文件系统。

关键点:确保你的文件系统是 ext4 或 xfs,并且没有挂载为只读。对于 xfs,xfs_growfs 必须指定挂载点路径,而不是设备路径。


四、 避坑指南 & 注意事项

  1. 备份!备份!备份!

    • 在执行任何 fdisk、parted 等分区操作前,必须对关键数据进行快照备份。一旦操作失误导致分区表错乱,恢复成本极高。
    • 推荐使用阿里云“云盘快照”功能,一键创建,随时可回滚。
  2. 根目录(/)扩容要格外小心

    • 系统盘(通常是 /dev/vda 或 /dev/xvda)包含操作系统和引导文件。扩容系统盘的风险远高于数据盘。
    • 如果系统盘满了,优先考虑清理日志、临时文件,或使用 yum clean all 等命令释放空间,而不是盲目扩容。
    • 如果必须扩容系统盘,建议在控制台操作后,重启实例,然后按上述 LVM 步骤操作。不要尝试在不重启的情况下对系统盘进行复杂的分区重组。
  3. 文件系统类型判断

    • 使用 df -T 命令查看文件系统类型。
    • ext4 用 resize2fs。
    • xfs 用 xfs_growfs。
    • 用错了命令会报错,甚至可能导致文件系统损坏。
  4. 扩容上限

    • 单块云盘最大支持 32TiB(具体取决于云盘类型和实例规格)。如果单个磁盘不够,考虑挂载多块数据盘,并使用 LVM 将多块盘合并为一个逻辑卷,实现横向扩容。
  5. 监控与预警

    • 扩容不是长久之计。建议部署 Prometheus + Grafana 或阿里云云监控,设置磁盘使用率超过 80% 时发送告警。
    • 定期清理无用日志、旧版本镜像、缓存文件,比被动扩容更重要。

五、 总结

  • 小修小补:先清垃圾文件,再考虑扩容。
  • 常规扩容:控制台改大小 -> 重启实例 -> 操作系统内 pvresize + lvextend + resize2fs/xfs_growfs。
  • 高风险操作:系统盘扩容或非 LVM 分区调整,务必先做快照。
  • 长期策略:启用自动快照策略,建立磁盘使用监控告警,避免“最后一刻才扩容”的窘境。

记住,云计算的优势在于弹性,但弹性的前提是规范的操作流程。每一步操作前,问自己一句:“如果失败了,我能快速回滚吗?” 如果不能,那就先做快照。