缩减根分区(/)在系统运行状态下(Online)是不可能完成的。
原因是:缩减文件系统必须先 umount(卸载),而根分区是系统运行的基础,无法卸载。就像你不能在车子行驶时更换轮胎一样。
必须通过 救援模式(Rescue Mode) 或 Live CD 来操作。以下是具体方案:
风险警告
- 备份数据:缩减操作具有破坏性,任何误操作都会导致系统无法启动。
- XFS 不支持缩减:如果你的根分区是 XFS 格式(CentOS 7+ 默认),它完全不支持缩小。你只能通过:备份数据 → 删除 LV → 重建 LV → 恢复数据。
- EXT4 支持缩减:但必须在离线状态下操作。
第一步:确认文件系统类型
在操作前,先确认你的根分区格式:
Bash
df -T /
- 如果输出是
xfs:无法缩减,请停止尝试并考虑备份重装或使用备份恢复方案。 - 如果输出是
ext4:可以按照以下步骤操作。
第二步:进入救援模式(离线操作)
由于不能卸载 /,你需要通过以下任一方式进入:
- 使用 Linux 安装光盘/USB,选择 “Troubleshooting” → “Rescue a CentOS system”。
- 在 GRUB 启动界面修改启动参数,进入
rd.break或单用户模式(某些系统支持)。
第三步:针对 EXT4 的缩减步骤(在救援模式下)
一旦进入救援模式且没有挂载原磁盘,执行以下命令(假设卷组名为 vg_system,逻辑卷名为 lv_root):
1. 强制检查文件系统
确保文件系统健康。
Bash
e2fsck -f /dev/vg_system/lv_root
2. 缩减文件系统
必须先缩小文件系统,再缩小 LV。 假设你要缩减到 50G:
Bash
resize2fs /dev/vg_system/lv_root 50G
3. 缩减 LVM 逻辑卷
将 LV 调整到与文件系统一致的大小:
Bash
lvreduce -L 50G /dev/vg_system/lv_root
注意:此时系统会提示你可能会损坏数据,输入 y 确认。
4. 再次检查(可选但建议)
确认缩减后文件系统依然完整:
Bash
e2fsck -f /dev/vg_system/lv_root
5. 重启
退出救援模式,正常引导系统。
如果你是 XFS 文件系统,该怎么办?
由于 XFS 不支持 xfs_reducefs 之类的命令,你唯一的路径是:
- 备份
/下的所有重要数据(可以使用xfsdump或简单的tar)。 - 使用 Live CD 启动。
- 删除并重建根分区:
Bash
lvremove /dev/vg_system/lv_root
lvcreate -L 50G -n lv_root vg_system
mkfs.xfs /dev/vg_system/lv_root
- 恢复数据:将备份的数据解压回新的 LV。
- 重装 Grub:由于 LV 被重建,UUID 可能改变,需要更新
fstab和重新生成 Grub 配置。