根分区使用率100%。数据库无法写入,日志停止滚动,连`tab`补全都开始报错。更棘手的是,这台服务器上跑着生产业务,不能随便重启。这种场景下,传统的“关机→扩容→开机”流程意味着业务中断。但在Linux环境下,根分区的扩容完全可以在线完成,全程无需重启,业务不中断。前提是:你的磁盘结构支持在线扩展,且操作顺序正确。
先判断:你的磁盘结构是否支持在线扩容
动手之前,先花一分钟确认当前磁盘的“骨架”。执行以下命令:
df -hT
lsblk -f
sudo pvs; sudo vgs; sudo lvs
`df -hT`确认根分区的文件系统类型和挂载点;`lsblk -f`展示磁盘、分区、LVM与挂载点的层级关系;`pvs/vgs/lvs`则分别确认物理卷、卷组和逻辑卷的状态。
结果通常对应两种结构。第一种是普通分区,比如`/dev/vda1`直接挂载到根目录,文件系统是ext4或xfs。第二种是LVM逻辑卷,根分区位于`/dev/mapper/vg-root`之类的路径下,底层经过“物理卷→卷组→逻辑卷”三层管理。
在线扩容对两种结构都支持,但操作步骤不同。 LVM场景需要逐层扩展——先让物理卷识别新空间,再扩展逻辑卷,最后扩展文件系统;普通分区场景则先扩展分区边界,再扩展文件系统。
无论哪种结构,操作前务必为系统盘创建快照。在线扩容虽然风险较低,但任何涉及磁盘的操作都有数据风险。快照备份非常有必要!
第一步:让系统识别底层新增的磁盘容量
在云服务商控制台完成磁盘扩容后,底层块设备变大了,但Linux内核有时不会立即识别新容量。
先执行`lsblk`查看磁盘总容量是否已更新。如果整块磁盘的大小仍然显示旧值,需要主动触发重新扫描。以常见的`/dev/vda`为例:
echo 1 | sudo tee /sys/class/block/vda/device/rescan
如果使用SCSI控制器,也可以用通用扫描方式:
for i in /sys/class/scsi_host/host*/scan; do echo "- - -" | sudo tee $i; done
扫描完成后再次执行`lsblk`,确认磁盘总容量已变为扩容后的数值。
第二步:扩展分区边界(普通分区结构)
如果`lsblk`显示整块磁盘已经变大,但分区(如`/dev/vda1`)仍然保持旧大小,就需要扩展分区边界。
Linux镜像通常自带`growpart`工具。如果命令不存在,Ubuntu/Debian执行`sudo apt install -y cloud-guest-utils`,CentOS/RHEL执行`sudo yum install -y cloud-utils-growpart`。
扩展根分区所在的分区。假设根分区是`/dev/vda1`:
sudo growpart /dev/vda 1
注意命令格式:`/dev/vda`是磁盘设备,`1`是分区号,两者之间用空格分隔。不要写成`growpart /dev/vda1`,那是错误的格式。
对于LVM场景,分区扩展的步骤是相同的——如果根分区位于`/dev/vda3`,执行`sudo growpart /dev/vda 3`即可。扩展完成后,分区大小会更新,但LVM和文件系统层还没有感知到新增空间。
第三步:扩展LVM物理卷、卷组与逻辑卷
如果磁盘结构包含LVM,分区扩展后还需要逐层推进。先让物理卷识别新增空间:
sudo pvresize /dev/vda3
然后用`vgs`查看卷组的剩余空间。如果卷组中已有空闲空间,直接扩展逻辑卷即可:
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
`-l +100%FREE`表示将卷组中所有剩余空间分配给该逻辑卷。如果你的逻辑卷路径不同,用`lvs`命令确认实际路径后再替换。
一个更简洁的做法是使用`lvextend -r`参数。`-r`(resize)标志会在扩展逻辑卷后自动调用对应的文件系统扩容工具,省去手动执行`resize2fs`或`xfs_growfs`的步骤:
sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
`-r`参数在RHEL 7+、Ubuntu 18.04+等现代发行版上均可用,是推荐的操作方式。
第四步:扩展文件系统(关键的最后一步)
无论走普通分区路线还是LVM路线,最后一步都是扩展文件系统。分区变大了、逻辑卷变大了,但文件系统不会自动使用新增空间。不执行这一步,`df -h`看到的仍然是旧容量。
ext4文件系统使用`resize2fs`,参数是设备路径:
sudo resize2fs /dev/vda1
或者LVM场景:
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
`resize2fs`支持在线扩展,无需卸载文件系统。
XFS文件系统使用`xfs_growfs`,参数是挂载点而非设备路径。这是XFS和ext4最容易混淆的地方:
sudo xfs_growfs /
XFS只支持在线扩容,不支持在线缩减。执行`xfs_growfs /`会将根文件系统扩展到逻辑卷的当前大小。
执行完成后,再次运行`df -h`确认根分区容量已经更新。整个过程无需重启,业务持续运行。
如果根分区是LVM,但卷组没有空闲空间怎么办?
有一种情况是:分区扩展了,但卷组中仍然没有空闲空间——因为物理卷(PV)还没有重新扫描。`pvresize`的作用就是让LVM物理卷识别到底层分区新增的容量。如果跳过了这一步直接`lvextend`,系统会报错“Insufficient free space”。先执行`pvresize`,再用`vgs`确认`VFree`不为零,才能继续扩展逻辑卷。
操作后的验证清单
扩容完成后,按以下顺序验证:
根分区容量已更新——`df -h /`显示的总容量应与扩容目标一致。数据完整性正常——检查关键目录的读写是否正常,数据库能否正常连接。业务运行正常——从外部访问网站或API,确认服务未受影响。
如果任何一步出现异常,快照是最后的兜底手段。通过云控制台回滚快照,可以在几分钟内恢复到操作前的状态。
华纳云:为在线扩容提供稳定底座
在线扩容能否顺利完成,底层云平台的响应速度是一个实际变量。如果控制台的扩容操作与底层存储的同步存在延迟,`rescan`可能识别不到新容量;如果磁盘I/O性能不足,文件系统扩展的耗时会被拉长。
华纳云的云服务器基于OpenStack云平台,系统盘和数据盘均支持在线扩容,控制台操作后底层存储同步及时,`rescan`和`pvresize`能快速识别新增容量。华纳云香港节点接入CN2 GIA精品线路,三网直连优化,从国内通过SSH执行扩容操作时延迟低、连接稳定,不会因为网络抖动导致命令中断。全系标配企业级NVMe SSD,文件系统扩展的I/O操作响应迅速,`resize2fs`和`xfs_growfs`的执行时间更短。
华纳云还提供数据盘加购选项,适合需要将业务数据与系统盘分离部署的场景——提前规划数据盘可以减少根分区被业务数据挤占的概率。续费同价政策确保长期运营成本可预期。
根分区满了不必慌,但“在线扩容”有它自己的规则。 先确认磁盘结构,再按“块设备→分区→物理卷→逻辑卷→文件系统”的顺序逐层扩展,每一步都用命令验证结果,不在没有确认的情况下跳过任何一层。访问华纳云官网,查看支持在线扩容的云服务器方案与当前优惠。
推荐文章