华为云云硬盘 EVS 扩容实战:先快照兜底,再扩分区与文件系统的完整流程
业务跑了一段时间后,云服务器的数据盘用满几乎是必然会遇到的问题:日志越积越多,数据库文件越来越大,某天监控一报警,磁盘使用率已经逼近上限。华为云的云硬盘 EVS 支持扩容,但很多同学以为在控制台点一下“扩容”就结束了,结果登录系统一看,容量还是老样子。本文把整个流程拆成“扩容前检查、快照兜底、控制台扩容、系统内扩展、验证与收尾”五步,并附上常见坑。文中涉及的支持范围、限制条件和计费规则,请以你所在区域控制台和官方文档的最新说明为准。
一、先搞清楚扩容到底分几层
云硬盘扩容其实是三层容量依次变大的过程,缺一层,应用都看不到新增空间:
- 云硬盘本身:在控制台把磁盘从当前容量扩到更大的容量,这一步由云平台完成。需要注意,云硬盘只能扩大,不能缩小,所以目标容量要想清楚,不要为了图省事一次扩得过大。
- 分区:如果磁盘上有分区表和分区,分区的大小不会自动跟着变,需要手动扩展分区。如果直接把整块盘格式化成文件系统而没有分区,则这一步可以跳过。
- 文件系统:分区变大后,ext4、xfs 等文件系统还要执行对应的扩展命令,df 看到的容量才会增加。
所以“控制台显示扩容成功,系统里容量没变”大多不是故障,而是后两层还没做。
二、扩容前的检查清单
- 确认要扩的是系统盘还是数据盘,以及云服务器当前是运行中还是已关机。是否支持在线扩容(不停机),与云服务器和磁盘的类型、操作系统版本有关,具体以控制台提示和官方文档为准;条件不确定时,选择业务低峰期并提前通知相关方。
- 在系统里用 lsblk 和 df -hT 记录当前状态:设备名、分区、挂载点和文件系统类型。设备名以 lsblk 的实际输出为准,不要照抄别人的 /dev/vdb。
- 确认文件系统类型。ext4 和 xfs 的扩展命令不同,用错命令会直接报错。
- 确认云硬盘没有处于其他变更操作中,例如正在做快照回滚、正在挂载或卸载。
- 了解计费变化。扩容后磁盘按新容量计费,包年包月磁盘扩容可能涉及补差价,具体规则以价格详情和订单页面为准。
lsblk df -hT mount | grep -E '^/dev/'
三、动手之前先打一个快照
扩容本身通常是安全的,但分区表和文件系统的操作属于变更类动作,一旦手滑(比如对错了设备、分区起始位置被改动),后果可能很严重。成本最低的保险就是在操作前给这块云硬盘创建一个快照。
- 在控制台云硬盘列表里找到目标磁盘,创建快照,名称里写清楚日期和用途,例如“扩容前-数据盘-日期”。
- 等快照状态变为可用后再继续。快照是否能覆盖你的一致性要求,取决于业务:数据库类应用最好先做一次应用层的刷盘或短暂停写,避免快照里留下不一致的数据。
- 快照可以用来把数据盘回滚到创建快照时的状态。回滚会覆盖当前数据,使用前务必确认,并且要清楚回滚是针对源云硬盘进行的。
- 确认扩容一切正常、业务验证通过后,再根据保留策略决定快照保留多久,不要无限期堆积,快照同样会产生费用,具体以官方计费说明为准。
四、在控制台执行扩容
- 进入云硬盘列表,找到目标磁盘,选择“扩容”。
- 填写扩容后的目标容量,注意它必须大于当前容量,并且不能超过该类型磁盘的容量上限,上限请以控制台提示为准。
- 确认订单并提交,等待磁盘状态恢复为正常。此时在控制台能看到新容量,但系统里还看不到。
五、在 Linux 系统内扩展分区和文件系统
下面以一块有单个分区的数据盘为例,假设 lsblk 显示磁盘是 /dev/vdb,分区是 /dev/vdb1。示例中的设备名仅作演示,请务必替换成你自己的。
第一步,刷新并确认磁盘容量已经被系统识别:
lsblk # 看 /dev/vdb 的 SIZE 是否已经变大,而 /dev/vdb1 还是旧大小
第二步,扩展分区。cloud-utils-growpart 提供的 growpart 命令可以在不改变分区起始位置的情况下扩大分区,注意磁盘名和分区号之间有一个空格:
# 如果提示命令不存在,先安装 growpart(包名因发行版而异) sudo growpart /dev/vdb 1 lsblk
第三步,按文件系统类型扩展文件系统:
# ext4:对分区设备执行 sudo resize2fs /dev/vdb1 # xfs:对挂载点执行,而不是设备 sudo xfs_growfs /data
第四步,验证:
df -hT /data lsblk
如果磁盘使用的是 LVM,则流程多一层:先 pvresize 让物理卷变大,再 lvextend 扩展逻辑卷,最后扩展文件系统。可以用 lvextend 的 -r 参数一并处理文件系统。LVM 场景更要提前确认卷组和逻辑卷的名称,避免对错对象。
Windows 云服务器则是在“磁盘管理”里对目标磁盘选择“扩展卷”,把新增的未分配空间并入原有卷,不需要命令行。
六、常见的坑
- 容量没变化:绝大多数是忘了扩分区或文件系统,按上面的第二步和第三步补上即可。
- growpart 报错:常见原因是磁盘上没有空闲空间、设备名或分区号写错、磁盘还没被系统识别到新容量。先用 lsblk 对照确认。
- xfs_growfs 对设备执行:xfs 要对挂载点执行,设备名会提示错误。resize2fs 则相反,对设备执行。
- 系统盘和数据盘混淆:系统盘的根分区扩展流程和数据盘类似,但风险更高,务必先做快照,并避开业务高峰。
- 想缩容:云硬盘不支持缩小。如果确实要换小盘,只能新建小容量磁盘,迁移数据后再卸载旧盘。
- /etc/fstab 与设备名漂移:长期使用的数据盘建议在 fstab 里用 UUID 挂载,而不是设备名,避免重启后顺序变化导致挂错盘。可以用 blkid 查看 UUID。
七、小结
云硬盘扩容的完整流程可以记成一句话:先检查、再快照、后扩容,最后在系统里把分区和文件系统扩上去。控制台的“扩容成功”只代表第一层完成,用 lsblk 和 df 对照验证才算真正结束。再配合云监控里对磁盘使用率的告警,提前在使用率偏高时扩容,而不是等写满了才抢救,能让整个过程从“紧急故障”变成一次从容的例行变更。
- 点赞
- 收藏
- 关注作者
评论(0)