记录一次对LVM虚拟化的XFS磁盘格式的调整过程

先介绍一下Linux的LVM以及相应的背景。

LVM(Logical Volume Manager),把机器的一块硬盘分为两个区sda1和sda2,其中分区sda1作为系统盘/boot挂载,少量空间;sda2作为一个物理卷并且完全作为逻辑卷组VG(Volume Group)centos,在这个逻辑卷组centos中建立三个逻辑卷LV(Logical Volume)root和home还有swap,分别挂载到根目录//home以及swap。而两个分区sda1和sda2上都建立了文件系统XFS,文件系统XFS作为RedHat的默认文件系统也有它的考虑,成为继ext3,ext4之后的主流文件系统。

几个概念的关系:N个物理硬盘HD或者物理硬盘中的分区一起组建为一个逻辑卷组VG及存储池,在卷组VG中创建N个逻辑卷LV,在一个逻辑卷LV中创建文件系统比如xfs。物理硬盘/分区、逻辑卷有最小基本寻址单元,CentOS7默认的大小为4MB,二者一一对应,类似于链接或者变量引用,但是一个二者关系并非一直不变,因为物理硬盘可能发生变化而逻辑卷自动调整。创建卷组和逻辑卷,会类似于创建分区一样在磁盘开始位置写入卷的信息VGDA(卷组描述符区域,Volume Group Descriptor Area)用于识别。逻辑卷的好处在于屏蔽物理底层支撑,可自由扩展变更,而不用担心硬盘或者分区的物理空间局限,也就不会存在为了扩展分区大小而去备份/扩展分区重新格式化硬盘等问题。

Cent0S 7默认启用LVM(Logical Volume Manager)支持,可以更加简便地扩大和缩小分区,在CentOS 7默认安装的过程中,其根目录/只会分配50GB的空间,在大多数的使用场景中这个空间还算可以,但免不了需要对其扩容的情况(虽然你可以扔在/home下面2333333333)。同时XFS是centos7默认的文件系统,不像其他文件系统ext3,ext4或者reiserfs等,有命令(resize2fs,resize_reiserfs)直接支持缩小文件系统的大小,XFS支持扩展增大但是不支持缩小空间,所以在必须缩小LVM的情况下,需要利用xfsdump/xfsrestore等工具,备份与还原资料,实现对根目录/的扩容。

备份原来的/home

如果你没啥资料的话也可以跳过,因为重建/home会清除/home下所有文件,还是建议备份一下

安装xfsdump

1
yum -y install xfsdump

将文件备份到/目录下(或者你希望的其他地方)

1
2
3
4
5
xfsdump -f /home.xfsdump /home
please enter label for this dump session (timeout in 300 sec)
-> home
please enter label for media in drive 0 (timeout in 300 sec)
-> home

缩小原有的/home分区

先移除/home分区的挂载

1
umount /home

如果提示被占用的话,可以使用 -l参数强制移除

1
umount -l /home

缩减原有/home分区,分出500G空闲空间

1
lvreduce -L -500G /dev/mapper/centos-home

拓展/根目录

将剩余的空闲空间都分配给根目录

1
lvextend -l +100%FREE /dev/centos/root

恢复/home的内容

格式化/home分区

1
mkfs.xfs -f /dev/mapper/centos-home

重新挂载/home分区

1
mount /home

恢复备份过的文件

1
xfsrestore -f /home.xfsdump /home