这章我们学习了解一下逻辑卷管理器的相关概念以及实际操作。

一.概念简介

逻辑卷管理器是允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小;

是允许在多个物理设备间重新组织文件系统 。

在此,我们先了解一下物理卷的概念, 物理卷是用固定大小的物理区域来定义的 ,表示为PE。

当我们将设备指定为物理卷时,用一个或者多个物理卷来创建一个卷组。

所以可以知道,PE便是逻辑卷的最小单位。

在物理卷上创建逻辑卷之后可以在逻辑卷上创建文件系统。

那么学习逻辑卷,可以应用在哪些方面,又或者说,逻辑卷的用处体现在什么方面?

由逻辑卷的概念我们可以知道很明显的用处,便是重新设定文件系统大小。

随着对磁盘的使用,块设备以及文件系统的剩余空间不够,此时就需要使用逻辑卷对文件系统进行在线拉伸,

这样既能确保文件系统大小扩展,又可以保证业务正常运行以及保留数据。

二.创建LVM过程

    1.新增分区或增加新的硬盘

如果新增硬盘,注意在VMware添加后,需要在终端输入 echo '- - -' > /sys/class/scsi_host/host0/scan,识别新磁盘。
如果是分区,则需要注意分区的ID设置为8e,fdisk 选项t来修改分区ID

     2.创建物理卷pv
         pvcreate /dev/sdX /dev/sdXn /dev/md1:创建sdX,sdXn为md1物理卷pv

1 [root@mmmm(mei) ~]# pvcreate /dev/sdd /dev/sde /dev/sdf
2   Physical volume "/dev/sdd" successfully created
3   Physical volume "/dev/sde" successfully created
4   Physical volume "/dev/sdf" successfully created

查看pv相关命令:

        pvs:查看所有pv物理卷

1 [root@mmmm(mei) ~]# pvs
2   PV         VG   Fmt  Attr PSize PFree
3   /dev/sdd        lvm2 ---- 1.00g 1.00g
4   /dev/sde        lvm2 ---- 1.00g 1.00g
5   /dev/sdf        lvm2 ---- 1.00g 1.00g

         pvdisplay [/dev/sdX]:查看某物理卷详细信息

1 [root@mmmm(mei) ~]# pvdisplay /dev/sdd
 2   "/dev/sdd" is a new physical volume of "1.00 GiB"     #描述
 3   --- NEW Physical volume ---
 4   PV Name               /dev/sdd
 5   VG Name                                               #由于第一步创建pv,并没有创建vg,所以此处为空
 6   PV Size               1.00 GiB
 7   Allocatable           NO
 8   PE Size               0   
 9   Total PE              0
10   Free PE               0
11   Allocated PE          0
12   PV UUID               gUwnnl-CZO1-hidM-0cAz-ijeE-mL2R-9t2dEK

 

     3.创建卷组vg
         vgcreate [-s xM] vgName /dev/sdX …… :选项-s指定PE大小,创建卷组,组名+成员

1 [root@mmmm(mei) ~]# vgcreate -s 16M testvg /dev/sdd /dev/sde /dev/sdf
2   Volume group "testvg" successfully created

         vgs:查看所有卷组vg

1 [root@mmmm(mei) ~]# vgs
2   VG     #PV #LV #SN Attr   VSize VFree
3   testvg   3   0   0 wz--n- 2.95g 2.95g    #三个1G的pv组成,可查看是否正确组成卷组vg

        

         vgdisplay [vgname]:查看某卷组详细信息

1 [root@mmmm(mei) ~]# vgdisplay testvg
 2   --- Volume group ---
 3   VG Name               testvg
 4   System ID             
 5   Format                lvm2
 6   Metadata Areas        3
 7   Metadata Sequence No  1
 8   VG Access             read/write
 9   VG Status             resizable
10   MAX LV                0
11   Cur LV                0
12   Open LV               0
13   Max PV                0
14   Cur PV                3
15   Act PV                3
16   VG Size               2.95 GiB
17   PE Size               16.00 MiB          # -s 指定PE大小
18   Total PE              189
19   Alloc PE / Size       0 / 0   
20   Free  PE / Size       189 / 2.95 GiB
21   VG UUID               o1lhj2-SnLl-4kVa-jDPn-jHXF-0Bcd-gfqThl

 

     4.创建逻辑卷lv
         lvcreate -l pe num /-L size -n lvname vgname:创建逻辑卷 -l指定PE数量,-L指定大小

1 [root@mmmm(mei) ~]# lvcreate -L 1G -n testlv testvg
2   Logical volume "testlv" created.

         lvs:查看所有逻辑卷lv

1 [root@mmmm(mei) ~]# lvs
2   LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
3   testlv testvg -wi-a----- 1.00g

 

         lvdisplay [/dev/vgname/lvname]:查看某逻辑卷详细信息

1 [root@mmmm(mei) ~]# lvdisplay /dev/testvg/testlv
 2   --- Logical volume ---
 3   LV Path                /dev/testvg/testlv
 4   LV Name                testlv
 5   VG Name                testvg
 6   LV UUID                3DA5wa-GIUg-qtJt-0wY4-j8uT-8LEd-vzSnid
 7   LV Write Access        read/write
 8   LV Creation host, time mmmm, 2018-08-11 21:31:27 +0800
 9   LV Status              available                    #  有时候可以禁用逻辑卷
10   # open                 0
11   LV Size                1.00 GiB
12   Current LE             64
13   Segments               2
14   Allocation             inherit
15   Read ahead sectors     auto
16   - currently set to     256
17   Block device           253:0

 

    5.挂载,在这里需要注意的是,在挂载前需要对逻辑卷进行格式化,也可以对pv格式化再进行创建vg、lv

       

1 [root@mmmm(mei) ~]# mount /dev/testvg/testlv /testlv
2 mount: you must specify the filesystem type
3 [root@mmmm(mei) ~]# mkfs.ext4 /dev/testvg/testlv 
4 mke2fs 1.41.12 (17-May-2010)
5 Filesystem label=
6 OS type: Linux.......
1 [root@mmmm(mei) ~]# mount /dev/testvg/testlv /testlv
2 [root@mmmm(mei) ~]# df /testlv/
3 Filesystem           1K-blocks  Used Available Use% Mounted on
4 /dev/mapper/testvg-testlv
5                         999320  1284    945608   1% /testlv

 

三.删除过程

    1.卸载umont

    2.lvremove

1 [root@mmmm(mei) ~]# lvremove /dev/testvg/testlv 
2 Do you really want to remove active logical volume testlv? [y/n]: y
3    Logical volume "testlv" successfully removed

     3.vgremove vgmage

1 [root@mmmm(mei) ~]# vgs
2 VG #PV #LV #SN Attr VSize VFree
3 testvg 2 0 0 wz--n- 1.97g 1.97g
4 [root@mmmm(mei) ~]# vgremove testvg
5 Volume group "testvg" successfully removed

 

     4.使用pvremove  命令:pvremove + pvname即可

1 [root@mmmm(mei) ~]# pvremove /dev/sdd
2   Labels on physical volume "/dev/sdd" successfully wiped

四.拓展已存在逻辑卷

第一种情况,需要扩展的pe数量

vg可以提供 lvextend -L +500M /dev/testvg/testlv
resize2fs /dev/testvg/testlv 

或者lvextend中指定 -r 选项,即:lvextend -L +500M -r /dv/testvg/testlv

1 [root@mmmm(mei) ~]# lvextend -L +1G /dev/testvg/testlv     # -L 选项注意:+表示在原有大小基础上增加,直接跟数字表示变成该数字大小
2   Size of logical volume testvg/testlv changed from 1.00 GiB (64 extents) to 2.00 GiB (128 extents).
3   Logical volume testlv successfully resized.
4 [root@mmmm(mei) ~]# resize2fs /dev/testvg/testlv 
5 resize2fs 1.41.12 (17-May-2010)
6 Filesystem at /dev/testvg/testlv is mounted on /testlv; on-line resizing required
7 old desc_blocks = 1, new_desc_blocks = 1
8 Performing an on-line resize of /dev/testvg/testlv to 524288 (4k) blocks.
9 The filesystem on /dev/testvg/testlv is now 524288 blocks long.
1 [root@mmmm(mei) ~]# lvs
2   LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
3   testlv testvg -wi-ao---- 2.00g

 

第二种情况,vg空间不够,需先扩展vg

扩展vg就是往vg中加pv,这里命令使用结合上面所使用的,便不多介绍。

1.加硬盘,或创建分区等来增加block device
2.创建pv
pvcreate /dev/sdb
3.扩展vg
vgextend vgmage /dev/sdb
4.lvextend -L 4G -r /dev/vgmage/lv01

第三种,减小逻辑卷

在这里需要注意的是,减小逻辑卷一定要特别注意,不能减小有数据的区,防止损坏数据。

那我们如何知道哪些块设备是空闲的呢?

这里就需要用到文件格式化的命令——e2fsck,对块设备

另一方面我们需要知道,一切皆文件,即需要保证文件系统永远小于块设备,所以需要

先减少文件系统大小。具体步骤如下:

1 [root@mmmm(mei) ~]# umount /testlv/
 2 [root@mmmm(mei) ~]# e2fsck -f /dev/testvg/testlv 
 3 e2fsck 1.41.12 (17-May-2010)
 4 Pass 1: Checking inodes, blocks, and sizes
 5 Pass 2: Checking directory structure
 6 Pass 3: Checking directory connectivity
 7 Pass 4: Checking reference counts
 8 Pass 5: Checking group summary information
 9 /dev/testvg/testlv: 11/131072 files (0.0% non-contiguous), 16812/524288 blocks
10 [root@mmmm(mei) ~]# resize2fs /dev/testvg/testlv 1000M
11 resize2fs 1.41.12 (17-May-2010)
12 Resizing the filesystem on /dev/testvg/testlv to 256000 (4k) blocks.
13 The filesystem on /dev/testvg/testlv is now 256000 blocks long.
14 
15 [root@mmmm(mei) ~]# lvreduce -L 1000M /dev/testvg/testlv 
16   Rounding size to boundary between physical extents: 1008.00 MiB.
17   WARNING: Reducing active logical volume to 1008.00 MiB.
18   THIS MAY DESTROY YOUR DATA (filesystem etc.)
19 Do you really want to reduce testvg/testlv? [y/n]: y
20   Size of logical volume testvg/testlv changed from 2.00 GiB (128 extents) to 1008.00 MiB (63 extents).
21   Logical volume testlv successfully resized.
22 [root@mmmm(mei) ~]# mount -a
23 [root@mmmm(mei) ~]# lvs
24   LV     VG     Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
25   testlv testvg -wi-a----- 1008.00m

 

五.XFS文件系统的在线扩展

xfs文件系统创建逻辑卷步骤同ext一样,不一样的xfs文件系统的在拓展

在这里多加注意的是,xfs文件系统不支持减小逻辑卷。

1 root@localhost(mei) ~]# pvcreate /dev/sdc /dev/sdd /dev/sde
 2   Physical volume "/dev/sdc" successfully created.
 3   Physical volume "/dev/sdd" successfully created.
 4   Physical volume "/dev/sde" successfully created.
 5 [root@localhost(mei) ~]# vgcreate testvg /dev/sdc /dev/sdd /dev/sde -s 16M    #指定PE大小
 6   Volume group "testvg" successfully created
 7 [root@localhost(mei) ~]# lvcreate -l 2 -n testlv testvg     #指定PE个数,
 8   Logical volume "testlv" created.
 9 [root@localhost(mei) ~]# lvdisplay /dev/testvg/testlv 
10   --- Logical volume ---
11   LV Path                /dev/testvg/testlv
12   LV Name                testlv
13   VG Name                testvg
14   LV UUID                fBiNq7-tp3F-C5gy-37u9-t7bU-fXkL-PyYAZG
15   LV Write Access        read/write
16   LV Creation host, time localhost.localdomain, 2018-08-12 19:38:01 +0800
17   LV Status              available
18   # open                 0
19   LV Size                32.00 MiB             #即两个PE大小
20   Current LE             2
21   Segments               1
22   Allocation             inherit
23   Read ahead sectors     auto
24   - currently set to     8192
25   Block device           253:3

 

第一种情况,需要扩展的pe数量,vg可以提供

lvextend -L +500M /dev/vgmage/lv01
xfs_growfs /dev/vgmage/lv01 或 lvextend中指定-r

1 [root@localhost(mei) ~]# lvextend -L 1600M -r /dev/testvg/testlv 
 2   Size of logical volume testvg/testlv changed from <1.47 GiB (94 extents) to 1.56 GiB (100 extents).
 3   Logical volume testvg/testlv successfully resized.
 4 meta-data=/dev/mapper/testvg-testlv isize=512    agcount=2, agsize=4096 blks
 5          =                       sectsz=512   attr=2, projid32bit=1
 6          =                       crc=1        finobt=0 spinodes=0
 7 data     =                       bsize=4096   blocks=8192, imaxpct=25
 8          =                       sunit=0      swidth=0 blks
 9 naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
10 log      =internal               bsize=4096   blocks=855, version=2
11          =                       sectsz=512   sunit=0 blks, lazy-count=1
12 realtime =none                   extsz=4096   blocks=0, rtextents=0
13 data blocks changed from 8192 to 409600

 

第二种情况,vg空间不够,需先扩展vg,扩展vg就是往vg中加pv

1.加硬盘,或创建分区等来增加block device
2.创建pv
pvcreate /dev/sdb
3.扩展vg
vgextend vgmage /dev/sdb
4.lvextend -L 4G -r /dev/vgmage/lv01