rescue mode下缩减根分区(/)[LVM卷]

缩减根分区(/)在系统运行状态下(Online)是不可能完成的

原因是:缩减文件系统必须先 umount(卸载),而根分区是系统运行的基础,无法卸载。就像你不能在车子行驶时更换轮胎一样。

必须通过 救援模式(Rescue Mode)Live CD 来操作。以下是具体方案:


:warning: 风险警告

  1. 备份数据:缩减操作具有破坏性,任何误操作都会导致系统无法启动。
  2. XFS 不支持缩减:如果你的根分区是 XFS 格式(CentOS 7+ 默认),它完全不支持缩小。你只能通过:备份数据 → 删除 LV → 重建 LV → 恢复数据。
  3. EXT4 支持缩减:但必须在离线状态下操作。

第一步:确认文件系统类型

在操作前,先确认你的根分区格式:

Bash

df -T /
  • 如果输出是 xfs无法缩减,请停止尝试并考虑备份重装或使用备份恢复方案。
  • 如果输出是 ext4:可以按照以下步骤操作。

第二步:进入救援模式(离线操作)

由于不能卸载 /,你需要通过以下任一方式进入:

  1. 使用 Linux 安装光盘/USB,选择 “Troubleshooting” → “Rescue a CentOS system”
  2. 在 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 之类的命令,你唯一的路径是:

  1. 备份 / 下的所有重要数据(可以使用 xfsdump 或简单的 tar)。
  2. 使用 Live CD 启动。
  3. 删除并重建根分区

Bash

lvremove /dev/vg_system/lv_root
lvcreate -L 50G -n lv_root vg_system
mkfs.xfs /dev/vg_system/lv_root
  1. 恢复数据:将备份的数据解压回新的 LV。
  2. 重装 Grub:由于 LV 被重建,UUID 可能改变,需要更新 fstab 和重新生成 Grub 配置。