背景

CentOS 7 默认安装时,经常出现这种情况:

分区 容量 已用 问题
/ 50G 49G 空间即将耗尽
/home 965G 33M 大量空间闲置

目标:从 /home 回收 500G 给 /,同时保留 100G 给 /home 继续使用。


操作步骤

1. 查看当前分区

df -h

输出示例:

文件系统                    容量   已用  可用  已用%   挂载点
/dev/mapper/centos-root   50G   49G  1.6G   97%      /
/dev/mapper/centos-home  965G   33M  965G    1%      /home

2. 备份并卸载 /home

# 先备份 /home 数据
cp -r /home /home-bak

# 卸载 /home
umount /home

# 确认 /home 已卸载
df -h

⚠️ 卸载 /home 会踢出所有已登录的普通用户,建议在单用户模式或通过 SSH root 执行。

3. 移除 /home 的 LV

lvremove /dev/mapper/centos-home

确认提示输入 y

Do you really want to remove active logical volume centos/home? [y/n]: y
Logical volume "home" successfully removed

4. 扩展 / 的 LV

lvextend -L +500G /dev/mapper/centos-root

输出示例:

Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 550.00 GiB (140800 extents).
Logical volume centos/root successfully resized.

5. 扩展文件系统

此时 df -h 看到的 / 容量不会立即变化 — 因为 LV 虽然变大了,但文件系统还没感知到。

先确认文件系统类型:

df -hT
  • 如果是 xfs(CentOS 7 默认):使用 xfs_growfs
  • 如果是 ext4:使用 resize2fs
# xfs 文件系统
xfs_growfs /dev/mapper/centos-root

输出示例:

data blocks changed from 13107200 to 144179200

6. 验证 / 扩容结果

df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root  550G   49G  502G    9% /

从 50G → 550G,成功。

7. 重新创建 /home 的 LV

查看 VG 剩余空间:

vgdisplay

找到 Free PE / Size,然后创建新的 home LV:

lvcreate -L 100G -n home centos

8. 格式化并挂载 /home

# 格式化(与原来相同的文件系统类型)
mkfs.xfs /dev/centos/home

# 挂载
mount /dev/centos/home /home

9. 恢复数据

cp -r /home-bak/* /home/

最终结果

分区 扩容前 扩容后
/ 50G 550G
/home 965G 100G

注意事项

风险点 说明
业务中断 卸载 /home 会影响所有普通用户登录
备份先行 cp -r /home /home-bak 必须第一步执行
文件系统类型 xfs 用 xfs_growfs,ext4 用 resize2fs,不要搞混
/home 重建后 fstab 如果 /home/etc/fstab 中有条目,确认 UUID 或设备路径正确
SELinux 上下文 恢复数据后可能需要 restorecon -R /home 修复安全上下文

Professional English Terms

Term Meaning
LVM (Logical Volume Manager) 逻辑卷管理器,支持弹性调整分区大小
LV (Logical Volume) 逻辑卷,LVM 中的可弹性调整的存储单元
VG (Volume Group) 卷组,多个 PV 组成的存储池
xfs_growfs XFS 文件系统在线扩容命令
lvremove / lvextend / lvcreate LVM 逻辑卷的删除 / 扩展 / 创建操作