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,也就是物理卷,如图
用命令 vgcreate vg0 /dev/vdb1 建立的物理卷组命名为 vg0 ,此时卷组中只有一个/dev/vdb1一个物理卷,如图
用命令lvcreate -L 20M -n lvo vg0 在vg0上建立一个大小为20M ,命名为lv0的lvm,也就是逻辑卷,如图
将所建立的逻辑卷格式化 mkfs.xfs /dev/vg0/lv0 如图
将其挂载到/mnt下 mount /dev/vg0/lv0 /mnt 如图
我们可以通过命令看到vg、lv的容量、剩余容量和容量使用情况。如图
vgs的容量为96M,剩余76M
lv的容量为20M
3.lvm拉神
1.)当vg中的剩余容量充足情况
lvextend -L 80M /dev/vg0/lv0 拉伸设备,将lv0扩容到80M,如图
xfs_grow /dev/vg0/lv0 执行调整
此时,我们再来观察vg和lv的容量情况,如图
我们可以看到vg的剩余容量减少了60M,lv的剩余容量增加了60M。这说明物理卷组把剩余容量中的60M增加给了逻辑卷
2).当vg中的容量不足时
再次建立分区并修改标签8e
我们再将vdb2分区做成物理卷,pvcreate /dev/vdb2
然后将其放在我们建好的vg0物理卷组中,vgextend vg0 /dev/vdb2 ,可以用命令pvs观察到此时的物理卷组中有两个物理卷,如图
我们可以看到整个物理卷组剩余的容量为16M+96M=112M,所以说我们可以给逻辑卷最多添加112M的容量
下来我们用命令将逻辑卷容量增加至192M
lvextend -L192M /dev/vg0/lv0
xfs_grow /dev/vg0/lv0
如图
此时我们再观察lv和vg的容量变化情况
果然,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
然后将其拉伸到252M
lvextend -L 252M /dev/vg0/lv0
resize2fs /dev/vg0/lv0
缩减lvm
先将
umount /dev/vg0/lv0
e2fsck -f /dev/vg0/lv0
resize2fs /dev/vg0/lv0
lvreduce -L 100M /dev/vg0/lv0
mkfs.ext4 /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt
缩减vg
移除空闲pv
vgreduce vg0 /dev/vdb/vdb2
移除含有数据的设备
就是将含有数据的设备上的数据移到空闲设备中 然后再移除该设备
pvmove /dev/vdb1 /dev/vdb2 /dev/vdb3
vgreduce vg0 /dev/vdb1
premove /dev/vdb1
4.lvm快照
如图,我们删除了快照lost+found,然后重新建立就会又出现
lvcreat -L 40M -n lv0-backup -s /dev/vg0/lv0
mount /dev/vg0/lv0-backup /mnt
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
5.lvm的删除
lvremove /dev/vg0/lv0-backup
lvremove /dev/vg0/lv0
vgremove vg0
pvremove /dev/vdb2