LVM(Logical Volume Manager)逻辑卷管理
一:LVM简介
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理:
通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
二:基本的逻辑卷管理概念
PV(Physical Volume)- 物理卷(被pv命令处理过的物理分区) | 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。 |
---|---|
VG(Volumne Group)- 卷组(被组装到一起的物理卷) | 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。 |
LV(Logical Volume)- 逻辑卷(直接使用的设备,可以增大缩减并保持原有数据不变) | 逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组 |
pe物理扩展 | lvm设备的最小存储单元,LVM默认使用4MB的PE区块,lv是pe的整数倍 |
用橘子来比喻的话:三:逻辑盘卷管理
首先,在做实验前,我们需要建立一个lvm类型(可伸缩)磁盘
如图所示:
列出磁盘信息
实验如下:
<1>建立lv逻辑卷,并将文件系统挂载在/data
为了实验的可观性,我们用watch命令监控
watch -n 1 'pvs;echo======;vgs;echo======;lvs;ech0=====;df -h /data;df -H /data'
注意:df -h 是二进制,单位1024
df -H 是十进制,单位1000
第一步:创建pv
pvcreate /dev/vdb1
第二步:创建vg
vgcreate vg0 /dev/vdb1 vg0是创建的卷组名称,可自定义
第三步:创建lv
lvcreate -L 100M -n lv0 vg0 -L跟的lv的大小 -n跟的创建逻辑卷lv的名称
当vg的默认pe修改为16的时候
第四步:格式化逻辑卷,并挂载
mkfs.xfs /dev/vg0/lv0 格式化逻辑卷lv0
mount /dev/vg0/lv0 /mnt 将逻辑卷lv0挂载到/data目录
df -H /data 查看/data目录大小,十进制
df -h /data 查看/data目录大小,二进制
<2>lv的拉伸
lvm支持xfs拉伸
1.当vg中的剩余容量充足情况
lvextend -L 200M /dev/vg0/lv0 ##拉伸设备lv到200M
xfs_grow /dev/vg0/lv0 ##拉伸文件系统
如图所示:
拉伸设备:拉伸文件系统:
2.当vg中的容量不足时
再次建立分区并修改标签8e
pvcreate /dev/vdb2
vgextend vg0 /dev/vdb2 ##拉伸物理卷组
lvextend -L 600M /dev/vg0/lv0 扩展lv0设备
xfs_grow /dev/vg0/lv0 扩展文件系统
<3>lvm的删除
umount /data 卸载
lvremove /dev/vg0/lv0 删除逻辑卷
vgremove vg0 删除卷组
pvremove /dev/vdb2 删除物理卷
如图:
<3>.针对ext文件系统的设备的拉伸和缩减
<1>拉伸
umount /mnt
mkfs.ext4 /dev/vg0/lv0 将lv0格式化成ext4格式文件系统
mount /dev/vg0/lv0 /mnt
lvextend -L 250M /dev/vg0/lv0 #拉伸设备
resize2fs /dev/vg0/lv0 #拉伸ext4文件系统
如图:
卸载并格式化:
挂载并且拉伸设备:
拉伸文件系统
<2>缩减
xfs文件系统不能缩减
ext4可以缩减
umount /dev/vg0/lv0 卸载
e2fsck -f /dev/vg0/lv0 系统要先进行扫描
resize2fs /dev/vg0/lv0 100M 缩减文件系统
lvreduce -L 100M /dev/vg0/lv0 缩减设备
mount /dev/vg0/lv0 /mnt 挂载
如图所示:
卸载并且进行扫描
缩减文件系统并挂载
最后缩减设备
<4>移除含有数据的设备
我们此时vbd1上面含有数据,vbb2为空,我们需要将vdb1这块磁盘删除,这时就要将数据移动到vdb2上,再去删除vdb1,具体操作如下:
第一步:
pvmove /dev/vdb1 /dev/vdb2 将/dev/vdb1上面的数据移动到/dev/vdb2
vgreduce vg0 /dev/vdb1 将vg0从/dev/vdb1删除
pvremove /dev/vdb1 将/dev/vdb1删除
<5>llvm快照
快照就是将当时的系统信息记录下来,就好像照相一样,未来若有任何资料变动了,则原始资料会被保存在快照区,没有被改动的区域则由快照区与档案系统共享。
快照区与被快照的LV 必须要在同一个VG 里
实验如下:
前提:
第一步:在原本的被快照目录里建立文件,并卸载:
第二步:此时我们想看这个data目录里面的内容,但是又不想挂载这个设备,那么我们可以给这个目录建立一个快照,挂载快照
lvcreate -L 20M -n lv0-backup -s /dev/vg0/lv0 给/lv0创建快照,快照的大小为20M,名称为lv0-backup
mount /dev/vg0/lv0-backup /data 挂载
挂载快照后,可以查看到/data里的文件
第三步:删除被快照目录的所有文件
rm -fr /data/*
第四步:
umount /data 卸载
lvremove /dev/vg0/lv0-backup 删除刚才建立的快照
第五步:重新建立快照并挂载
lvcreate -L 20M -n lv0-backup -s /dev/vg0/lv0 重新建立快照区
mount /dev/vg0/lv0-backup /mnt 挂载
对/data的修改量不能超过快照的大小(我们这是是删除操作不影响),由于原始数据会被搬移到快照区,如果你的快照区不够大,若原始资料被更动的实际数据量比快照区大,那么快照区当然容纳不了,这时候快照功能会失效喔