一、LVM概念 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。 LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。 LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。 二、LVM术语 PV(Physical Volume)- 物理卷 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。 VG(Volumne Group)-卷组 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。 LV(Logical Volume)- 逻辑卷 逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组 PE(Physical Extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。 LE(Logical Extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。 如下图所示PV、VG、LV三者关系: 三、常用命令 PV:Physical(物理卷) pvcreate、pvs 、pvdisplay 、pvremove、pvmove、pvscan VG:Volume Group(卷组) vgcreate、vgs、vgdisplay、vgremove、vgrename、vgreduce、vgextent、vgscan LV:logical Volume(逻辑卷) lvcreate、lvs、lvdisplay、lvremove、lvextend、lvresize、lvscan、lvrename 四、环境准备 1、虚拟机新增两块磁盘 ESXI线添加虚拟磁盘,fdisk -l没发现,一般情况下重启服务器就可以。但是不能影响业务,为什么新增磁盘或磁盘扩容后,Linux系统识别不到呢?因为连接存储设备的SCSI总线需要重新扫描,才能识别到这些新的存储设备 复制代码 [root@Node1 ~]# ls /sys/class/scsi_host/ //确定主机总线SCSI总线号 host0 host1 host2 [root@Node1 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan //重新扫描 SCSI总线添加磁盘 [root@Node1 ~]# echo "- - -" > /sys/class/scsi_host/host1/scan [root@Node1 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan [root@Node1 ~]# fdisk -l | grep "^Disk /dev" //检查硬盘是否在线 Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Disk /dev/sdc: 32.2 GB, 32212254720 bytes, 62914560 sectors [root@Node1 ~]# 复制代码 2、用fidsk分别对/dev/sdb与/dev/sdc进行分区 复制代码 [root@Node1 ~]# fdisk /dev/sdb //对/dev/sdb进行分区 Welcome to fdisk (util-linux 2.23.2) Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0xafcc8a41. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p //主分区 Partition number (1-4, default 1): 1 First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G Partition 1 of type Linux and of size 10 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (20973568-41943039, default 20973568): Using default value 20973568 Last sector, +sectors or +size{K,M,G} (20973568-41943039, default 41943039): Using default value 41943039 Partition 2 of type Linux and of size 10 GiB is set Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 复制代码 3、partprobe让内核重新识别分区表 复制代码 [root@Node1 ~]#partprobe /dev/sd{b,c} [root@Node1 ~]# partx -a /dev/sdc [root@Node1 ~]# partx -s /dev/sdc [root@Node1 ~]# cat /proc/partitions //查看分区信息表 major minor #blocks name 8 0 52428800 sda 8 1 204800 sda1 8 2 20971520 sda2 8 3 20971520 sda3 8 4 0 sda4 8 5 5242880 sda5 8 6 2097152 sda6 8 7 2936832 sda7 8 16 20971520 sdb 8 17 10485760 sdb1 8 18 10484736 sdb2 8 32 31457280 sdc 8 33 1 sdc1 8 37 20971520 sdc5 8 38 10482688 sdc6 11 0 4415488 sr0 [root@Node1 ~]# ls /dev/sdb* //查看/dev/sdb分区情况 /dev/sdb /dev/sdb1 /dev/sdb2 [root@Node1 ~]# ls /dev/sdc* //查看/dev/sdc分区情况 /dev/sdc /dev/sdc1 /dev/sdc5 /dev/sdc6 复制代码 4、验证磁盘分区结果 复制代码 [root@Node1 ~]# fdisk -l | grep "LVM$" /dev/sdb1 2048 20973567 10485760 8e Linux LVM /dev/sdb2 20973568 41943039 10484736 8e Linux LVM /dev/sdc5 4096 41947135 20971520 8e Linux LVM /dev/sdc6 41949184 62914559 10482688 8e Linux LVM 复制代码 四、LVM常用操作命令 1、安装LVM 复制代码 [root@Node1 ~]# cat /etc/system-release //查看系统版本 CentOS Linux release 7.6.1810 (Core) [root@Node1 ~]# yum -y install lvm2 //安装LVM包 [root@Node1 ~]# rpm -qa | grep lvm llvm-private-6.0.1-2.el7.x86_64 lvm2-2.02.180-10.el7_6.8.x86_64 lvm2-libs-2.02.180-10.el7_6.8.x86_64 复制代码 2、PV物理卷常用操作 pvcreate /dev/DEVICE: 创建PV pvs:简要PV信息显示 pvdisplay:显示PV的详细信息 pvremove /dev/DEVICE: 移除PV pvscan: 扫描系统中连接的所有硬盘,列出找到的物理卷列表 复制代码 [root@Node1 ~]# pvcreate /dev/sdb{1,2} //创建2个物理卷pv Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdb2" successfully created. [root@Node1 ~]# pvs //查看物理卷摘要信息 PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 10.00g 10.00g /dev/sdb2 lvm2 --- <10.00g <10.00g [root@Node1 ~]# pvscan //搜索已存在的物理卷 PV /dev/sdb2 lvm2 [<10.00 GiB] PV /dev/sdb1 lvm2 [10.00 GiB] Total: 2 [<20.00 GiB] / in use: 0 [0 ] / in no VG: 2 [<20.00 GiB] [root@Node1 ~]# pvremove /dev/sdb2 //移除/dev/sdb2 Labels on physical volume "/dev/sdb2" successfully wiped. [root@Node1 ~]# pvdisplay /dev/sdb1 //显示详细的物理卷信息 "/dev/sdb1" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 10.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID k6YMJN-BfTI-DL8G-qjEr-onjT-CmDK-IzC9vB [root@Node1 ~]# pvcreate /dev/sdb2 // 将/dev/sdb2加入物理卷 Physical volume "/dev/sdb2" successfully created. [root@Node1 ~]# pvs -o +pv_uuid PV VG Fmt Attr PSize PFree PV UUID /dev/sdb1 datavg lvm2 a-- <10.00g <10.00g GX3Clm-pGDv-4xtw-VIr3-x00m-vIlD-zPOooJ /dev/sdb2 datavg lvm2 a-- <10.00g <10.00g zuMtAt-6S6z-3vDa-xnj2-WADw-hk0s-H9V1Wi /dev/sdc5 datavg lvm2 a-- <10.00g <10.00g orxgvl-GKbn-LMN0-YOUY-mIGA-TqJp-g1V8iv [root@Node1 ~]# pvs -v 复制代码 3、VG常用操作 vgcreate /dev/DEVICE: 创建VG卷组 vgs: 简要VG信息显示 vgextend:动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量 vgreduce:通过删除LVM卷组中的物理卷来减少卷组容量,不能删除LVM卷组中剩余的最后一个物理卷 vgdisplay:显示VG的详细信息 vgscan:查找系统中存在的LVM卷组,并显示找到的卷组列表 vgremove:删除卷组,其上的逻辑卷必须处于离线状态 复制代码 [root@Node1 ~]# vgcreate datavg /dev/sdb{1,2} //创建datavg卷组 Volume group "datavg" successfully created [root@Node1 ~]# vgdisplay datavg //显示datavg详细信息,也可以使用vgdisplay -vv或vgdisplay -vvv命令 --- Volume group --- VG Name datavg 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 19.99 GiB PE Size 4.00 MiB Total PE 5118 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 19.99 GiB VG UUID thDWMH-ZXq6-zJP5-LtTn-xmQh-OpG5-b3qrUu [root@Node1 ~]# vgs //显示VG的简要信息 VG #PV #LV #SN Attr VSize VFree datavg 2 0 0 wz--n- 19.99g 19.99g [root@Node1 ~]# vgextend datavg /dev/sdc5 //向datavg卷组中添加物理卷 Physical volume "/dev/sdc5" successfully created. Volume group "datavg" successfully extended [root@Node1 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 datavg lvm2 a-- <10.00g <10.00g /dev/sdb2 datavg lvm2 a-- <10.00g <10.00g /dev/sdc5 datavg lvm2 a-- <10.00g <10.00g [root@Node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree datavg 3 0 0 wz--n- <29.99g <29.99g [root@Node1 ~]# vgreduce datavg /dev/sdc5 //从datavg卷组中移除物理卷 Removed "/dev/sdc5" from volume group "datavg" [root@Node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree datavg 2 0 0 wz--n- 19.99g 19.99g [root@Node1 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 datavg lvm2 a-- <10.00g <10.00g /dev/sdb2 datavg lvm2 a-- <10.00g <10.00g /dev/sdc5 lvm2 --- 20.00g 20.00g [root@Node1 ~]# vgremove datavg //移除datavg Volume group "datavg" successfully removed. [root@Node1 ~]# vgs [root@Node1 ~]# vgcreate datavg /dev/sdb{1,2} Volume group "datavg" successfully created [root@Node1 ~]# vgdisplay datavg --- Volume group --- VG Name datavg 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 19.99 GiB PE Size 4.00 MiB Total PE 5118 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 19.99 GiB VG UUID T8c1W9-xpJF-vvnS-bm5y-gqmY-5RBK-wRkD9Y [root@Node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree datavg 2 0 0 wz--n- 19.99g 19.99g [root@Node1 ~]# vgextend datavg /dev/sdc5 Volume group "datavg" successfully extended [root@Node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree datavg 3 0 0 wz--n- <29.99g <29.99g [root@Node1 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 datavg lvm2 a-- <10.00g <10.00g /dev/sdb2 datavg lvm2 a-- <10.00g <10.00g /dev/sdc5 datavg lvm2 a-- <10.00g <10.00g [root@Node1 ~]# pvscan //扫描系统中连接的所有硬盘,列出找到的物理卷列表 PV /dev/sdb1 VG datavg lvm2 [<10.00 GiB / <10.00 GiB free] PV /dev/sdb2 VG datavg lvm2 [<10.00 GiB / <10.00 GiB free] PV /dev/sdc5 VG datavg lvm2 [<10.00 GiB / <10.00 GiB free] Total: 3 [<29.99 GiB] / in use: 3 [<29.99 GiB] / in no VG: 0 [0 ] [root@Node1 ~]# vgscan //显示系统中所有卷组 Reading volume groups from cache. Found volume group "datavg" using metadata type lvm2 [root@Node1 ~]# vgs -o +pv_name VG #PV #LV #SN Attr VSize VFree PV datavg 3 0 0 wz--n- <29.99g <29.99g /dev/sdb1 datavg 3 0 0 wz--n- <29.99g <29.99g /dev/sdb2 datavg 3 0 0 wz--n- <29.99g <29.99g /dev/sdc5 [root@Node1 ~]# vgs -v VG Attr Ext #PV #LV #SN VSize VFree VG UUID VProfile datavg wz--n- 4.00m 3 0 0 <29.99g <29.99g 2b9qgs-mCb0-Isc2-Af74-5uWo-Yf8Q-4KOmns 复制代码 4、LV常用操作 lvcreate : 用来创建LVM的逻辑卷 lvcreate -L #[mMgGtT] -n NAME VolumeGroup 用法:lvcreate [选项] [参数]   选项:    -L:指定大小    -l:指定大小(LE数)    -n:指定名称    -s:创建快照    -p r:设置为只读(该选项一般用于创建快照中 lvs : 显示逻辑卷信息 lvscan:扫描当前系统中的所有逻辑卷,及其对应的设备文件 lvdisplay:显示逻辑卷属性 lvextend:可在线扩展逻辑卷空间 lvreduce:缩减逻辑卷空间,一般离线使用 lvremove:删除逻辑卷,需要处于离线(卸载)状态 复制代码 [root@Node1 ~]# lvcreate -L 5G -n datalv datavg //创建datalv逻辑卷 Logical volume "datalv" created. [root@Node1 ~]# ls /dev/mapper/ control datavg-datalv [root@Node1 ~]# mkfs.xfs -L Backup /dev/datavg/datalv //格式化逻辑卷 meta-data=/dev/datavg/datalv isize=512 agcount=4, agsize=327680 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=1310720, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@Node1 ~]# mkdir /dbbackup [root@Node1 ~]# mount /dev/mapper/datavg-datalv /dbbackup/ //挂载至/dbbackup目录 [root@Node1 ~]# df -hT | grep datalv //查询datalv的挂载情况 /dev/mapper/datavg-datalv xfs 5G 33M 5G 1% /dbbackup [root@Node1 ~]# lvs //显示逻辑卷信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert datalv datavg -wi-ao---- 5.00g [root@Node1 ~]# lvscan //扫描系统中的逻辑卷 ACTIVE '/dev/datavg/datalv' [5.00 GiB] inherit [root@Node1 ~]# lvdisplay //显示逻辑卷详细信息 --- Logical volume --- LV Path /dev/datavg/datalv LV Name datalv VG Name datavg LV UUID Y1P5zJ-Wy1Q-kERv-VUtC-4vAm-NsMb-3aCy1y LV Write Access read/write LV Creation host, time Node1.contoso.com, 2019-09-18 06:31:59 +0800 LV Status available # open 1 LV Size 5.00 GiB Current LE 3840 Segments 2 Allocatio