一、简介
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
基本的逻辑卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
关系图如下:
PE(Physical Extent)- 物理块
LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!
二、系统环境及磁盘准备
LVM版本:lvm2-2.02.130-5.el7.x86_64
设备类型:分区、物理磁盘
磁盘准备:新增一块磁盘做实验
三、安装LVM管理工具
1、检查系统中是否安装了LVM管理工具
[root@bash ~]# rpm -qa |grep lvm mesa-private-llvm-3.6.2-2.el7.x86_64 lvm2-2.02.130-5.el7.x86_64 lvm2-libs-2.02.130-5.el7.x86_64
2、如果未安装,则使用yum方式安装
# yum -y install lvm* [root@localhost ~]# rpm -qa lvm2 lvm2-2.02.130-5.el7.x86_64
四、新建一个分区
1、使用/dev/sdb模拟分区
# fdisk /dev/sdb
文件系统类型为:8e (Linux LVM)
[root@bash ~]# fdisk -l /dev/sdb Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x141c2b15 Device Boot Start End Blocks Id System /dev/sdb1 2048 10487807 5242880 8e Linux LVM /dev/sdb2 10487808 20973567 5242880 8e Linux LVM /dev/sdb3 20973568 31459327 5242880 8e Linux LVM /dev/sdb4 31459328 41943039 5241856 8e Linux LVM
五、创建PV
命令介绍:
#pvs 查看pv状态 # pvcreate 将物理分区新建成为PV # pvscan 查询目前系统里面任何具有PV的磁盘 # pvdisplay 显示出目前系统上面的PV状态 # pvremove 将PV属性移除,让该分区不具有PV属性
1、将/dev/sdb1 - /dev/sdb4新建成为PV格式
[root@bash test]# pvcreate /dev/sdb{1..4} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created Physical volume "/dev/sdb4" successfully created
2、查询目前系统里面任何具有PV的磁盘
[root@bash test]# pvscan PV /dev/sdb3 lvm2 [5.00 GiB] PV /dev/sdb2 lvm2 [5.00 GiB] PV /dev/sdb1 lvm2 [5.00 GiB] PV /dev/sdb4 lvm2 [5.00 GiB] Total: 4 [20.00 GiB] / in use: 0 [0 ] / in no VG: 4 [20.00 GiB]
六、创建VG
命令介绍:
# vgcreate 新建VG vgcreate [-s N[mgt]] VG名称 设备名称 -s 接PE的大小 # vgscan 查询目前系统里面是否有VG的磁盘 #vgs查看vg状态 # vgdisplay 显示出目前系统上面的VG状态 # vgextend 在VG内增加额外的PV # vgreduce 在VG内删除PV # vgchange 设置VG是否启动(active) # vgremove 删除一个VG
PV的名称是分区的设备文件名字,VG名称可以自定义的,我将VG的名称定义为myvg
1、将/dev/sdb1-/dev/sdb3
新建为一个VG,且指定PE为15MB
[root@bash test]# vgcreate -s 15M "myvg" /dev/sdb{1..3} Volume group "myvg" successfully created
2、查看系统上的VG状态
[root@bash test]# pvscan PV /dev/sdb1 VG myvg lvm2 [5.00 GiB / 5.00 GiB free] PV /dev/sdb2 VG myvg lvm2 [5.00 GiB / 5.00 GiB free] PV /dev/sdb3 VG myvg lvm2 [5.00 GiB / 5.00 GiB free] PV /dev/sdb4 lvm2 [5.00 GiB] Total: 4 [19.98 GiB] / in use: 3 [14.99 GiB] / in no VG: 1 [5.00 GiB]
3.显示出目前系统上面的VG状态
[root@bash test]# vgdisplay --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 3 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 3 Act PV 3 VG Size 14.99 GiB PE Size 15.00 MiB Total PE 1023 Alloc PE / Size 0 / 0 Free PE / Size 1023 / 14.99 GiB VG UUID CT1KmC-upAS-0r1t-5KQV-MR7z-2jfj-ufOc8Q
4、新增PV给myvg
[root@bash test]# vgextend "myvg" /dev/sdb4 Volume group "myvg" successfully extended
5、显示出目前系统上面的VG状态
[root@bash test]# vgdisplay --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 19.98 GiB PE Size 15.00 MiB Total PE 1364 Alloc PE / Size 0 / 0 Free PE / Size 1364 / 19.98 GiB VG UUID CT1KmC-upAS-0r1t-5KQV-MR7z-2jfj-ufOc8Q