首先,缩小根分区需要对根分区进行操作,所以需要启动光盘/U盘,云服务器需要进入救援系统或者自行挂载ISO启动
有数据丢失风险,操作需谨慎

进入救援系统

进入救援系统,用fdisk -l查看分区情况

举例说明,例如我有一个磁盘/dev/vda,共10G。有vda1vda2两个分区,分区格式为ext4,大小分别为9G,1G。目标是将vda1缩小为8G。

resizefs调整文件系统大小

首先用e2fsck -f /dev/vda1 检查一下文件系统错误

之后用resize2fs /dev/vda1 7.5G(此处应比目标大小稍小,不然可能会在fdisk调整分区表的时候出问题;而且一定要比分区内现有文件大,否则肯定会损失文件)

fdisk删除并新建分区

接下来使用fdisk /dev/vda

输入p回车,查看分区

Device     Boot    Start      End  Sectors    Size Id Type
/dev/vda1           ***       ***    ***        8G 83 Linux
/dev/vda2           ***       ***    ***        1G 82 Linux

d回车

Partition number (1-2, default 2):

输入1,删除分区1

n回车

Partition type
   p   primary (1 primary, 0 extended, 1 free)
   e   extended (container for logical partitions)

默认p回车

Using default response p.
Partition number (1,3, default 1):

默认1回车

First sector (2048-20971519, default 2048):

默认回车

Last sector, +/-sectors or +/-size{K,M,G,T,P} (***):

输入+8G,回车

Do you want to remove the signature? [Y]es/[N]o:

这里我选的N,应该没什么影响吧(大概)

输入p查看分区结果

然后w回车写入分区表

再次使用resizefs

最后再使用resize2fs /dev/vda1,分区回自动从7.5G调整到8G

完成,可以重启进入系统尝试了

总结要点

不能在线调整,必须使用U盘启动或者云服务器的救援系统;第一步resize2fs的大小要稍小于目标大小;最后再次使用resizefs不指定大小就会自动调整到fdisk里面指定的分区大小