Linux根目录在线扩容需满足LVM架构,依次执行磁盘重扫描、新建LVM分区、pvcreate、vgextend、lvextend及文件系统扩展(xfs_growfs或resize2fs),全程无需重启。

当Linux系统根目录空间告急,而你已在虚拟机或物理机中为系统盘新增了未分配空间(例如通过VMware扩展了/dev/sda总容量,但未创建新分区),需要在不重启、不中断服务的前提下将这部分空白空间在线合并进根逻辑卷——此时必须确认根文件系统基于LVM且挂载点为/,否则该流程不适用。
确认当前存储架构是否支持在线扩容
执行 lsblk 查看设备树,重点识别根挂载点(MOUNTPOINT列为/)对应的设备名,如 /dev/mapper/centos-root 或 /dev/vg00/lv_root;若路径以 /dev/mapper/ 或 /dev/[vg_name]/[lv_name] 开头,说明使用LVM,可继续。
运行 df -Th / 确认文件系统类型:xfs需用 xfs_growfs,ext4需用 resize2fs;【非LVM架构(如直接挂载/dev/sda2)无法执行本流程,强行操作将失败】。
执行 vgdisplay 检查卷组中是否存在 Free PE / Size > 0 —— 若显示为 0,则说明新增空间尚未被识别为可用物理空间,需先完成底层扩容。
让系统识别磁盘末尾新增的未划分空间
若新增空间位于同一块物理盘末尾(如原/dev/sda为20G,现扩展为30G),需先通知内核重读分区表。
对 SCSI/SATA 盘:执行 echo "- - -" > /sys/class/scsi_host/host0/scan(host0需按实际替换,常见为host0/host1/host2);若不确定,可用循环脚本全扫:for i in /sys/class/scsi_host/host*; do echo "- - -" > $i/scan 2>/dev/null; done。
对 VirtIO(如KVM/qemu)或 NVMe 盘:直接运行 partprobe /dev/sda(sda 替换为你的根盘设备名);【跳过此步会导致后续pvcreate报错“device is busy”或“no space left”】。
再次运行 fdisk -l /dev/sda,对比 Disk /dev/sda: 行末数字是否已更新为新总大小;若未变,重启系统是唯一补救方式。
将新增空间划入现有分区并初始化为物理卷
第一步:进入分区工具 → fdisk /dev/sda。
第二步:输入 n 新建主分区 → 接连按两次回车接受默认起始扇区和全部剩余空间 → 输入 t 修改分区类型 → 输入 8e(LVM专用Hex码)→ 输入 w 写入分区表。
第三步:执行 partprobe /dev/sda 强制内核加载新分区信息,此时应出现 /dev/sda3(编号依已有分区递增)。
第四步:将新分区初始化为物理卷 → pvcreate /dev/sda3;这一步不可逆,【务必确认/dev/sda3是刚创建的分区,误选已有数据分区将导致永久丢失】。
扩展卷组并扩容逻辑卷
方法一:自动合并所有空闲空间 → 先用 vgdisplay | grep "VG Name" 获取卷组名(如 centos),再执行:vgextend centos /dev/sda3 → lvextend -l +100%FREE /dev/mapper/centos-root。
方法二:精确指定增量(推荐用于生产环境) → 查看空闲PE数:vgdisplay centos | grep "Free PE" → 执行:lvextend -l +[数字] /dev/mapper/centos-root(例如 +7680)。
执行 lvs 验证 LV Size 是否已增大;若数值未变,说明上一步 lvextend 未成功,检查设备路径拼写(/dev/mapper/xxx 与 /dev/xxx/root 易混淆)。
刷新文件系统使扩容生效
若 df -Th / 显示类型为 xfs:直接运行 xfs_growfs /(注意是挂载点 /,不是设备路径)。
若类型为 ext4:运行 resize2fs /dev/mapper/centos-root(此处必须填设备路径,填/会报错)。
最后执行 df -h /,观察 Avail 列数值是否显著增大——扩容完成。











