磁盘在线扩容:growpart 与 resize2fs 实操
发布时间:2026-08-30 15:36       
更新时间:2026-08-31 12:25
云控制台上把磁盘从 100G 扩到 200G,只完成了任务的一半。系统里还有两层要跟上:分区表和文件系统。两层都刷新完,df -h 里的容量才会变。
先看清现状
lsblk 确认盘已经变大(比如 vda 显示 200G),但下面的分区 vda1 还是 100G,说明容量卡在分区这层没分下去。动手前先分清文件系统类型:df -T / 或 lsblk -f,输出里写着 xfs 还是 ext4,决定后面用哪条扩容命令。需要精确字节数就用 blockdev --getsize64 /dev/vda。
第一层:扩分区
growpart /dev/vda 1
意思是把 vda 的第 1 个分区扩展到整块盘。这个命令来自 cloud-utils 包,没有就先装:CentOS 执行 yum install -y cloud-utils-growpart,Ubuntu 执行 apt install -y cloud-guest-utils。它是在线操作,不需要卸载,也不碰数据。注意它只能扩展分区表里排最末的那个,分区夹在中间的少见场景要换 parted 处理。
第二层:扩文件系统
分区大了,文件系统还得自己长。ext4 用 resize2fs /dev/vda1;xfs 用 xfs_growfs /,注意 xfs 跟的是挂载点而不是设备名。两步可以合成一条:growpart /dev/vda 1 && resize2fs /dev/vda1。
验证
df -h 看目标挂载点的容量变成 200G 左右即成功;xfs 再跑 xfs_info / 复核。整个过程业务读写不用中断。扩容前后的 lsblk 输出留档进变更记录,磁盘类变更虽然在线,留痕习惯不能省。为什么 df 没变化是常态:控制台扩的是"盘",分区和文件系统是盘上的两层记录,谁都不会自动感知,growpart 和 resize2fs 就是替你去刷新这两层。
两种例外情况
一是当初没分区、整盘直接格式化的(比如 vdb 整盘一个文件系统),跳过 growpart,直接 resize2fs /dev/vdb;二是用了 LVM 的机器路径不同:先 pvresize,再 lvextend -r -l +100%FREE 卷组路径,-r 会顺带扩文件系统。
还有一条容量红线:MBR 分区表最大支持 2T,扩过 2T 的盘要把分区表换成 GPT,操作前备份好数据;云盘交付时选对分区表格式,比事后转换省心得多。养成固定流程:控制台扩容、快照留底、lsblk 确认、growpart、resize2fs 或 xfs_growfs、df 验证,扩容就是五分钟的事。