LVM是逻辑盘卷管理(Logical Volume Manager)的简称,他是磁盘管理的一种工具,就目前基本上全部操做系统均支持,LVM是创建在硬盘和分区之上的一个逻辑层,来提升磁盘分区管理的灵活性。经过LVM系统管理员能够轻松管理磁盘分区,如:将若干个磁盘分区链接为一个整块的卷组(volume group),造成一个存储池。管理员能够在卷组上随意建立逻辑卷组(logical volumes),并进一步在逻辑卷组上建立文件系统。管理员经过LVM能够方便的调整存储卷组的大小,而且能够对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“DBdata”和“DBSoft”,而不是使用物理磁盘名“sda”和“sdb”或”hda”和”hdb”。并且当系统添加了新的磁盘,经过LVM管理员就没必要将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘便可,架构能够参考以下图:node
一、基本概念介绍sql
物理存储介质(The physical media)bash
这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。架构
物理卷(PV physical volume)app
物理卷就是指硬盘分区或从逻辑上与磁盘分区具备一样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。ide
卷组(VG Volume Group)工具
LVM卷组相似于非LVM系统中的物理硬盘,其由物理卷组成。能够在卷组上建立一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。ui
逻辑卷(LV logical volume)spa
LVM的逻辑卷相似于非LVM系统中的硬盘分区,在逻辑卷之上能够创建文件系统(好比/home或者/usr等)。操作系统
PE(physical extent)
每个物理卷被划分为称为PE(Physical Extents)的基本单元,具备惟一编号的PE是能够被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,而且一一对应。
首先能够看到,物理卷(PV)被由大小等同的基本单元PE组成。
一个卷组由一个或多个物理卷组成:
从上图能够看到,PE和LE有着一一对应的关系。逻辑卷创建在卷组上。逻辑卷就至关于非LVM系统的磁盘分区,能够在其上建立文件系统。
下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中同样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括如下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操做时,就会根据VGDA创建的映射机制来访问实际的物理位置。
二、LVM建立和管理
1)虚拟机添加两块磁盘,并识别为sdb和sdc
2)建立PV,使用sdb和sdc
[root@localhost ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created [root@localhost ~]# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg00 lvm2 a-- 7.80g 0 /dev/sdb vgzx lvm2 a-- 8.00g 8.00g /dev/sdc vgzx lvm2 a-- 8.00g 8.00g
3)建立VG,使用刚建立的两个PV
[root@localhost ~]# vgcreate vgzx /dev/sdb /dev/sdc Volume group "vgzx" successfully created [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree vg00 1 2 0 wz--n- 7.80g 0 vgzx 2 0 0 wz--n- 15.99g 15.99g
4)建立LV,在刚建立的VG上建立两个LV
[root@localhost ~]# lvcreate -L 2G -n lvzx01 vgzx Logical volume "lvzx01" created. [root@localhost ~]# lvcreate -L 2G -n lvzx02 vgzx Logical volume "lvzx02" created. [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data vg00 -wi-ao---- 5.85g swap vg00 -wi-ao---- 1.95g lvzx01 vgzx -wi-a----- 2.00g lvzx02 vgzx -wi-a----- 2.00g
5)使用刚建立的LV建立文件系统并挂载到操做系统
[root@localhost ~]# mkfs.ext4 /dev/vgzx/lvzx01 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user First data block=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 Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 35 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@localhost ~]# mkfs.ext4 /dev/vgzx/lvzx02 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user First data block=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 Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@localhost ~]# mkdir /orasoft [root@localhost ~]# mkdir /oradata [root@localhost ~]# mount /dev/mapper/vgzx-lvzx01 mount: can't find /dev/mapper/vgzx-lvzx01 in /etc/fstab or /etc/mtab [root@localhost ~]# mount /dev/mapper/vgzx-lvzx01 /oradata/ [root@localhost ~]# mount /dev/mapper/vgzx-lvzx02 /orasoft/ [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg00-data 5.7G 1.9G 3.6G 34% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 190M 36M 145M 20% /boot /dev/mapper/vgzx-lvzx01 2.0G 3.0M 1.9G 1% /oradata /dev/mapper/vgzx-lvzx02 2.0G 3.0M 1.9G 1% /orasoft
若是想挂载随机启动须要修改/etc/fastab文件。
6)扩展LV
[root@localhost ~]# lvextend -L +2G /dev/mapper/vgzx-lvzx01 Size of logical volume vgzx/lvzx01 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents). Logical volume lvzx01 successfully resized [root@localhost ~]# lvextend -L +3G /dev/mapper/vgzx-lvzx02 Size of logical volume vgzx/lvzx02 changed from 2.00 GiB (512 extents) to 5.00 GiB (1280 extents). Logical volume lvzx02 successfully resized [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data vg00 -wi-ao---- 5.85g swap vg00 -wi-ao---- 1.95g lvzx01 vgzx -wi-ao---- 4.00g lvzx02 vgzx -wi-ao---- 5.00g [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg00-data 5.7G 1.9G 3.6G 34% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 190M 36M 145M 20% /boot /dev/mapper/vgzx-lvzx01 2.0G 3.0M 1.9G 1% /oradata /dev/mapper/vgzx-lvzx02 2.0G 3.0M 1.9G 1% /orasoft
7)扩展文件系统resize2fs
从上面能够看出,LV分别作了扩展,但在操做系统上尚未显示为扩展
[root@localhost ~]# resize2fs /dev/mapper/vgzx-lvzx01 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vgzx-lvzx01 is mounted on /oradata; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/mapper/vgzx-lvzx01 to 1048576 (4k) blocks. The filesystem on /dev/mapper/vgzx-lvzx01 is now 1048576 blocks long. [root@localhost ~]# resize2fs /dev/mapper/vgzx-lvzx02 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vgzx-lvzx02 is mounted on /orasoft; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/mapper/vgzx-lvzx02 to 1310720 (4k) blocks. The filesystem on /dev/mapper/vgzx-lvzx02 is now 1310720 blocks long. [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg00-data 5.7G 1.9G 3.6G 34% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 190M 36M 145M 20% /boot /dev/mapper/vgzx-lvzx01 3.9G 4.0M 3.7G 1% /oradata /dev/mapper/vgzx-lvzx02 4.9G 4.0M 4.7G 1% /orasoft
若是是文件系统是xfs格式的,须要使用xfs_growfs命令执行扩展文件系统。