磁盘快满的时候,日志写不进去,数据库开始告警,应用报错一个接一个。很多运维都碰到过这种情况。阿里云云盘支持在线扩容,大多数时候不用停机,在控制台加一下容量就行。但只做这一步,新空间通常用不上。分区和文件系统也要跟着调整,漏掉任何一层,df -h 里的数字都不会变。

这篇文章讲三件事:扩容前要确认什么,控制台和命令行怎么操作,扩容后怎么让系统认出新空间。最后用一个案例说明卡住时该怎么查。
先理清三层关系
云盘扩容要分三层看:云盘容量、块设备大小、文件系统。云盘容量在阿里云侧调整。调完以后,系统里的块设备大小会更新,但分区表和文件系统不会自动变大。三层都调整完,新空间才能写数据。
系统盘和数据盘的扩容流程基本一样。区别在于系统盘出错可能影响整台机器能否启动,操作时要更谨慎。
还有两点要提前想好。云盘只能扩大不能缩小,目标容量定得太小,以后只能迁移数据重建。另外,部分老旧云盘类型或实例规格对扩容有限制,动手前到官方文档核对一下当前类型是否支持。
动手前的四项检查
- 创建快照:重要数据盘先做快照。快照不影响业务运行,出问题时可以回滚。
- 记录分区结构:执行 lsblk 或 fdisk -l,记下挂载点和分区号。growpart 那一步要用到。
- 确认文件系统类型:执行 df -Th,区分 ext4 和 xfs。两者的扩展命令不同,用错了白费功夫。
- 挑低峰期操作:在线扩容本身风险不大,但分区和文件系统调整期间仍可能出问题,尽量避开业务高峰。
控制台扩容
进入 ECS 控制台,选择“存储与快照”下的“块存储”,找到目标云盘,点“扩容”,填入新容量并确认。云盘状态会先变成“扩容中”,完成后回到“使用中”。通常几分钟能结束,容量越大耗时越长。
习惯命令行的话,可以用阿里云 CLI 完成同样的操作。磁盘 ID 和地域换成你自己的:
# 将云盘 d-bp1xxxxxxxxxxxx 扩容到 200 GiB
aliyun ecs ResizeDisk --DiskId d-bp1xxxxxxxxxxxx --NewSize 200 --region cn-hangzhou
提交后用下面的命令确认状态:
aliyun ecs DescribeDisks --RegionId cn-hangzhou --DiskIds '["d-bp1xxxxxxxxxxxx"]'
这一步结束后,服务器上 df -h 显示的仍是旧值。这是正常的。云盘已经变大,系统内部的调整还没做。
系统内部同步扩容
具体怎么做,取决于磁盘有没有分区表。
整盘直接使用(未分区)
先确认块设备大小已经更新,再扩展文件系统:
# 查看块设备大小(假设设备为 /dev/vdb)
lsblk /dev/vdb
# ext4 在线扩展
resize2fs /dev/vdb
# xfs 在线扩展,参数是挂载点
xfs_growfs /data
如果 lsblk 仍显示旧容量,先不要改文件系统。可以根据内核和设备类型尝试刷新设备,比如 SCSI 类设备可以向 /sys/class/block/设备名/device/rescan 写入 1。刷新无效时再考虑重启实例,生产环境重启前要先评估影响。
已有分区
有分区时,先扩分区,再扩文件系统。growpart 能在不删除分区的前提下调整分区大小,比手动删分区重建安全。
# 安装 growpart(CentOS / Alibaba Cloud Linux 上包名通常为 cloud-utils-growpart)
yum install -y cloud-utils-growpart
# 扩大第 1 个分区
growpart /dev/vdb 1
# ext4 文件系统扩展
resize2fs /dev/vdb1
# 或 xfs 文件系统扩展
xfs_growfs /data
完成后用 df -h 确认挂载点的可用容量已经增加。
一个实际案例:云盘扩了,容量没变
某电商团队的 MySQL 服务器数据盘长期使用率超过 90%。运维同事在控制台把云盘从 100 GiB 扩到 300 GiB,但 df -h 仍显示 100 GiB 左右,业务日志里还是磁盘空间不足。
排查时按层次逐一确认。lsblk 显示块设备已经是 300 GiB,说明云盘扩容没有问题。接着看分区,数据盘上的 ext4 分区还是 100 GiB,问题出在分区这一层,没有同步调整。
团队在业务低峰期先用 growpart 扩大分区,再用 resize2fs 扩展文件系统。df -h 显示容量已更新为约 300 GiB,全程约十分钟,数据库没有中断。
控制台显示扩容成功,只说明云盘变大了。系统里能用的空间有没有增加,要看 df -h。卡住时按云盘、块设备、分区、文件系统的顺序往下查,通常能很快找到断在哪一层。
常见问题
- 扩容后 lsblk 没变化:先刷新设备。还不行再考虑重启,重启前确认业务能否中断。
- growpart 报 NOCHANGE:要么分区已经占满可用空间,要么云盘扩容还没生效。先回到 lsblk 看块设备大小。
- xfs 不能缩小:xfs 只支持扩大,这一点和 ext4 不同。规划容量时要留余量,真要缩小只能重建。
- 系统盘扩容:步骤和数据盘相同,但出错的影响更大。先做快照,最好在测试环境走一遍。
收尾
扩容流程本身不复杂,难点在于每一层都要确认。每次操作前做快照,操作中逐层检查,操作后用 df -h 验证。把这套步骤写进团队的运维手册,下次磁盘告急时就能照着处理。