一、简述
什么是逻辑卷?LVM(Logical Volume Manager)利用Linux内核device-mapper实现存储系统的虚拟化。通过LVM,把底层存储硬件抽象化成存储逻辑块,再将这些逻辑块集合构成存储池,从存储池空间划分分区,可以简单地扩大或缩小分区,而不用担心硬盘没有足够的连续空间。
使用逻辑卷分区有什么用?使用逻辑卷分区重点在于可以弹性地调整文件系统的容量。在实际环境中我们经常会遇一个文件系统空间不足,想要扩展却又十分麻烦,一开始划分空间偏大,想要缩减也是同样不方便。而LVM可以很好地解决这些问题。
逻辑卷的缺点:由于LVM的原理,导致一个文件数据可能分布在多个硬件设备上,这些设备中只要有一个损坏,数据便有丢失。而且存储效率上也有所下降。通常LVM结合RAID使用,提升读写效能或数据可靠性。
二、LVM原理
首先理解四个逻辑卷基本概念:
1、PV(Physical Volume)物理卷:LVM的基本存储逻辑块,可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。
2、VG(Volume Group)卷组:一个或多个物理卷组成卷组,即构成一个存储池。可以在卷组上创建“LVM分区”(逻辑卷)
3、LV(Logical Volume)逻辑卷:由若干物理区域组成的虚拟分区,类似于硬盘分区
4、PE(Physical Extent)物理区域:硬盘可供指派给逻辑卷的最小单位。
5、LE(Logical Extent)逻辑区域:物理区域被指派给逻辑卷后变为逻辑区域,组成逻辑卷的最小单位。
简答来讲,我们先将块设备初始化为PV,将若干个PV划分为一个VG卷组并命名,卷组被创建时,将PV划分为若干个PE,默认PE大小为4M,即这些PE构成了卷组,最后我们从卷组中拿出若干个PE组成逻辑卷并命名,相当于划分出一块硬盘分区,逻辑卷创建后就可以正常使用它了,比如进行格式化操作,然后挂载到目录树上。
三、LVM创建演示
以下操作环境为Centos6.8
准备工作:我划分了三个分区/dev/sdb{1,2,3},并设置分区类型为 Linux LVM
PV初始化
[root@centos6 mapper]$ pvcreate /dev/sdb{1,2,3} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created
简单查看创建PV信息
[root@centos6 mapper]$ pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 ---- 5.00g 5.00g /dev/sdb2 lvm2 ---- 5.00g 5.00g /dev/sdb3 lvm2 ---- 5.00g 5.00g
详细查看PV信息
[root@centos6 mapper]$ pvdisplay "/dev/sdb1" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 5.00 GiB Allocatable NO PE Size 0 #在未被加入卷组前,未划分PE Total PE 0 Free PE 0 Allocated PE 0 PV UUID jxLEiT-LOXv-9zqY-Vui2-QRNN-AkN4-vcZehm "/dev/sdb2" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 5.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID vHa18C-QW5D-8lB1-2dRX-jxOF-OcCF-aFBDSb "/dev/sdb3" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb3 VG Name PV Size 5.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID NtfNOu-NRYs-CRv8-TcyI-HXbg-Nidr-89Kiwf
VG:创建一个名为jat的卷组
[root@centos6 mapper]$ vgcreate jat /dev/sdb{1,2} Volume group "jat" successfully created
查看VG信息
[root@centos6 mapper]# vgs VG #PV #LV #SN Attr VSize VFree jat 2 0 0 wz--n- 9.99g 9.99g [root@centos6 mapper]# vgdisplay --- Volume group --- VG Name jat System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 9.99 GiB #卷组容量为两个PV容量总 PE Size 4.00 MiB #默认PE大小为4M Total PE 2558 #PE的总数 Alloc PE / Size 0 / 0 #PE分配的情况 Free PE / Size 2558 / 9.99 GiB VG UUID bwm8dx-QYgR-H0cO-xbCe-AvGe-zvDL-qfNIlp
再来看下PV信息
[root@centos6 mapper]$ pvdisplay --- Physical volume --- PV Name /dev/sdb1 VG Name jat PV Size 5.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB #相关PE的信息已更新 Total PE 1279 Free PE 1279 Allocated PE 0 PV UUID jxLEiT-LOXv-9zqY-Vui2-QRNN-AkN4-vcZehm
创建LV
[root@centos6 mapper]$ lvcreate -L 2G -n pap1 jat Logical volume "pap1" created. [root@centos6 mapper]$ lvcreate -L 4G -n pap2 jat Logical volume "pap2" created.
查看LV
[root@centos6 mapper]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert pap1 jat -wi-a----- 2.00g pap2 jat -wi-a----- 4.00g [root@centos6 mapper]# lvdisplay --- Logical volume --- LV Path /dev/jat/pap1 #逻辑卷设备地址 LV Name pap1 VG Name jat LV UUID heIpsn-nhPS-BH91-CDrU-6pi0-LFyR-MZBeRs LV Write Access read/write LV Creation host, time centos6.localdomain, 2016-09-02 20:26:27 +0800 LV Status available #新创建的LV默认激活可用 # open 0 LV Size 2.00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
引用LV设备有多个路径
形式1:/dev/mapper/VG_NAME-LV_NAME
形式2:/dev/VG_NAME/LV_NAME
以上都是软连接指向实际设备文件/dev/dm-N
格式化逻辑卷pap1,挂载
mkfs.ext4 /dev/jat/pap1 mount /dev/jat/pap1 /mnt/pap1
使用df命令查看,逻辑卷pap1可用容量
尝试向逻辑卷挂载点拷贝一些数据,完全正常,至此逻辑卷创建成功。
四、扩展VG,LV
扩展VG
[root@centos6 ~]$ vgextend jat /dev/sdb3 #给卷组jat新加一个PV Volume group "jat" successfully extended [root@centos6 ~]# vgs #查看VG容量已增加了5G VG #PV #LV #SN Attr VSize VFree jat 3 2 0 wz--n- 14.99g 8.99g
在线扩展LV
命令工具:lvextend
-l|–extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}]
此选项可以指定逻辑卷新的LE数量,或增加的数量,也可指定百分比形式扩展
-L|–size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}
此选项指定大小来扩展
lvextend -l +100%FREE /dev/jat/pap1 #将jat卷组的所有剩余PE分配给pap1 lvextend -L 5G /dev/jat/pap1 #将pap1扩展至5G大小 lvextend -L +1G /dev/jat/pap1 #增加1G的容量
扩展前,vgdisplay 查看卷组使用情况,原始pap1容量
开始扩展pap1
[root@centos6 ~]# lvextend -L +2G /dev/jat/pap1 Size of logical volume jat/pap1 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents). Logical volume pap1 successfully resized.
查看pap1 容量增加了2G
再对文件系统调整大小
[root@centos6 ~]$ fsadm resize /dev/jat/pap1 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/jat-pap1 is mounted on /mnt/pap1; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/mapper/jat-pap1 to 1048576 (4k) blocks. The filesystem on /dev/mapper/jat-pap1 is now 1048576 blocks long.
其实可以在扩展LV带上-r选项可省略此步骤,例如
lvextend -r -L +2G /dev/jat/pap1
df-h查看文件系统大小,已经增加2G容量
五、缩减LV
缩减操作较为危险,谨慎操作。缩减LV之前确保已对文件系统重新调整大小。
1、卸载逻辑卷
umount /mnt/pap1
2、强制检测文件系统
e2fsck -f /dev/mapper/jat-pap1
3、resize文件系统
[root@centos6 ~]$ fsadm resize /dev/jat/pap1 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/jat-pap1 to 786432 (4k) blocks. The filesystem on /dev/mapper/jat-pap1 is now 786432 blocks long.
4、缩减LV
[root@centos6 ~]$ lvchange -an /dev/jat/pap1 #停止pap1工作 [root@centos6 ~]$ lvreduce -L 3G /dev/jat/pap1 #缩减至3G Size of logical volume jat/pap1 changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents). Logical volume pap1 successfully resized.
5、激活,挂载
lvchange -ay /dev/jat/pap1 mount /dev/jat/pap1 /mnt/pap1
六、移除PV
移除PV正确操作不会毁坏数据
例如移除/dev/sdb1 此PV
[root@centos6 ~]# pvmove /dev/sdb1 #先把此PV内分配走PE转移到其他PV上 /dev/sdb1: Moved: 0.1% /dev/sdb1: Moved: 12.9% /dev/sdb1: Moved: 22.5% /dev/sdb1: Moved: 32.7% /dev/sdb1: Moved: 42.2% /dev/sdb1: Moved: 52.3% /dev/sdb1: Moved: 62.8% /dev/sdb1: Moved: 71.6% /dev/sdb1: Moved: 82.8% /dev/sdb1: Moved: 93.5% /dev/sdb1: Moved: 100.0% [root@centos6 ~]# vgreduce jat /dev/sdb1 #在卷组中移除 Removed "/dev/sdb1" from volume group "jat" [root@centos6 ~]# pvremove /dev/sdb1 #最后清除PV标志 Labels on physical volume "/dev/sdb1" successfully wiped
七、LVM快照功能
快照是一种特殊的逻辑卷,是复制原始卷的元数据而建立的逻辑卷,因此它创建速度很快,而且与原始卷在同一卷组。LVM 快照利用一种称为“写时复制(COW – Copy-On-Write)”的技术来跟踪和维持其数据的一致性。当原始卷的数据块(指原始卷所包含的所有数据块,即是空白数据块)第一次写入新数据时,会将旧数据块内容拷贝至快照空间中,也就是说如果只是删掉原始卷某一文件,但是其占用的数据块内容没有改变,删除文件只是不再占有这些数据块,COW认为数据块内容没发生改变,所以不会占用快照空间;还有如果数据块已经重写过一次数据,COW不会再跟踪。
分配给快照的空间,要依据写入的数据量多大和写入的频率,不一定要指派原始卷一样大的空间。快照空间可以扩展或缩减。
利用快照可以记录一个正在使用中的逻辑卷,然后制作一份拍照时刻的备份,由于这个备份是具有一致性的,因此非常的适合于用来备份实时系统。例如,您的运行中的数据库可能即使在备份时刻也是不允许暂停服务的,那么就可以考虑使用LVM的快照模式,然后再针对此快照来进行文件系统级别或者块设备级别的数据备份。
创建快照
为pap1创建一个快照,大小为128M
[root@centos6 pap1]$ lvcreate -s /dev/jat/pap1 -n snap_pap1 -L 128M Logical volume "snap_pap1" created.
查看LV信息,已经有快照相关信息生成
快照逻辑卷创建时带有文件系统,可以直接挂载,建议只读挂载
[root@centos6 pap1]# mount -r /dev/jat/snap_pap1 /mnt/snap [root@centos6 pap1]# ll !$ ll /mnt/snap total 22 drwxr-xr-x. 128 root root 8192 Sep 3 21:04 etc 可以看见原逻辑卷的文件 drwx------. 2 root root 12288 Sep 2 22:21 lost+found
[root@centos6 pap1]# rm -rf /mnt/pap1/etc/issue #删掉原逻辑卷一个文件做试验 [root@centos6 pap1]# cat /mnt/s sdb1/ snap/ [root@centos6 pap1]# cat /mnt/snap/etc/issue #快照区备份了原文件,证明备份有效 System time is \t CentOS release 6.8 (Final) Kernel \r on an \m what is your pincode ?
原创文章,作者:cutemsyu,如若转载,请注明出处:http://www.178linux.com/42892
评论列表(1条)
赞