Linux 中的LVM逻辑卷管理

1.基本概念

  对于Linux用户而言,在安装一台Linux机器的时候,遇到的问题之一就是给各分区估计和分派足够的硬盘空间。无论对一个正在为服务器寻找空间的系统管理员,还是对一个磁盘即将用尽的普通用户来说,这都是一个非常常见的问题。我们无法精确评估和分配各个硬盘分区的容量,因为系统管理员不仅要考虑到 当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬 盘、重新对硬盘分区,然后恢复数据到新分区,这很麻烦。虽然现在有很多动态调整磁盘的工具可以使用,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽,这只是暂时的解决的方法。Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。它可以在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。

  LVM是linux逻辑卷管理(Logical Volume Manager)的缩写。他的功能是将固定的物理盘的功能能提供给用户一个动态的功能。以前我们用的物理盘有多大,那么建立在这个盘上的文件系统的上限就是多大。但是有了LVM这个功能后,我们建立文件系统的盘就不是建立在物理盘上,而是建立在一个叫LV逻辑卷上面,这个卷是一个逻辑概念不是物理盘,空间可能大于一个物理盘,也可能小于一个物理盘。而且这个LV逻辑卷的空间可以扩展和缩小,这样就给上层的文件系统 提供了更好的支持。当分区达到了它们的极限时,逻辑卷组中的空闲空间就可以被添加给逻辑卷来增加分区的大小。

pv:      物理卷( 被lv命令处理过的物理分区)
vg:      物理卷组 (被组装到一起的物理卷)
pe:     扩展(lvm设备的最小存储单元lvm是pe的整数倍)
lvm:    逻辑卷 (直接使用的设备,可以增大缩减并保持原有数据不变)
2.lvm建立

先分区,定分区标签为8e
再用命令 pvcreate /dev/vdb1 将分区vdb1做成一个pv,也就是物理卷,如图

Linux 中的LVM逻辑卷管理
用命令  vgcreate vg0 /dev/vdb1 建立的物理卷组命名为 vg0  ,此时卷组中只有一个/dev/vdb1一个物理卷,如图

Linux 中的LVM逻辑卷管理
用命令lvcreate -L 20M -n lvo vg0 在vg0上建立一个大小为20M ,命名为lv0的lvm,也就是逻辑卷,如图

Linux 中的LVM逻辑卷管理
将所建立的逻辑卷格式化 mkfs.xfs /dev/vg0/lv0  如图

Linux 中的LVM逻辑卷管理
将其挂载到/mnt下   mount /dev/vg0/lv0 /mnt   如图

Linux 中的LVM逻辑卷管理

我们可以通过命令看到vg、lv的容量、剩余容量和容量使用情况。如图

Linux 中的LVM逻辑卷管理

Linux 中的LVM逻辑卷管理

vgs的容量为96M,剩余76M

lv的容量为20M

3.lvm拉神
1.)当vg中的剩余容量充足情况
lvextend -L 80M /dev/vg0/lv0             拉伸设备,将lv0扩容到80M,如图

Linux 中的LVM逻辑卷管理
xfs_grow /dev/vg0/lv0            执行调整

Linux 中的LVM逻辑卷管理

此时,我们再来观察vg和lv的容量情况,如图

Linux 中的LVM逻辑卷管理

Linux 中的LVM逻辑卷管理

我们可以看到vg的剩余容量减少了60M,lv的剩余容量增加了60M。这说明物理卷组把剩余容量中的60M增加给了逻辑卷

2).当vg中的容量不足时
再次建立分区并修改标签8e
我们再将vdb2分区做成物理卷,pvcreate /dev/vdb2
然后将其放在我们建好的vg0物理卷组中,vgextend vg0 /dev/vdb2      ,可以用命令pvs观察到此时的物理卷组中有两个物理卷,如图

Linux 中的LVM逻辑卷管理

我们可以看到整个物理卷组剩余的容量为16M+96M=112M,所以说我们可以给逻辑卷最多添加112M的容量
下来我们用命令将逻辑卷容量增加至192M 

lvextend -L192M /dev/vg0/lv0 

xfs_grow /dev/vg0/lv0

如图

Linux 中的LVM逻辑卷管理

Linux 中的LVM逻辑卷管理

此时我们再观察lv和vg的容量变化情况

Linux 中的LVM逻辑卷管理

果然,vg的剩余空间为0,而lv的容量增加了112M。如果我们还想增加lv的容量,我门只需要给物理卷组增加物理卷然后进行lvm拉伸即可。

注意:xfs类型的文件系统调整命令:xfs_grow(只支持增大)

            ext2,etx3,etx4类型的文件系统调整命令:resize2fs(增大减小都支持)

3) 针对ext文件系统的设备的拉伸和缩减
先将/dev/vg0/lv0格式化成ext4类型,然后将其挂载到/mnt上

umount /mnt
mkfs.ext4  /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt

Linux 中的LVM逻辑卷管理

Linux 中的LVM逻辑卷管理
然后将其拉伸到252M
lvextend -L 252M /dev/vg0/lv0
resize2fs  /dev/vg0/lv0

Linux 中的LVM逻辑卷管理

缩减lvm

先将
umount  /dev/vg0/lv0
e2fsck -f /dev/vg0/lv0

Linux 中的LVM逻辑卷管理
resize2fs /dev/vg0/lv0

Linux 中的LVM逻辑卷管理
lvreduce -L 100M /dev/vg0/lv0

Linux 中的LVM逻辑卷管理
mkfs.ext4  /dev/vg0/lv0

mount /dev/vg0/lv0 /mnt

Linux 中的LVM逻辑卷管理

缩减vg
移除空闲pv
vgreduce vg0 /dev/vdb/vdb2

Linux 中的LVM逻辑卷管理

移除含有数据的设备

就是将含有数据的设备上的数据移到空闲设备中 然后再移除该设备
pvmove /dev/vdb1 /dev/vdb2 /dev/vdb3
vgreduce vg0 /dev/vdb1
premove /dev/vdb1

Linux 中的LVM逻辑卷管理

4.lvm快照

如图,我们删除了快照lost+found,然后重新建立就会又出现
lvcreat -L 40M -n lv0-backup -s /dev/vg0/lv0
mount /dev/vg0/lv0-backup /mnt

Linux 中的LVM逻辑卷管理
rm- rf /mnt/*

umount /mnt
lvremove /dev/vg0/lv0-backup
lvcreate -L 40M -n lv0-backup -s /dev/vg0/lv0
mount /dev/vg0/lv0=backup /mnt

Linux 中的LVM逻辑卷管理

 

5.lvm的删除
lvremove /dev/vg0/lv0-backup
lvremove /dev/vg0/lv0
vgremove vg0
pvremove /dev/vdb2

Linux 中的LVM逻辑卷管理