Linux分区动态扩容lvm
Linux分区主要分为主分区、扩展分区、逻辑分区,主分区最多支持4个分区,扩展分区也算主分区中的一个。
只有LVM格式的逻辑分区支持在线动态扩容,不用重启机器,方法如下: (vmware虚拟机进行演示)
首先登陆linux服务器,可以看到默认的根分区和swap都是lvm格式的逻辑分区,除此之外没有其他分区

现在我们新增一个硬盘,将其挂载到data分区下,并且让data分区支持在线扩容。


如上图,我们新增了一块硬盘,大小为20G。
通过命令fdisk –l查看到已经添加的磁盘,但是还没有进行分区,下面执行命令进行分区
- 先执行fdisk /dev/sdb进行分区,如图:

2. 输入m可以查看到命令对应的功能,如图:

3. 输入n添加一个新分区,然后输入p,添加主分区:

4. 下面输入分区编号以及大小值,直接默认即可,如图:

5. 然后输入t表示更改分区类型,然后输入8e 表示改为逻辑分区,最后输入w保存即可,如图:

6. 分区后再次执行fdisk –l 查看分区后的磁盘情况,发现已经分区完 成,并且是lvm格式的,如图:

7. 在新的硬盘上创建物理卷,用pvcreate命令:

创建完成后可以直接使用pvs或者pvdisplay查询当前存在的pv信息,如图:

8. 创建卷组,使用vgcreate命令(在物理卷的基础上创建卷组),创建后将刚才创建的物理卷加入到这个卷组vg1中 ,如图:

9. 创建完成后可以使用vgs或者vgdisplay来查看创建的卷组,可以查看到卷组中的pv数量是一个,如图:


注:也可以通过vgs/vgdisplay + 卷组来查看指定卷组信息
10. 创建逻辑卷,使用lvcreate命令,命令有三种格式:
第一种:lvcreate –L 逻辑卷大小 –n 逻辑卷名称 卷组名称
第二种: lvcreate -l PE数 -n 逻辑卷名称 卷组名称
第三种: lvcreate -l +100%FREE -n 逻辑卷名称 卷组名称 #如果要把整个卷组都使用来创建lvm,就用这个命令
11. 如上图中的卷组vg1的空间大小为20G PE数为5119,先用第一种方法创建逻辑卷lv1 设置大小为5G,方法如下:
lvcreate -L 5G -n lv1 vg1 #这里要是大写的L

由上图可知,创建后的逻辑卷lv1的大小为5G,所用的PE数为1280(Current Le的值),每个PE的大小为4MB,1280个刚好为5G.
再次查询卷组vg1的大小(vgs/vgdisplay),发现剩余空间为15G, 所剩余的PE数量3839,此时我们使用第二种方法来创建第二个逻辑卷lv2,大小为5G
lvcreate -l 1280 -n lv2 vg1 #这里的是小写的l

格式化逻辑卷lv1并挂在到data目录下(如果要开机自动挂载需要写入到/etc/fstab文件中),如图:

12. 根据上面可知lv1的大小为5G ,卷组vg1的剩余空间还有10G , 现在要对lv1进行扩容,将其增加到15G,此时可以使用命令 lvextend,命令格式也有两种方法:
1、lvextend -L +新增的空间大小 逻辑卷名称
2、lvextend -l +PE数 逻辑卷名称
13. 现在采用第一种方法给lv1扩容5G,如下命令:
lvextend -L +5G /dev/vg1/lv1

14. 现在用第二种方法给lv1扩容5G ,如下命令 (卷组vg1剩余5G,可通过vgdisplay查询):
lvextend -l +1280 /dev/vg1/lv1

如果全部空间都扩容进入也可使用命令
lvextend -l +100%FREE /dev/vg1/lv1
15. 逻辑卷lv1扩容后实际上data目录并没有变大还需要执行最后一步命令 xfs_growfs /dev/vg1/lv1 让扩容生效

至此,linux动态扩容完成!!!
总结几个步骤:
- fdisk /dev/sdb #格式化磁盘
- pvcreate /dev/sdb1 #创建物理卷
- vgextend 卷组名 /dev/sdb1 #将物理卷加入到卷组中
- lvextend -l +100%FREE /dev/mapper/centos-root # 扩容lvm
- xfs_growfs /dev/mapper/centos-root # 使扩容生效
说明:
删除逻辑卷lv2命令: lvremove /dev/vg1/lv2
如果卷组的空间不足了那就无法继续创建逻辑卷,此时需要添加硬盘然后创建物理卷,然后将物理卷加入到卷组中,例如,当前的卷组vg1的空间为5G左右,现在给卷组加5G空间步骤(添加硬盘—fdisk分区—创建pv—vgextend添加),添加硬盘以及分区省略(上面有),我们从创建PV开始
第一步:创建PV, pvcreate /dev/sdc1

第二步:将PV加入到卷组vg1中,使用命令vgextend 卷组名 PV

删除卷组的命令是vgremove 删除物理卷的命令是pvremove
删除卷组的顺序是:首先卸载逻辑卷—–然后删除卷组上的所有逻辑卷—然后删除卷组
从卷组vg1中移除物理卷 /dev/sdc1,执行命令 vgreduce vg1 /dev/sdc1

执行删除命令后就剩下一个PV了

上面扩容文件系统大小的时候用的命令是xfs_growfs命令,因为此时的文件系统是xfs,如果用的文件系统是ext2/ext3/ext4,那么此时需要用另一个命令resize2fs来扩容文件系统空间。
第一步:如果在创建逻辑卷的时候采用的mkfs.ext4的方法来格式化逻辑卷,那么格式化后的文件系统即为ext4,如图:

执行命令lvextend -L +5G /dev/vg1/lv1

然后执行命令resize2fs /dev/vg1/lv1


完成!!!!
附加:
逻辑卷快照功能:
lvcreate -L 120M -s -n SNAP /dev/storage/lv1
使用-s 参数生成一个快照卷,使用-L 参数指定切割的大小。另外,还需要在命 令后面写上是针对哪个逻辑卷执行的快照操作
逻辑卷还原:先卸载再还原
umount /dev/lv1
lvconvert –merge /dev/storage/SNAP
如果卷组中的物理卷丢失,那么在通过命令vgdisplay -v查看的时候将会显示unknown,如图:

此时可以通过命令vgreduce –removemissing centos清除掉丢失的物理卷。
磁盘如果空间没有了,执行命令会提示:
Couldn't create temporary archive name


