ECS 云硬盘在线扩容实战:从控制台扩容到文件系统生效的完整闭环
背景
一台跑了半年多的 ECS,挂了一块 40 GB 的数据盘 /dev/vdb,挂载在 /data,上面放着应用日志和上传文件。最近磁盘使用率一路涨到 88%,应用已经开始报“磁盘空间不足”。加盘、迁移数据都要停服务,成本太高;最直接的办法是给这块云硬盘在线扩容到 100 GB,全程不用关机、不用卸载。
扩容前的三件事
1. 先做备份。 任何涉及分区的操作,先给云硬盘打一个快照或做一次云硬盘备份,出问题能回滚。这是唯一不可省略的步骤。
2. 确认分区表和文件系统。
lsblk -f
fdisk -l /dev/vdb
df -hT /data
重点看两点:分区表是 MBR 还是 GPT;文件系统是 ext4 还是 XFS。MBR 单盘上限 2 TB,超过要转 GPT;ext4 和 XFS 扩容用的命令不一样。
3. 确认云硬盘状态。 控制台里磁盘状态要在“正在使用”,且没有正在进行的扩容、备份任务。
第一步:控制台扩容云硬盘
进入控制台 → 弹性云服务器 ECS → 云硬盘,找到目标磁盘,点“扩容”,把容量从 40 GB 改到 100 GB,确认后等待状态回到“正在使用”。
这一步只改了云侧的磁盘容量,操作系统里看到的磁盘变大了,但分区和文件系统还没变。
第二步:确认操作系统已识别新容量
lsblk
此时 /dev/vdb 应显示 100G,而 /dev/vdb1 仍是 40G。说明磁盘已扩,分区未扩。
第三步:扩容分区
用 growpart 扩分区(cloud-utils-guest-utils 包提供,未安装先装):
yum install -y cloud-utils-growpart # CentOS / EulerOS
apt install -y cloud-guest-utils # Ubuntu / Debian
growpart /dev/vdb 1
lsblk
执行后 /dev/vdb1 应变为 100G。注意 growpart 的参数是磁盘名加分区号,中间有空格;GPT 分区表执行时会提示修复,确认即可。
没有 growpart 时也可以用 parted 的 resizepart,但 growpart 对在线分区更友好,不用卸载文件系统。
第四步:扩容文件系统
ext4 和 XFS 的命令不同,别用错:
# ext4
resize2fs /dev/vdb1
# XFS
xfs_growfs /data
两条命令都不需要卸载,执行完立即生效。XFS 只能扩不能缩,扩之前想清楚容量。
第五步:验证
df -h /data
lsblk
/data 应显示 100G,可用空间同步增长。再写一个测试文件确认可写,顺手把磁盘使用率告警阈值同步调整,避免下次在 88% 才发现。
常见坑
- 扩完控制台,忘了扩分区和文件系统。 只做第一步,df 看到的容量不会变,三步缺一不可。
- MBR 分区想扩到 2 TB 以上。 MBR 有 2 TB 上限,超了要先转 GPT 再扩,别等扩到一半才发现。
- resize2fs 用在 XFS 上。 ext4 的命令对 XFS 无效,XFS 必须用 xfs_growfs,反过来也一样。
- 扩容前不做快照。 分区操作一旦失误,数据恢复的成本远高于一次快照。
- 以为必须重启。 在线扩容全程不需要重启实例,业务可以一直跑着。
小结
云硬盘在线扩容就四步:控制台扩容量 → growpart 扩分区 → resize2fs/xfs_growfs 扩文件系统 → df 验证。核心经验是:操作前先备份,操作中分清 MBR/GPT 和 ext4/XFS,操作后用 df 和实际写文件双重验证。按这个流程走,一块盘的扩容十分钟内可以完成,业务零中断。
- 点赞
- 收藏
- 关注作者
评论(0)