PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
卷组描述区域:卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。

=====================================================

步骤:

1.准备物理分区(Physical Partions) 
首先,我们需要选择用于 LVM 的物理存储器。这些通常是标准分区,但也可以是已创建的 Linux Software RAID 卷。这里我利用fdisk命令,将sdb、sdc两块磁盘分了两个区sdb1、sdc1, 通过fdisk的t指令指定分区为8e类型(Linux LVM) 。如图1所示。 
图1 准备物理分区的指令执行界面

2.创建物理卷PV(Physical Volumes)

物理卷(Physical Volumes)简称PV,是在磁盘的物理分区或与磁盘分区具有同样功能的设备(如RAID)上创建而来。它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。 
创建物理卷的命令是 pvcreate : 
[root@li2 ~]# pvcreate /dev/sdb1 
Physical volume "/dev/sdb1" successfully created 
[root@li2 ~]# pvcreate /dev/sdc1 
Physical volume "/dev/sdc1" successfully created 
以上命令分别将/dev/sdc1、/dev/sdd1初始化成物理卷,使用物理卷显示命令pvdisplay查看物理卷情况如下: 
[root@li2 ~]# pvdisplay 
--- NEW Physical volume --- 
PV Name /dev/sdb1 
VG Name 
PV Size 36.00 GB 
Allocatable NO 
PE Size (KByte) 0 
Total PE 0 
Free PE 0 
Allocated PE 0 
PV UUID QDmnUd-tuvH-U4Hn-n5Ry-zGRT-O1yK-67Dxbb 
--- NEW Physical volume --- 
PV Name /dev/sdc1 
VG Name 
PV Size 36.00 GB 
Allocatable NO 
PE Size (KByte) 0 
Total PE 0 
Free PE 0 
Allocated PE 0 
PV UUID NDBf68-6qrD-9hE6-Rotv-RdxL-Azvv-7NlC0S

3.创建卷组VG(Volume Groups) 
卷组(Volume Group)简称VG,它是一个或者多个物理卷的组合。卷组将多个物理卷组合在一起,形成一个可管理的单元,它类似于非LVM系统中的物理硬盘。 
创建卷组的命令为vgcreate,下面利用它创建了一个名为“lvmdisk”的卷组,该卷组包含/dev/sdb1、/dev/sdc1两个物理卷。 
[root@li2 ~]# vgcreate lvmdisk /dev/sdb1 /dev/sdc1 
Volume group "lvmdisk" successfully created 
使用卷组查看命令vgdisplay显示卷组情况: 
[root@li2 ~]# vgdisplay 
--- Volume group --- 
VG Name lvmdisk 
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 71.98 GB 
PE Size 4.00 MB 
Total PE 18428 
Alloc PE / Size 0 / 0 
Free PE / Size 18428 / 71.98 GB 
VG UUID SARfuj-wAUI-od81-VWAc-A1nt-aaFN-JWaPVf 
当多个物理卷组合成一个卷组后时,LVM会在所有的物理卷上做类似格式化的工作,将每个物理卷切成一块一块的空间,这一块一块的空间就称为PE(Physical Extent ),它的默认大小是4MB。 
由于受内核限制的原因,一个逻辑卷(Logic Volume)最多只能包含65536个PE(Physical Extent),所以一个PE的大小就决定了逻辑卷的最大容量,4 MB 的PE决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷,则创建卷组时需要指定更大的PE。在Red Hat Enterprise Linux AS 4中PE大小范围为8 KB 到 16GB,并且必须总是 2 的倍数。 
例如,如果希望使用 64 MB 的PE创建卷组,这样逻辑卷最大容量就可以为4 TB,命令如下: 
# vgcreate - 64MB lvmdisk /dev/sdb1 /dev/sdc1

4.创建逻辑卷LV(Logical Volumes) 
逻辑卷(Logical Volumes)简称LV,是在卷组中划分的一个逻辑区域,类似于非LVM系统中的硬盘分区。 
创建逻辑卷的命令为lvcreate,通过下面的命令,我们在卷组lvmdisk上创建了一个名字为pldy1的逻辑卷,大小为15GB,其设备入口为/dev/lvmdisk/pldy1。 
[root@li2 dev]# lvcreate -L 15G -n pldy1 lvmdisk 
Logical volume "pldy1" created 
也可以使用-l参数,通过指定PE数来设定逻辑分区大小。 
例如,希望创建一个使用全部空间的逻辑卷,需要先查清卷组中的PE总数,通过上面的vgdisplay命令查得当前卷组PE总数为18428,命令如下: 
# lvcreate -l 18428 -n pldy1 lvmdisk 
当逻辑卷创建成功后,可以使用lvdisplay命令查看逻辑卷情况: 
[root@li2 ~]# lvdisplay 
--- Logical volume --- 
LV Name /dev/lvmdisk/pldy1 
VG Name lvmdisk 
LV UUID FQcnm3-BMyq-NkJz-hykw-9xg1-Qy8d-8UeGCN 
LV Write Access read/write 
LV Status available 
# open 0 
LV Size 15.00 GB 
Current LE 3840 
Segments 1 
Allocation inherit 
Read ahead sectors 0 
Block device 253:0 
同卷组一样,逻辑卷在创建的过程中也被分成了一块一块的空间,这些空间称为LE(Logical Extents),在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

5.创建文件系统 
在逻辑卷上创建ext3文件系统: 
[root@li2 ~]# mkfs -t ext3 /dev/lvmdisk/pldy1 
创建了文件系统以后,就可以加载并使用了: 
[root@li2 ~]# mkdir /opt/Oracle 
[root@li2 ~]# mount /dev/lvmdisk/pldy1 /opt/Oracle 
为了在系统启动时自动加载文件系统,则还需要在/etc/fstab中添加内容: 
/dev/lvmdisk/pldy1 /opt/Oracle ext3 defaults 1 2 
管理LVM 
LVM的最大好处就是可以动态地调整分区大小,而无须重新启动机器,下面让我们来体验一下吧!继续上面的实例,现假设逻辑卷/dev/lvmdisk/pldy1空间不足,需要增加其大小,我们分两种情况讨论:

1.卷组中有剩余的空间 
通过vgdisplay命令可以检查当前卷组空间使用情况: 
[root@li2 ~]# vgdisplay 
--- Volume group --- 
VG Name lvmdisk 
System ID 
Format lvm2 
Metadata Areas 2 
Metadata Sequence No 2 
VG Access read/write 
VG Status resizable 
MAX LV 0 
Cur LV 1 
Open LV 0 
Max PV 0 
Cur PV 2 
Act PV 2 
VG Size 71.98 GB 
PE Size 4.00 MB 
Total PE 18428 
Alloc PE / Size 3840 / 15.00 GB 
Free PE / Size 14588 / 56.98 GB 
VG UUID SARfuj-wAUI-od81-VWAc-A1nt-aaFN-JWaPVf 
确定当前卷组剩余空间56.98GB,剩余PE数量为14588个。在这里将所有的剩余空间全部增加给逻辑卷 /dev/lvmdisk/pldy1。 
[root@li2 Oracle]# lvextend -l+14588 /dev/lvmdisk/pldy1 
Extending logical volume pldy1 to 56.98 GB 
Logical volume pldy1 successfully resized 
上面的命令使用了-l+14588参数,它的意思是给指定的逻辑卷增加14588个PE。如果不是将全部空间都使用,还可使用其他形式的lvextend命令。 
例如将逻辑卷/dev/lvmdisk/pldy1增加5GB的空间,使其空间达到20GB,可写成: “# lvextend -L+5G /dev/lvmdisk/pldy1”或“# lvextend -L20G /dev/lvmdisk/pldy1”。增加了逻辑卷容量后,就要通过ext2online命令修改文件系统的大小了。 
[root@li2 ~]# ext2online /opt/Oracle/ 
转换好后,让我们查看一下文件系统的当前状态: 
[root@li2 ~]# df -lh 
Filesystem 1k-blocks Used Available Use% Mounted on 
/dev/sda1 7.4G 1.8G 5.3G 25% / 
none 135M 0 135M 0% /dev/shm 
/dev/mapper/lvmdisk-pldy1 71G 81M 68G 1% /opt/Oracle

2.卷组中空间不足 
当卷组中没有足够的空间用于扩展逻辑卷的大小时,就需要增加卷组的容量,而增加卷组容量的惟一办法就是向卷组中添加新的物理卷。 
首先是增加一块新硬盘(36GB SCSI 硬盘),并对其完成分区、创建物理卷等工作。接下来是利用vgextend命令将新的物理卷(/dev/sdd1)加入到卷组中。 
扩展卷组的命令如下: 
[root@li2 ~]# vgextend lvmdisk /dev/sdd1 
Volume group "lvmdisk" successfully extended 
利用vgdisplay命令查看卷组lvmdisk的情况: 
[root@li2 ~]# vgdisplay 
--- Volume group --- 
VG Name lvmdisk 
System ID 
Format lvm2 
Metadata Areas 3 
Metadata Sequence No 3 
VG Access read/write 
VG Status resizable 
MAX LV 0 
Cur LV 1 
Open LV 0 
Max PV 0 
Cur PV 3 
Act PV 3 
VG Size 107.97 GB 
PE Size 4.00 MB 
Total PE 27640 
Alloc PE / Size 3840 / 15.00 GB 
Free PE / Size 23800 / 92.97 GB 
VG UUID l8YPvz-uD7h-oj1A-0qS5-TFcT-mbC7-QbjzCu 
完成卷组的扩容后,就可以按照第一种情况的方法完成逻辑卷的扩容,最终实现分区的动态调整。

LVM原理及PV、VG、LV、PE、LE关系图的更多相关文章

  1. Centos_Lvm_Create pv vg lv and mount

    re-scan new disks without restarting CentOS re-scan new disks(/dev/sdc): #ls /sys/class/scsi_host/ h ...

  2. 【Linux】pv vg lv, 加盘,扩容磁盘

    PV VG LV关系:一个物理盘(或一个lun)就是一个pv,有几个物理盘就有几个pv.一个或者几个硬盘可以组成一个vg,一个系统可以包括好几个vg,比如rootvg ,datavg等 PV组成VG, ...

  3. LUN/PV/VG/LV

    存储中的几个概念,参考一些网络资料重新画个图梳理下,如下: LUN:lun是针对存储设备(如磁盘阵列)的逻辑概念,物理上可能就是几块硬盘.那么主机的HBA 卡看到的存储上的存储资源就靠主要两个东西定位 ...

  4. centos扩容(pv,vg,lv)

    preFace: (应用场景需求分析)

  5. linux上创建PV/VG/LV

    LVM的整体思路是: 首先创建PV-->然后创建VG并将多个PV加到VG里-->然后创建LV-->格式化分区-->mount分区 1.创建PV pvcreate /dev/sd ...

  6. AIX中PV,VG,LV及FS常用相关命令

    1.PV常用相关命令 1)lsdev:列出ODM(Object Data Manager)中的设备. 2)chdev:修改一个AIX设备的属性. 3)mkdev:创建一个AIX设备. 4)chpv:修 ...

  7. linux vg lv pv

    = pv由物理卷或者分区组成   pv可以组成一个或者多个vg     vg可以分成多个lv 方便扩展 pvs vgs lvs 可以查看当前存在的pv vg lv 我的centos硬盘20g 使用了一 ...

  8. LVM原理及实现过程

    这里引用鸟哥说明 LVM 的重点在於『可以弹性的调整 filesystem 的容量!』而并非在於效能与数据保全上面. 需要文件的读写效能或者是数据的可靠性,请参考前面的 RAID 小节. LVM 可以 ...

  9. LVM原理与实现

    一.什么是LVM 不管是使用传统的MBR分区方式或者是GPT的分区方式,在最后数据量逐渐变大的过程中都会出现空间不足的情况,但是若是使用将此分区的数据全部迁移至一个更大空间的磁盘上的迁移时间也是不可想 ...

随机推荐

  1. Todo List

    Contest 11.13 2016ACM/ICPC亚洲区青岛站(5/13, solved 7/13) Training 11.06 2016年中国大学生程序设计竞赛(合肥)(solved 6/10) ...

  2. Java JDBC使用方法

    public class JDBC{public static void main(String[] args){//查询数据selectData();}//查询数据的方法private static ...

  3. cpp项目的组织

    编译篇 较大型cpp项目的代码组织.编译都是深耦合的. 一般提供一个总体的makefile,进入各个模块,又有自己的makefile,这些makefile又都依赖于一些被include的文件的的定义, ...

  4. Examples of complexity pattern

    O(1):constant - the operation doesn't depend on the size of its input, e.g. adding a node to the tai ...

  5. React组件性能优化

    转自:https://segmentfault.com/a/1190000006100489 React: 一个用于构建用户界面的JAVASCRIPT库. React仅仅专注于UI层:它使用虚拟DOM ...

  6. 16个常用IO流

    在包java.io.*:下 有以下16个常用的io流类: (Stream结尾的是字节流,是万能流,通常的视频,声音,图片等2进制文件, Reader/Writer结尾的是字符流,字符流适合读取纯文本文 ...

  7. python中的input,print

    此用例在python3.3.5中测试通过: 输入:在python中输入是使用input,下面示例代码表示把输入的值存入变量s中,并输入s 在这里提醒一下:使用input获取的值都是string类型

  8. How to create/restore a slave using GTID replication in MySQL 5.6

    MySQL 5.6 is GA! Now we have new things to play with and in my personal opinion the most interesting ...

  9. linux yum命令详解-转

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  10. 兼容性js中setTimeout 传参“保值”方案

    这里所谓“保值”,是指在setTimeout中指定的时间后,执行指定的方法所用到的“参数”值,跟执行setTimeout时该“参数”值一样.是不是有点懵?看如下例子: ================ ...