最近在三台服务器上安装了系统,安装的时候选择的是自动分区,创建了一个 LVM 卷组, 结果大部分空间都分给了 HOME , root 很小。 现在要求要将大部分空间重新分给 ROOT。 常用的文件系统如 ext4,xfs 都能很方便地在线调整大小的。 这里就简单记录一下如何调整分区大小的。


Table of Contents

  1. 制作一个 Linux LiveCD 启动盘
  2. 减小 HOME 分区大小
  3. 增大 ROOT 分区大小
  4. 重启系统
  5. 在线调整大小

制作一个 Linux LiveCD 启动盘

对系统的 root 分区和 home 分区进行调整大小,可以直接线上调整大小。但是文件系统是 XFS 格式的,不好在线减少空间,就选取了这一个比较稳妥的方法 - 离线调整大小。

下载一个 LiveCD 镜像,然后刻录到 U 盘上, 或者通过 grub2 引导镜像启动。

减小 HOME 分区大小

  1. 系统自动分区时创建了一个 LVM 卷组 /dev/centos, 分为 swaphomeroot 三个卷。 在 Live 系统中,挂载 home 和 root 卷到:
1
2
3
$ sudo mkdir -p /mnt/{home,root}
$ sudo mount /dev/centos/root /mnt/root
$ sudo mount /dev/centos/home /mnt/home
  1. 默认分区格式为 XFS,无法减小大小。需要减小后重新格式化。减小之前做好数据备份。 还好 home 卷内容很少。-_-…
1
2
$ sudo xfsdump -f /mnt/root/home/home.dump /mnt/home
$ sudo umount /mnt/home
  1. 减小 home 卷大小
1
2
$ sudo lvreduce -L 25G /dev/centos/home
$ sudo mkfs.xfs -f /dev/centos/home
  1. 恢复 home 数据
1
2
3
$ sudo mount /dev/centos/home /mnt/home
$ sudo xfsrestore -f /mnt/root/home/home.dump /mnt/home
$ sudo rm -f /mnt/root/home/home.dump
  1. 若是 ext4 分区,则要简单的多。
1
2
3
4
$ sudo lvreduce -L 25G /dev/centos/home
$ sudo resize2fs /dev/centos/home
### or simply and safely
$ sudo lvresize --resize --size 25G /dev/centos/home

增大 ROOT 分区大小

扩大 root 分区就比较简单了。

  1. LVM 调整大小。
1
$ sudo lvextend -l +100%FREE /dev/centos/root
  1. xfs 分区确认大小调整
1
$ sudo xfs_growfs /dev/centos/root
  1. ext4 分区确认大小调整
1
$ sudo resize2fs /dev/centos/root
  1. 确认调整后的分区大小
1
2
3
4
5
6
7
8
9
$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 929.8G 0 part
├─centos-root 253:0 0 900.8G 0 lvm /
├─centos-swap 253:1 0 4G 0 lvm [SWAP]
└─centos-home 253:2 0 25G 0 lvm /home

重启系统

调整好之后,就可以重启系统了。

在线调整大小

一般分区只能在线扩容,不能减少。鉴于 home 分区没有使用,可以不用重启系统到 Live 系统。 确保没有程序在使用 home 分区后, 备份 home 分区,然后可以按照上面的步骤进行调整大小了。 不过在线调整大小有风险,最好提前做好数据备份。

这篇 回答中,提到了一种不重启减小 root 分区的方法,不过,如无必要,建议使用 Live 系统减小 root 分区容量。