什么是LVM?
LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。系统管理员可以通过LVM轻松的管理磁盘分区,如:将若干个磁盘分区或物理磁盘连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可能就会带来很大的麻烦,而使用LVM可以很灵活的调整分区的大小并且数据不受影响。
基本术语
PV(物理卷,Physical Volume):指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
VG(卷组,Volume Group):由多个物理卷组成,类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷)
LV(逻辑卷,Logical Volume):类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统
PE(物理块,Physical Extent):每一个物理卷PV被划分成为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成
LE(逻辑块,Logical Extent):逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应
PV、VG、LV三者之间是有一定逻辑关系的,LVM是将一些零碎的磁盘分区(PV)合并成一个较大的磁盘(VG),然后在根据需要对这个较大的磁盘(VG)进行划分成不同的小分区(LV),并且这些小分区(LV)是可以动态的扩展或缩小的。而PE是PV的基本组成单元,LE是LV的基本组成单元。
创建LVM
第1步:首先创建PV,PV的创建可以直接使用新的磁盘,也可以使用分区,如果使用分区的话需要在创建分区时将分区的标识改为8e( Linux LVM)。
创建PV的命令为:pvcreate [-f] DEVICE
查看PV的命令有:pvdisplay、pvs
#直接将一块新的磁盘创建为PV [root@fengl ~]# pvcreate /dev/sdb #使用分区创建PV [root@fengl ~]# fdisk -l /dev/sdc ... 设备 Boot Start End Blocks Id System /dev/sdc1 2048 41943039 20970496 8e Linux LVM [root@fengl ~]# pvcreate /dev/sdc1 #查看创建好的PV [root@fengl ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb lvm2 --- 20.00g 20.00g /dev/sdc1 lvm2 --- 20.00g 20.00g [root@fengl ~]# pvdisplay "/dev/sdd" is a new physical volume of "20.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size 20.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID zi9Sja-zARN-1fRG-qw5f-iPhH-7oeY-BiiZCP ...
第2步:创建VG,创建VG时必须指明卷组的名称和使用哪些pv创建,可以使用-s选项指定PE的大小,PE的默认大小为4M,
具体命令为:vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
查看VG的命令有:vgdisplay、vgs
#创建一个名为vg0,PE大小为8M的VG卷组,并将/dev/sdb和/dev/sdc1加入到卷组中 [root@fengl ~]# vgcreate -s 8M vg0 /dev/sd{b,c1} Volume group "vg0" successfully created #查看创建好的VG [root@fengl ~]# vgs VG #PV #LV #SN Attr VSize VFree vg0 2 0 0 wz--n- 39.98g 39.98g [root@fengl ~]# vgdisplay --- Volume group --- VG Name vg0 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 39.98 GiB PE Size 8.00 MiB Total PE 5118 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 39.98 GiB VG UUID AJzWEi-UKUx-MtEZ-wKkZ-K5eA-f9Tl-QKLhnU
第3步:创建LV,创建LV时必须指明从哪个卷组中创建,可以使用-L选项指定LV的大小,并且可以使用-n选项指定LV的名称
具体命令为:lvcreate-L #[mMgGtT] -n NAME VolumeGroup
查看LV的命令有:lvdisplay、lvs
#创建一个名为lv0,大小为15G的LV [root@fengl ~]# lvcreate -L 15G -n lv0 vg0 Logical volume "lv0" created. #查看创建好的LV [root@fengl ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-a----- 15.00g [root@fengl ~]# lvdisplay --- Logical volume --- LV Path /dev/vg0/lv0 LV Name lv0 VG Name vg0 LV UUID rQMMHT-GV5D-Jquu-sgFD-4M0V-jrpf-Uu9bg8 LV Write Access read/write LV Creation host, time fengl, 2016-08-30 18:59:38 +0800 LV Status available # open 0 LV Size 15.00 GiB Current LE 1920 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
第4步:格式化、挂载
#格式化分区 [root@fengl ~]# mkfs.ext4 /dev/vg0/lv0 #查看分区 [root@fengl ~]# blkid ... /dev/mapper/vg0-lv0: UUID="78248233-6e64-47ae-9392-2abf6a25fbf0" TYPE="ext4" #挂载到/mnt/lvm下,如果想开机自动挂载需要在/etc/fstab配置文件中添加挂载信息 [root@fengl ~]# mount UUID="78248233-6e64-47ae-9392-2abf6a25fbf0" /mnt/lvm
LVM管理
(1)扩容LV:lv的扩容需要两步,第一步先扩容LV大小,这一步可以使用-L选项指定具体扩容到多少,或在原来的基础上添加多大空间,也可以使用-l选项利用百分比的方式扩容,执行完第一步后查看LV确实扩容了,但是挂载的分区大小还是原来大小,如果是ext系列的文件系统可以使用resizefs命令重置大小,命令使用格式如下:
lvextend -L [+]#[bBsSkKmMgGtTpPeE] /dev/VG_NAME/LV_NAME 或
lvextend -l [+]#[%{VG|LV|PVS|FREE|ORIGIN}] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
#将LV从15G扩容到20G [root@fengl ~]# lvextend -L +5G /dev/vg0/lv0 #方法1 [root@fengl ~]# lvextend -L 20G /dev/vg0/lv0 #方法2 #使用百分比的方式扩容,如将VG0剩余的空间全部扩容给LV0 [root@fengl ~]# lvextend -l +100%FREE /dev/vg0/lv0 #重置大小 [root@fengl ~]# resize2fs /dev/vg0/lv0
(2)缩减LV:LV的缩减比扩容稍微麻烦一点,需要先取消挂载,然后使用e2fsck命令强制执行文件系统检测,然后再使用resize2fs命令缩减文件系统大小到多大,注意缩减后的大小不能小于该分区下所有文件总量的大小,最后再使用lvreduce命令缩减逻辑卷大小到多大
lvreduce -L [-]#[bBsSkKmMgGtTpPeE] /dev/VG_NAME/LV_NAME 或
lvreduce -l [-]#[%{VG|LV|FREE|ORIGIN}] /dev/VG_NAME/LV_NAME
#卸载已经挂载的逻辑卷 [root@fengl ~]# umount /dev/vg0/lv0 #强制检测逻辑卷 [root@fengl ~]# e2fsck -f /dev/vg0/lv0 #缩减文件系统大小为30G [root@fengl ~]# resize2fs /dev/vg0/lv0 30G #缩减逻辑卷大小为30G [root@fengl ~]# lvreduce -L 30G /dev/vg0/lv0 #重新挂载 [root@fengl ~]# mount /dev/vg0/lv0 /mnt/lvm/
(3)扩容VG:卷组的扩容需要先增加PV,然后再将新的PV加入到VG中即可
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
#新建一个新的PV [root@fengl ~]# pvcreate /dev/sdd #扩容VG,将新的/dev/add加入到vg0 [root@fengl ~]# vgextend vg0 /dev/sdd
(4)缩减VG:将某个PV从VG中移除,需要注意的是如果要移除的PV已经被使用,需要先使用pvmove将其中的PE移出来
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
#先将/dev/sdd中的PE移动出来 [root@fengl ~]# pvmove /dev/sdd #再缩减VG大小,即将/dev/sdd从vg0中移除 [root@fengl ~]# vgreduce vg0 /dev/sdd
(5)删除lvm
#先卸载已经挂载的逻辑卷 [root@fengl ~]# umount /dev/vg0/lv0 #删除LV [root@fengl ~]# lvremove /dev/vg0/lv0 #删除VG [root@fengl ~]# vgremove /dev/vg0 #删除pv [root@fengl ~]# pvremove /dev/sd{b,ca,d}
本文出自 “linux运维学习之路” 博客,请务必保留此出处http://fengliang.blog.51cto.com/3453935/1844280
原文地址:http://fengliang.blog.51cto.com/3453935/1844280