lvm介绍与使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lvm介绍与使用相关的知识,希望对你有一定的参考价值。
一、简述
什么是逻辑卷?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.5 准备工作:我划分了三个分区/dev/vdb{1,2,3},并设置分区类型为 Linux LVM Device Boot Start End Blocks Id System /dev/vdb1 1 6243 3146440+ 8e Linux LVM /dev/vdb2 6244 12486 3146472 8e Linux LVM /dev/vdb3 12487 16648 2097648 8e Linux LVM 1.PV初始化 [[email protected] /]# pvcreate /dev/vdb{1,2,3} Physical volume "/dev/vdb1" successfully created Physical volume "/dev/vdb2" successfully created Physical volume "/dev/vdb3" successfully created 2.查看创建的PV信息 [[email protected] /]# pvs PV VG Fmt Attr PSize PFree /dev/vdb1 lvm2 ---- 3.00g 3.00g /dev/vdb2 lvm2 ---- 3.00g 3.00g /dev/vdb3 lvm2 ---- 2.00g 2.00g 详细查看PV信息 [[email protected] /]# pvdisplay "/dev/vdb1" is a new physical volume of "3.00 GiB" --- NEW Physical volume --- PV Name /dev/vdb1 VG Name PV Size 3.00 GiB Allocatable NO PE Size 0 #在未被加入卷组前,未划分PE Total PE 0 Free PE 0 Allocated PE 0 PV UUID 3ZEbcc-3S6o-jwfD-0Nxq-C038-uHVv-q50cKZ "/dev/vdb2" is a new physical volume of "3.00 GiB" --- NEW Physical volume --- PV Name /dev/vdb2 VG Name PV Size 3.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID cnhxZf-t5bM-FCca-Yp36-QfR2-1Ydd-aHTiqa "/dev/vdb3" is a new physical volume of "2.00 GiB" --- NEW Physical volume --- PV Name /dev/vdb3 VG Name PV Size 2.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID Dk932c-o5oW-BGz8-3z05-rYTn-i4mu-XEwv1F 3.创建VG [[email protected] /]# vgcreate test /dev/vdb{1,2} Volume group "test" successfully created 4.查看vg信息 [[email protected] /]# vgs VG #PV #LV #SN Attr VSize VFree test 2 0 0 wz--n- 5.99g 5.99g 详细查看vg信息 [[email protected] /]# vgdisplay --- Volume group --- VG Name test 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 5.99 GiB #卷组容量为两个PV容量总 PE Size 4.00 MiB #默认PE大小为4M Total PE 1534 #PE的总数 Alloc PE / Size 0 / 0 #PE分配的情况 Free PE / Size 1534 / 5.99 GiB VG UUID 7KC6at-C49L-2kao-rtHA-6SyU-UHb9-NcZiWF 5.创建LV [[email protected] /]# lvcreate -L 2G -n test1 test Logical volume "test1" created. 6.查看lv信息 [[email protected] /]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert test1 test -wi-a----- 2.00g 详细查看lv信息 [[email protected] /]# lvdisplay --- Logical volume --- LV Path /dev/test/test1 #逻辑卷设备地址 LV Name test1 VG Name test LV UUID QQkAgi-LkCY-eRhg-MNW0-L128-t7gr-e5P3HK LV Write Access read/write LV Creation host, time localhost, 2016-09-06 16:30:38 +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 252:0 7.格式化逻辑卷,并挂载 [[email protected] /]# mkfs.ext4 /dev/test/test1 mke2fs 1.41.12 (17-May-2010) 文件系统标签= 操作系统:Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 正在写入inode表: 完成 Creating journal (16384 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 31 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [[email protected] /]# mount /dev/test/test1 /mnt [[email protected] /]# cp /etc/redhat-release /mnt [[email protected] /]# cat /mnt/redhat-release CentOS release 6.5 (Final) 尝试向逻辑卷挂载点拷贝一些数据,完全正常,至此逻辑卷创建成功。
四、在线扩展LV
命令工具:lvextend 格式: -l|–extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] 此选项可以指定逻辑卷新的LE数量,或增加的数量,也可指定百分比形式扩展 -L|–size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]} 此选项指定大小来扩展 lvextend -l +100%FREE /dev/test/test1 #将jat卷组的所有剩余PE分配给pap1 lvextend -L 5G /dev/test/test1 #将pap1扩展至5G大小 lvextend -L +1G /dev/test/test1 #增加1G的容量 扩展前,vgdisplay 查看卷组使用情况,原始test1容量 开始扩展test1 [[email protected] /]# lvextend -L +2G /dev/test/test1 Size of logical volume test/test1 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents). Logical volume test1 successfully resized. 再对文件系统调整大小 [[email protected] /]# fsadm resize /dev/test/test1 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/test-test1 is mounted on /mnt; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/mapper/test-test1 to 1048576 (4k) blocks. The filesystem on /dev/mapper/test-test1 is now 1048576 blocks long. 查看扩展后的容量 [[email protected] /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda2 48G 28G 18G 62% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/mapper/test-test1 4.0G 68M 3.7G 2% /mnt [[email protected] /]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert test1 test -wi-ao---- 4.00g
五、缩减LV
缩减操作较为危险,谨慎操作。缩减LV之前确保已对文件系统重新调整大小。 1、卸载逻辑卷 [[email protected] /]# umount /mnt/ 2、强制检测文件系统 [[email protected] /]# e2fsck -f /dev/test/test1 e2fsck 1.41.12 (17-May-2010) 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass 4: Checking reference counts 第5步: 检查簇概要信息 /dev/test/test1: 12/262144 files (0.0% non-contiguous), 33871/1048576 blocks 3、resize文件系统 [[email protected] /]# fsadm resize /dev/test/test1 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/test-test1 to 786432 (4k) blocks. The filesystem on /dev/mapper/test-test1 is now 786432 blocks long. 4、缩减LV [[email protected] ~]# lvchange -an /dev/test/test1 #停止test1逻辑卷 [[email protected] ~]# lvreduce -L 3G /dev/test/test1 #缩减至3G Size of logical volume test/test1 changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents). Logical volume test1 successfully resized. 5、激活,挂载 [[email protected] ~]# lvchange -ay /dev/test/test1 #激活test1逻辑卷 [[email protected] ~]# mount /dev/test/test1 /mnt #挂载 6、查看 [[email protected] /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda2 48G 28G 18G 62% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/mapper/test-test1 3.0G 68M 2.8G 3% /mnt [[email protected] /]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert test1 test -wi-ao---- 3.00g [[email protected] /]# cat /mnt/redhat-release CentOS release 6.5 (Final)
六、移除PV
[[email protected] ~]# pvmove /dev/vdb1 #转移pv上的pe到其他pv上,注意其余pv上的剩余pe要能够够容纳现有的pe /dev/vdb1: Moved: 0.1% /dev/vdb1: Moved: 88.9% /dev/vdb1: Moved: 99.9% /dev/vdb1: Moved: 100.0% [[email protected] ~]# vgreduce test /dev/vdb1 #踢出卷组 Removed "/dev/vdb1" from volume group "test " [[email protected] ~]# pvremove /dev/vdb1 #踢出pv Labels on physical volume "/dev/vdb1" successfully wiped
七、LVM快照功能
快照是一种特殊的逻辑卷,是复制原始卷的元数据而建立的逻辑卷,因此它创建速度很快,而且与原始卷在同一卷组。LVM 快照利用一种称为“写时复制(COW – Copy-On-Write)”的技术来跟踪和维持其数据的一致性。当原始卷的数据块(指原始卷所包含的所有数据块,即是空白数据块)第一次写入新数据时,会将旧数据块内容拷贝至快照空间中,也就是说如果只是删掉原始卷某一文件,但是其占用的数据块内容没有改变,删除文件只是不再占有这些数据块,COW认为数据块内容没发生改变,所以不会占用快照空间;还有如果数据块已经重写过一次数据,COW不会再跟踪。 分配给快照的空间,要依据写入的数据量多大和写入的频率,不一定要指派原始卷一样大的空间。快照空间可以扩展或缩减。 利用快照可以记录一个正在使用中的逻辑卷,然后制作一份拍照时刻的备份,由于这个备份是具有一致性的,因此非常的适合于用来备份实时系统。例如,您的运行中的数据库可能即使在备份时刻也是不允许暂停服务的,那么就可以考虑使用LVM的快照模式,然后再针对此快照来进行文件系统级别或者块设备级别的数据备份。 创建快照 为test1创建一个快照,大小为128M [[email protected] ~]# lvcreate -s /dev/test/test1 -n snap_test1 -L 128M Logical volume "snap_test1" created. 查看LV信息,已经有快照相关信息生成 [[email protected] /]# lvdisplay --- Logical volume --- LV Path /dev/test/test1 LV Name test1 VG Name test LV UUID QQkAgi-LkCY-eRhg-MNW0-L128-t7gr-e5P3HK LV Write Access read/write LV Creation host, time localhost, 2016-09-06 16:30:38 +0800 LV snapshot status source of snap_test1 [active] LV Status available # open 1 LV Size 3.00 GiB Current LE 768 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 --- Logical volume --- LV Path /dev/test/snap_test1 LV Name snap_test1 VG Name test LV UUID 63oKDT-Mii7-6jTF-KBt7-Pj6k-IavE-y1G3zq LV Write Access read/write LV Creation host, time localhost, 2016-09-06 16:42:22 +0800 LV snapshot status active destination for test1 LV Status available # open 0 LV Size 3.00 GiB Current LE 768 COW-table size 128.00 MiB COW-table LE 32 Allocated to snapshot 0.01% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3 快照逻辑卷创建时带有文件系统,可以直接挂载,建议只读挂载 [[email protected] /]# mount -r /dev/test/snap_test1 /media/ 删除原卷上的文件,对比快照卷 [[email protected] /]# rm -f /mnt/redhat-release [[email protected] /]# cat /media/ lost+found/ redhat-release [[email protected] /]# cat /media/redhat-release CentOS release 6.5 (Final)
以上是关于lvm介绍与使用的主要内容,如果未能解决你的问题,请参考以下文章