1,什么叫LVM

    LVM全名Logical Volume Manager(逻辑卷管理),它是Linux环境下一种磁盘分区管理机制,该机制可以弹性的修改分区大小.

wKioL1Wl1M6TlA0sAACdJviir8w150.jpg

物理块(Physical Extent,PE)

        每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

物理卷(Physical Volume,PV)

        指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

卷组(Volume Group,VG)

        类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

逻辑卷(Logical Volume,LV)

        类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

文件系统:

        文件系统大小一般小于等于物理磁盘空间,是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。当我们调整物理盘区大小时,文件系统大小时固定的,此时我们需要扩大文件系统管理的空间,以达到拓展分区的作用,或者缩小文件系统管理的空间,以便磁盘空间被合理利用

    构建LV逻辑卷时,需要依次创建PV,VG,LV,(PE在构建VG时可以使用-s指定大小,默认在创建LV时自动分配),拓展LVM逻辑卷时首先需要确认LV是否已经达到VG上限,若果没有达到,可以直接调整LV大小,完成后使用resize2fs调整文建立在LV卷上的文件系统大小.


2.创建LVM操作步骤

    2.1

        创建物理卷PV:

        创建物理卷时常用的命令:pvcreate,pvdisplay,pvscan,pvmove,pvremove

pvcreate创建PV,格式:pvcreate /PATH/disk|partition
pvdisplay查看系统上PV卷信息,可单独使用,也可以指定查看PV卷,格式:pvdisplay /PATH/PV
pvscan/pvs查看系统上PV卷信息,所属卷组,已使用空间等,可单独使用,可以指定查看
pvmove移动PV数据,格式:pvmove /PATH/PV或指定位置pvmove /PATH/PV /PATH/PV
pvremove移除PV卷,格式:pvremove /PATH/PV

[root@localhost mysh]# pvcreate /dev/sdc{1,2,3,5}   基于分区创建PV卷
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
  Physical volume "/dev/sdc3" successfully created
  Physical volume "/dev/sdc5" successfully created

[root@localhost mysh]# pvdisplay /dev/sdc1  查看sdc1的pv信息
  "/dev/sdc1" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               NExGGE-7Sjh-xc42-jRZ8-YpOc-7m50-7ReIL7

[root@localhost mysh]# pvs        浏览系统上的pv卷
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  centos lvm2 a--  19.51g    0 
  /dev/sdb1  myvg   lvm2 a--   3.00g 3.00g
  /dev/sdb2  myvg   lvm2 a--   3.00g 3.00g
  /dev/sdb3  myvg   lvm2 a--   3.00g 3.00g
  /dev/sdc1         lvm2 a--   1.00g 1.00g
  /dev/sdc2         lvm2 a--   1.00g 1.00g
  /dev/sdc3         lvm2 a--   1.00g 1.00g
  /dev/sdc5         lvm2 a--   1.00g 1.00g

[root@localhost mysh]# pvremove /dev/sdc5     移除基于sdc5的pv卷
  Labels on physical volume "/dev/sdc5" successfully wiped


    2.2创建卷组VG

        创建卷组常用到的命令:vgcreat,vgremove,vgextend,vgreduce,vgs,vgdisplay,vgscan

vgcreate创建VG,格式:vgcreate VG_NAME /PATH/PV (指定的PV卷可以为多个)
            -s 指定PE大小,默认为4M
vgremove移除VG,格式:vgremove  VG_NAME
vgextend拓展VG:vgextend VG_NAME /PATH/PV
vgreduce缩小PV:vgreduce VG_NAME /PATH/PV

vgs

vgdisplay

vgscan

查看VG卷组

[root@localhost ~]# vgcreate myvg2 /dev/sdc{1,2,3}    创建VG卷组
Volume group "myvg2" successfully created

[root@localhost ~]# vgs                                                                   查看系统上的VG卷组
  VG     #PV #LV #SN Attr   VSize  VFree
  centos   1   2   0 wz--n- 19.51g    0 
  myvg     3   0   0 wz--n-  8.99g 8.99g
  myvg2    4   0   0 wz--n-  3.98g 3.98g

[root@localhost ~]# vgextend myvg2 /dev/sdc5                            将pv卷sdc5添加到myvg2的VG卷组
  Volume group "myvg2" successfully extended

[root@localhost ~]# vgreduce myvg2 /dev/sdc1                            将pv卷sdc1从myvg2的VG卷组内移除
  Removed "/dev/sdc1" from volume group "myvg2


    2.3创建逻辑卷LV

    创建LV常用到的命令:lvcreate lvremove,lvextend,lvreduce,lvs,lvdisplay,mke2fs

lvcreate创建LV卷:lvcreate -n LV_NAME -L 空间 VG_NAME
     -L:直接指定空间大小
     -l:指定盘区(PE)个数
lvremove移除LV逻辑卷,移除设备时需要先卸载设备,格式:lvremove /dev/VG_NAME/LV_NAME 
lvextend

拓展物理边界 lvextend -L [+]# /dev/VG_NAME/PVNAME

           -L带+表示需要增加的空间大小,不带+表示拓展结果的空间大小

resize2fs

拓展逻辑边界:resize2fs /dev/VG_NAME/PVNAME

-p表示拓展到物理边界极限(即增加VG剩余大小的空间)

lvreduce

裁剪边界:lvreduce -L [-]# /PATH/TO/LV ,(要裁物理边界需要先裁剪逻辑边界,使用resize2fs)

            带-号是缩减#size,不带-号代表缩减到#size

mke2fs格式化LV卷:mke2fs -j /dev/VG_NAME/LV_NAME

lvs

lvscan

lvdisplay

浏览

    2.3.1拓展LVM:

root@localhost dev]# lvextend -L 2.6G /dev/myvg/mylv      将LV卷拓展到2.6G
  Extending logical volume mylv to 2.6 GiB
  Logical volume mylv successfully resized

root@localhost dev]# lvs                                                             查看LV                           
  mylv myvg   -wi-ao----  2.60g

root@localhost dev]# df -h                                                         查看磁盘使用

dev/mapper/myvg-mylv    1.9G  3.9M  1.8G   1% /mnt

root@localhost dev]# resize2fs -p /dev/myvg/mylv     拓展逻辑边界至VG极限
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/myvg/mylv is now 681984 blocks long.


2.3.2 裁剪LVM;

    要裁剪LVM,首先要对其逻辑卷进行调整,调整过程中需要遵循:

        1,需要先卸载

        2,确保缩减后的空间依然能足够存储原有数据

        3,在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态

    [root@localhost dev]# resize2fs /dev/myvg/mylv 2G   调整逻辑边界大小至2G

resize2fs 1.42.9 (28-Dec-2013)Please run 'e2fsck -f /dev/myvg/mylv' first.         注意此处要求运行单引号内的命令

[root@localhost dev]# e2fsck -f /dev/myvg/mylv       运行该命令
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/mylv: 11/172032 files (0.0% non-contiguous), 28167/681984 blocks

[root@localhost dev]# resize2fs /dev/myvg/mylv 2G      调整逻辑边界大小至2G    
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 524288 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 524288 blocks long.

localhost dev]# lvs            查看LV

  LV   VG     Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert                                         

  mylv myvg   -wi-a-----  2.60g         此处可以看到修改逻辑卷后LV大小没变

[root@localhost dev]# lvreduce -L 2.1G /dev/myvg/mylv         调整物理边界,注意物理边界要大于等于逻辑边界
  Rounding size to boundary between physical extents: 2.10 GiB
  WARNING: Reducing active logical volume to 2.10 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Reducing logical volume mylv to 2.10 GiB
  Logical volume mylv successfully resized

localhost dev]# lvs       查看LV

  LV   VG     Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert

 myvg   -wi-a-----  2.10g           此处可以看到修改逻辑卷后LV大小已经改变

[root@localhost dev]# mount /dev/myvg/mylv /mnt                挂载

[root@localhost dev]# df -h                                        查看磁盘信息
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv    2.0G  3.9M  1.8G   1% /mnt    此处可看到该LV卷大小已经调整至逻辑卷大小

[root@localhost dev]# resize2fs -p /dev/myvg/mylv     调整LV至物理边界大小
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/myvg/mylv is now 550912 blocks long.

[root@localhost dev]# df -h          查看磁盘信息 
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv    2.1G  3.9M  1.9G   1% /mnt