在给根分区扩容之前,第一步一定要先判断当前系统是否使用了 LVM:如果执行 df -Th / 后看到设备是 /dev/mapper/*,通常说明根分区位于 LVM 逻辑卷中,这类环境一般支持在线扩容;但如果显示的是 /dev/sda2 这类裸分区设备,同时在 lsblk 输出中也看不到 lvm 节点,那基本可以确定不是 LVM,只能通过进入救援模式重新分区来扩容,整体操作风险很高。

CentOS 7 根分区扩容并不是“点一下就完成”的操作,必须先确认系统采用的是 LVM 还是传统分区方案——这会直接决定你该使用哪种扩容方法、是否可以在线扩容,以及是否存在数据丢失风险。
怎么判断根分区是不是 LVM
先执行 df -Th /,重点查看 Mounted on 为 / 的那一行:
- 如果 Filesystem 显示为类似
/dev/mapper/centos-root或/dev/mapper/cl-root,说明根分区使用的是 LVM,一般可以较安全地进行在线扩容 - 如果 Filesystem 显示为
/dev/sda2、/dev/vda1这类裸设备路径,并且在lsblk中也没有出现lvm类型的子节点,那就是非 LVM 分区,只能通过卸载环境外的重分区方式处理,风险较高
这一步绝对不能省略。如果前面的判断出错,后续扩容命令大概率都会失败。比如把 /dev/sda2 误当成逻辑卷去执行 lvextend,系统通常就会直接报错,例如提示 “Invalid logical volume name”。
LVM 根分区:加新盘后扩展逻辑卷
这是相对最稳妥、最常见的 CentOS 根分区扩容方案,适用于你已经新增一块磁盘(例如 /dev/sdb),或者在虚拟机环境中直接扩展了原有磁盘容量。
- 使用
fdisk /dev/sdb创建一个主分区(n→p→1→ 回车两次),然后将分区类型设置为8e(LVM) - 执行
partprobe /dev/sdb刷新分区表,避免内核仍然读取旧的分区缓存信息 - 运行
pvcreate /dev/sdb1初始化物理卷;再用vgdisplay查看当前卷组名称(通常为centos或cl) - 通过
vgextend centos /dev/sdb1将新的 PV 加入卷组;然后执行lvextend -l +100%FREE /dev/mapper/centos-root,把所有空闲空间分配给根逻辑卷 - 最后这一步非常关键:执行
xfs_growfs /(XFS 文件系统)或resize2fs /dev/mapper/centos-root(ext4 文件系统)。如果漏掉这一步,即使逻辑卷已经变大,df -h里也看不到新增空间
非 LVM 根分区:只能重分区,必须停机操作
如果根分区不是 LVM,那么通常只能通过重新分区来完成扩容。使用 fdisk 删除后再重建根分区时,最关键的一点就是起始扇区绝对不能变——一旦改动,文件系统元数据很可能会被破坏。
- 先
umount /?这是行不通的,因为根分区无法在系统正常运行时卸载。必须进入 rescue 救援模式(CentOS 安装盘启动 → “Troubleshooting” → “Rescue a CentOS system”) - 进入救援模式后,将根分区挂载到
/mnt/sysroot,然后执行chroot /mnt/sysroot - 运行
fdisk /dev/sda→d删除原根分区(如sda2)→n新建主分区 → 起始扇区填写原来的值(可提前通过fdisk -l /dev/sda记录 Start 值)→ 结束扇区直接回车以使用剩余全部空间 - 执行
w保存后,立刻运行partprobe /dev/sda,随后再根据文件系统类型执行resize2fs /dev/sda2(ext4)或xfs_growfs /(XFS)
非 LVM 根分区扩容本质上不存在真正意义上的“无损操作”。即使步骤完全正确,只要中途断电、输错扇区编号,根分区 / 都可能变成只读,甚至直接导致系统无法启动。因此在生产环境中,更建议优先考虑迁移到 LVM 架构,再进行后续磁盘扩容管理。
