Linux 下对 lvm 逻辑卷分区大小的调整(针对 xfs 和 ext4 不同文件系统)

975 阅读5分钟

一. 逻辑卷相关架构图

物理磁盘或者磁盘分区转换为物理卷,一个或多个物理卷聚集形成一个或多个卷组,而逻辑卷就是从某个卷组里面抽象出来的一块磁盘空间。具体架构如下:

image.png

二. 现状

查看当前文件系统占用情况:

df -h

1646638283(1).png 从上图执行结果可见,目前根挂载点的容量已经用了85%了,容量为55G。我们再看看磁盘情况:

#先切换root用户
sudo -s
#查看实际磁盘空间
lsblk 
#查看分区
fdisk -l

1646638456(1).png 注意观察第一行,/dev/sda着实是有119G空间的。再看到各个分区(sda1\sda2\sda5)的信息,sda2和sda5其实是同一片磁盘空间。总的来说/dev/sda磁盘只分配了59.2G+487M空间。我们接下来要找到并利用那剩余的60G磁盘空间。

三. 分区

1) 进入分区应用程序,并选择/dev/sda磁盘为操作对象,将空闲的那部分空间创建为一个新的分区,等会它就是/dev/sda(x)了

fdisk /dev/sda

查看fdisk的功能,输入m回车查看: 1646638789(1).png

2) 从帮助信息中我们得知,输入F可以看未分配的磁盘空间信息: 1646638848(1).png 果不其然,我们确认了/dev/sda/磁盘上存在59.6G的未分区空间。还需要关注的信息是下面的Start和Tail-end(末尾),等会分区要用得到。

输入n,创建新分区
选择p,创建主分区
分区号用默认的3,直接回车:
1646639164(1).png

这里就要用到刚才的Start、Tail-end了,就是新分区创建在磁盘的哪个范围里,我们直接拉满,First Sector填刚才的Start,Last Sector填Tail-end: 1646639367(1).png

3) 把分区改为LVM格式
修改分区格式,使新建的分区支持LVM格式。进入fdisk后,按t修改分区格式,类型改为8e(之前默认的是83)。

4) 预览保存更改
这里就设置完成了,接下来输入p,预览更改: 1646639493(1).png 可见,/dev/sda3已经创建好了

然后输入w,应用更改: 1646639595(1).png 那个busy信息不用管,但是根据最后的提示,我们还要执行如下命令,因为在格式化分区值前需要使用 partprobe 让 kernel 重新读取分区信息,如果不成功则需要重启系统

partprobe

再在终端执行命令检查: 1646639687(1).png 至此分区完成。

5) 将新的分区格式化,使用 xfs 或 ext4 文件系统

mkfs.xfs /dev/sda3
或
mkfs.ext4 /dev/sda3

根据提示进行操作,取消磁盘自检

tune2fs -c -1 /dev/sda3

四. 扩容

使用刚才的创建的 /dev/sda3 分区,创建 Physical Volume:

pvcreate /dev/sda3

1646639864(1).png

查看当前的 volume group 和 logic group信息:

vgdisplay -v

无标题.png 要了解的信息主要有两个:
1、VolumeGroup 名字 VG Name:test101-vg
2、根路径 root 所在的 Logical Volume 路径 LV Path:/dev/test101-vg/root

然后先用 /dev/sda3 给 Volume Group 扩容,这样后面才能分配更多空间给 Logic Volume:

vgextend test101-vg /dev/sda3

然后扩容logic volume,这里我只扩个50G先(+50G):

lvextend -L +50G /dev/test101-vg/root

如果把剩余空间全部分配,则:

lvextend -l +100%FREE /dev/test101-vg/root

最后输入如下命令进行重新计算:

# 适用 ext
resize2fs /dev/test101-vg/root
# 适用 xfs
xfs_growfs /dev/test101-vg/root  

1646641455(1).png

最后查看结果: 1646641485(1).png

(一)针对 xfs 和 ext2/3/4 文件系统的 lvm 分区空间的扩容和缩容的操作

resize2fs 命令针对的是ext2、ext3、ext4文件系统
xfs_growfs 命令针对的是xfs文件系统

1)resize2fs(增大和减小都支持)

lvextend -L 120G /dev/mapper/centos-home     //增大至120G
lvextend -L +20G /dev/mapper/centos-home     //增加20G

lvreduce -L 50G /dev/mapper/centos-home      //减小至50G 
lvreduce -L -8G /dev/mapper/centos-home      //减小8G 

lvextend -l +100%FREE /dev/mapper/centos-home          //将剩余空间全部扩容

resize2fs /dev/mapper/centos-home            //执行调整

2)xfs_growfs(只支持增大)

lvextend -L 120G /dev/mapper/centos-home    //增大至120G 
lvextend -L +20G /dev/mapper/centos-home    //增加20G 
lvextend -l +100%FREE /dev/mapper/centos-home          //将剩余空间全部扩容
xfs_growfs /dev/mapper/centos-home          //执行调整   

xfs文件系统只支持增大分区空间的情况,不支持减小的情况(切记!!!!!)。
硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。

(二)卸载分区

若是减小分区空间,减小前必须要先卸载这个分区。如果卸载有问题,解决如下:

[root@localhost ~]# umount /home/   
umount: /home: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))

提示无法卸载,则是有进程占用/home,使用如下命令来终止占用进程:

[root@localhost ~]# fuser -m -k /home   
/home: 1409 1519ce 1531e 1532e 1533e 1534e 1535e 1536e 1537e 1538e 1539e 1541e 1543e 1544e 1545e 1546e 1547e 1548e 1549e 1550e 1601m

再次卸载home分区就成功了。

[root@localhost ~]# umount /home/

-k 表示自动把霸占home分区的进程kill掉! 如果你不是很明确是否要杀死所有霸占设备的程序,还可以加一个-i 参数,这样每杀死一个程序前,都会询问!(即fuser -m -v -i -k /home

参考

Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理 - gegeman - 博客园 (cnblogs.com)
Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统) - 云+社区 - 腾讯云 (tencent.com) linux磁盘分区格式化-fdisk - 天生帅才 - 博客园 (cnblogs.com)