Linux磁盘管理——LVM管理


前几日在项目中遇到了LVM分区管理的需求,需求很简单,就是有台服务器需要挂载一块磁盘,然后为其的/var目录扩容,并且为/data目录单独挂载一个lv(逻辑卷)。然而……多年没有操作的我居然把命令都忘光了。所以此写一个关于LVM的文章,尽可能将所有的场景都写一下。为了以后工作时忘记命令可查,也为了帮助其他的人(好像别人都不需要……)。

注意:文中命令中涉及的vgname,diskpath,lvname等信息请以实际为准,请勿照抄!

假设现在我有一台服务器,需要为/data目录单独挂载一个lv,服务器现在已经挂载了一个5G的硬盘。登录服务器查看pv(物理卷)信息,执行pvs命令。如下图可见当前服务器只有一个pv。

查看/dev目录发现新加入的硬盘为sdb,那么就以它创建一个物理卷,执行命令pvcreate diskpath,如下图成功创建/dev/sdb物理卷。

再次查看pv信息,如下图会看见刚才新建的物理卷。

查看卷组信息,执行命令vgs,如下图当前只有一个卷组。

因为/data目录用来存储数据,所以我决定单独给他创建一个卷组,执行命令vgcreate vgname diskpath,如下图成功创建卷组vg02。

再次查看卷组信息,如下图可见新的卷组。

查看逻辑卷信息,执行命令lvs,如下图可见当前逻辑卷信息。

创建新的名为lv_data的逻辑卷,执行命令 lvcreate -L 逻辑卷容量 -n lvname vgname,如下图我用刚刚创建的卷组vg02的空间创建了新的lv_data逻辑卷。 注意:这里逻辑卷容量需要稍小于卷组的可用空间。

查看逻辑卷信息,如下图可见已经新建的逻辑卷。

因为是要将整个逻辑卷给/data使用,并且是新建的逻辑卷,所以需要对磁盘进行格式化,执行命令mkfs.xfs /dev/vgname/lvname 或 mkfs.ext4 /dev/vgname/lvname,如下图:

挂载新建的逻辑卷到/data目录,执行命令mount命令,然后执行df命令查看逻辑卷是否已经挂载到对应的目录,如下图。

为了让系统再启动时自动挂载相应的逻辑卷,将逻辑卷挂载信息写入/etc/fstab文件,写fstab的时候可以写逻辑卷路径,也可以写逻辑卷的UUID,这里我写入了逻辑卷的UUID,执行blkid即可查看系统中所有磁盘或逻辑卷的UUID。查看UUID及写fstab见下图。

修改完成后可以执行mount -a验证。至此为/data目录单独挂载一个lv的需求完成。

=================正常需求场景=================

假设现在因为业务运行等原因发现原来的/data目录容量已经不够了,需要对其进行扩容。服务器已经挂载了一块新的2G磁盘。首先查看新加入的磁盘名称,进行新建物理卷,然后如下图查看现有卷组信息。

通过lvs可以查看到需要扩容的逻辑卷所在的卷组名,执行命令vgextend vgname diskpath,使用新的物理卷扩容原有卷组容量,如下图:

查看卷组信息可见卷组已扩容。

查看逻辑卷信息。

执行命令lvextend -L +扩容容量大小 lvpath,如下图完成对逻辑卷的扩容。

注意:这里输入扩容容量时,如果前面带加号表示扩容的容量,如果不带加号表示扩容到多大的容量。

查看逻辑卷信息,确认逻辑卷扩容完成。

查看操作系统所有目录信息。

执行命令xfs_growfs lvpath ,或ext文件系统执行resize2fs lvpath为文件系统扩容。

查看操作体系目录信息,确认文件系统扩容完成。

至此/data目录扩容完成。

=================小众需求场景=================

假设过了些日子需求又变了……,这次是经过系统一段时间平稳的运行后发现,上次扩容用的2G磁盘连一半都没有用到,为了物尽其用,现在有一块1G的磁盘,需要用这块1G的磁盘去替换之前的2G磁盘。

首先老套路查看新磁盘名称,以新磁盘新建物理卷,查看卷组信息,确定需要加入新物理卷的卷组名称,执行命令vgextend vgname diskpath将物理卷加入卷组。如下图。

查看物理卷容量消耗信息,执行命令pvs -o+pv_used,如图:

执行命令pvmove sourcediskpath targetdiskpath进行物理卷数据移动,完成后查看物理卷容量消耗是否已经为零。如图。

确认物理卷容量消耗为零后,执行vgreduce vgname diskpath将物理卷从卷组中删除。查看pv信息确认物理卷已经从卷组中删除。

执行命令pvremove diskpath删除物理卷。

至此更换逻辑卷中磁盘的需求完成。

=================神经病需求场景=================

假设因疫情导致公司经营惨淡,需要靠卖硬盘维继日常开销,老板通知要将所有服务器除操作系统盘外的硬盘卸下然后拿去卖钱跑路。那直接拔硬盘不就好了吗。但是我是一个有职业操守的人,所以我决定先卸载相应的目录,然后查看操作系统目录信息加以确认,修改/etc/fstab文件删除启动挂载条目。

查看逻辑卷信息,并执行lvremove diskpath删除相应逻辑卷。

执行vgremove vgname删除相应的卷组。

查看物理卷信息,执行pvremove diskpath删除已经不属于任何卷组的物理卷。

至此无良老板的神经病需求完成。