一:什么是LVM

LVM 的全名是 Logical Volume Manager,LVM 的作法是将几个实体的partitions (或 disk) 透过软件组合成为一个看起来是独立的大磁盘 (VG) ,然后将这个大磁盘再经过分割成为可使用分割槽 (LV), 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实是和一个称为 PE 的项目有关! 底下我们就得要针对这几个项目好好聊聊!
     Physical Volume, PV, 实体滚动条
我们实际的 partition 需要调整系统标识符 (system ID) 成为 8e (LVM 的标识符),然后再经过pvcreate 的命令将他转成 LVM 最底层的实体滚动条 (PV) ,之后才能够将这些 PV 加以利用! 调整system ID 的方是就是通过fdisk 命令
     Volume Group, VG, 滚动条群组
所谓的 LVM 大磁盘就是将许多PV 整合成这个 VG 。所以 VG 就是 LVM 组合起来的大磁盘!这么想就好了。 那么这个大磁盘最大可以到多少容量呢?这不底下要说明的就和 PE 有关了。
     Physical Extend, PE, 实体延伸区块
LVM 预设使用 4MB 的 PE 区块,PE是整个 LVM 最小的储存区块,也就是说,其实我们的档案资料都是写入 PE 来处理的。 简单的说,这个 PE 就有点像文件系统里面的block 大小。 这样说应该就比较好理解了吧?所以调整 PE 会影响到 VG 的最大容量喔!
     Logical Volume, LV, 逻辑滚动条最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分割槽的咚咚了!那么 LV 是否可以随意制定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就和在此LV 内的 PE 数有关。 为了方便用户利用 LVM 来管理其系统,因此 LV 的装文件名通常定为/dev/vgname/lvname 的样式!

    此外,LVM可以弹性的更改LVM的容量,通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量

 VG、 LV 不 PE 的关系有点像下图:

QQ截图20180226205205.png



二:逻辑卷管理器快照

    快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝,对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择。快照只有在它们和原来的逻辑卷不同时才会消耗空间。在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间,当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据,建立快照的卷大小只需要原始逻辑卷的15%~20%就够了,也可以使用lvextend放大快照

    快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG.系统恢复的时候的文件数量不能高于快照区的实际容量
为现有逻辑卷创建快照
#lvcreate -s -L 50M -n testlvnap /dev/testvg/testlv

挂载快照
#mkdir -p /app/kk
#mount -o ro /dev/vg0/snap-data /app/kk
 删除快照
#umount /mnt/databackup
#lvremove /dev/vg0/databackup

13.png



三:实验命令及操作

    1创建pv及查看

        pvcreate /dev/sdd /dev/md0
        pvs
        pvdisplay

pvcreat.png

    2:创建vg及查看

        vgcreate testvg /dev/sdd
        vgs
        vgdisplay

vgcreate.png

3:创建lv及查看

lvcreate -L 55M -n testlv /dev/tsetvg
lvcreate -l 11 -n test1 /dev/tsetvg

lvcreate -l +100%FREE -n test2 /dev/tsetvg

lvgreate.png


四:实验

        1:扩展逻辑卷

如果卷组空间不够扩展需求,应先扩展卷组
vgextend vgtest /dev/md0 (如没有可用pv,应该先创建pv)
lvextend /dev/testvg/testlv -L 100M
resize2fs /dev/testvg/testlv [ number ]
kuo.png

扩2.png

    如果卷组空间足够,直接扩展
lvextend -L 200M /dev/testvg/testlv -r  (加上-r一步到位,即扩展逻辑卷,同时扩展文件系统大小)
111.png    对于xfs文件系统,也可直接在lvextend中直接用-r,一步到位,如果要分开操作,先扩展逻辑卷,再拉伸文件系统,则应该使用xfs_growfs如下
xfs_growfs /dev/wangkai/kk


112.png


2:减小逻辑卷
    1.umount
    2.e2fsck -f /dev/vgmage01/lv2801
    3.resize2fs /dev/vgmage01/lv2801 100M
    4.lvreduce -L 100M /dev/vgmage01/lv2801
113.png

在上图中,卸载完成后,先进行扫描,之后再resize2fs 最后减少lv大小,结果发现,lv减少,但挂载不上去了。扩大lv后,成功挂载。

    


4:将包含lvm的磁盘迁移到其他主机
    1.umount /mnt/test/
    2.vgchange -an testvg
    3.vgexport vgtest
    4.迁移硬盘
    5.在新的主机pvscan    
    6.vgimport testvg
    7.vgchange -ay
10.png11.png


5:将某个pv从vg中删除,但该pv包含数据
    1.pvmove /dev/sdd
    2.vgreduce testvg /dev/sdd
    3.pvremove /dev/sdd

14.png