CentOS 7.3 LVM根分区扩容+ xfs_growfs实战
线上机器突然报警“磁盘剩余空间不足”,登录一看,根分区只剩三百兆,日志还在疯狂写入,服务随时可能挂。别急着重装,也别想着迁移数据,CentOS 7.3自带的LVM+XFS组合能在十分钟内把新硬盘无痛并入根分区,xfs_growfs一句命令即可在线扩容,业务零停机,文件零丢失。下面把全过程拆成五步,照着敲,新手也能一次过。

LVM与XFS为什么能热扩容
LVM把物理盘抽象成卷组,分区变成逻辑卷,扩容时只需把新盘塞进卷组,再把逻辑卷拉长即可。XFS又是天生支持在线增长的文件系统,xfs_growfs不用卸载分区就能识别新空间,所以整套流程不用重启,也不用单用户模式,正在跑的Nginx、MySQL完全无感知。
第一步:给虚拟机加一块新盘
VMware、KVM、云主机都一样,关机状态下加盘也行,在线加盘也行,CentOS 7.3都能即时识别。加完后执行
echo '- - -' > /sys/class/scsi_host/host0/scan
再用lsblk看,多出来一块sdb,容量100G,说明系统已识别,可以开始干活。

第二步:把新盘变成物理卷
直接整盘给LVM最省事,不用分区表:
pvcreate /dev/sdb
回显“Physical volume '/dev/sdb' successfully created”就行。如果之前误装过文件系统,加-f参数强制擦除签名,别犹豫。
第三步:把物理卷塞进卷组
先看根分区在哪个卷组:

vgdisplay
Name那一栏一般是“centos”,Free PE为0说明没剩余空间。把sdb加进去:
vgextend centos /dev/sdb
再执行vgdisplay,Free PE会多出25.0 GB,表示卷组已拿到新空间,随时可以分配。
第四步:拉长逻辑卷
根分区对应/dev/centos/root,全部空间一次吃满最省心:
lvextend -l +100%FREE /dev/centos/root
回显“Size of logical volume centos/root changed”说明逻辑卷已变粗,但文件系统还没认,别急着重启,下一步让xfs_growfs在线识别即可。
第五步:xfs_growfs让文件系统吃饱
挂载点如果是/,直接:
xfs_growfs /
看到“data blocks changed from 5242880 to 26214400”就算完事。再df -h,根分区容量已从19G涨到99G,剩余空间85G,报警瞬间消失,网页访问速度立刻恢复。
踩坑记录:可能遇到的三个小意外
1. 执行xfs_growfs时提示“mount point not valid”——你敲错了挂载点,用df -Th确认根分区挂载路径是/还是/var/lib/docker,别瞎猜。
加盘后用lsblk看不到sdb——云主机需要在控制台“挂载”后再扫描scsi_host,多试几次host1、host2。
文件系统变成只读——扩容前磁盘已爆满,inode耗尽,先删日志再扩容,否则xfs_growfs也救不了。
命令汇总:一条复制就能用
pvcreate /dev/sdb && vgextend centos /dev/sdb && lvextend -l +100%FREE /dev/centos/root && xfs_growfs /
四个命令串成一行,十秒搞定,适合批量脚本,也适合半夜睁不开眼时直接粘贴。
扩容后记得顺手做的事
1. 给日志加rotate,别让/var/log再无限膨胀;
把磁盘监控阈值从85%调到75%,提前两周收到报警;
写个crontab,每月自动快照卷组,万一误删数据还能回滚。
整套流程下来,不用重启、不用停机、不用迁移数据,业务线同事甚至没察觉你已经把磁盘危机消于无形。下次再遇到“根分区爆满”,记住LVM+XFS这对老搭档,加盘、扩卷、xfs_growfs,三板斧砍完,安心睡觉。
