LVM组件详解&创建实验流程

   前言:根据前面的学习我们知道,一个磁盘一旦分完区并且格式化后,其空间大小是没有办法进行调整了。因此推出了LVMLogical Volume Manager)逻辑卷管理机制,LVM重点在于可以弹性的调整文件系统的容量!并非在于性能和数据保全方面,需要文件的读写性能或者数据的可靠性,需要用到RAID。而LVM可以整合多个物理分区在一起,让这些分区看起来像是一个磁盘一样,而且还可以将其他的物理分区或将从这个LVM管理的磁盘中删除。实现磁盘的扩大和缩小容量,LVM最精华的部分是可以实现快照功能,快照就是将当前的系统信息记录下来,将来有任何数据改动了,就会将原始数据移动到快照,没有改动的区域则由快照区域和文件系统共享。并且LVM在我们实际的生产环境中运用广泛,因此我们必须要非常熟悉其基本原理和使用方法,下面我们通过一个实验来演示其各个阶段,让我们一睹为快吧!

一、PVPEVGLV的含义

1、PVPhysical Volume)物理卷

我们实际的分区需要调整系统标示符(system id)成为8eLVM的标示符)然后经过pvcreate的命令将它转为LVM最底层的物理卷PV,之后才能将这些PV加以利用,调整system id的方法是使用fdisk命令。

2、VGVolume Group)卷用户组

所谓的LVM大磁盘就是将许多PV整合成这个VG,因此VG就是PV组合起来的大磁盘。那么这个大磁盘的容量为多少呢?这是与有多少个PE有关,我们默认VG最多可以有65534PE,后续我们介绍PE,在这里我们先知道一个VG最大可达256G的容量。

3、PEPhysical Extend)物理扩展块

LVM默认使用4MPE块,而LVMVG最多仅能含有65534PE,因此两者相乘就得到上述所说的256GPE是整个LVM最小的存储块,也就是说,其实我们的文件数据都是有写入PE来处理的,简单地说,这个PE就有点像文件系统的block大小,又有点像RAID中的chunk,因此调整PE的大小,会影响到VG的最大容量。

4、LVLogical Volume)逻辑卷

最终的VG还会被切割成LV,这个LV就可以最后被格式化使用的类似分区。LV的容量也是和LV中的PE的数量有关的,其大小是不可以调整的,当然我们可以通过VG里面的没有使用的PE加入到LV里面,就可以实现LV的扩容。为了方便LVM管理其系统,它的设备名通常指定为“/dev/vgname/lvname”的样式,而VG的名字是可以随意指定的。这一点必须的注意!

二、VG、LV、PE的相互关系

图片1.png

如上图所示,我们知道LVM里面最小的储存块就是PE,但是它可以属于不同阶段的PE,上图表示的VG内的PE会分给虚线部分的LV作为LVPE,如果将来这个VG需要扩充的话,我们增加其他的PV即可。而重要的LV扩充的话,可以通过加入VG内没有使用的PE来扩充,当然如果LV需要降低容量,可以将其内的PE扔回VG即可。

三、LVM各组件实现的流程

通过PVVGLV的规划之后,再利用mkfs就可以将你得LV格式化成可以利用的文件系统了,而且这个文件系统的容量将来还可以能够进行扩充或减少,里面的数据不会受到影响。下面我们来了解下到底有哪些阶段,如下图所示:

图片2.png


四、LVM实际操作流程

实验目的:了解LVM的命令使用方法

实验规划流程:

·分出4个分区,每个分区的容量为2G,且system id需要更改为8e

·全部的分区需要整合到一个VG内,VG的名称我们设置为andyvg,且我们设置PE的大小为16M

·全部的VG容量都丢给LV,LV的名称设置为/dev/andyvg/andylv(实际我们也需要演示丢6GVG容量给LV)

·最终我们将LV格式化ext4的文件系统,并且实现开机挂载到/mnt/lvm中

根据上述实验规划流程,我们赶紧进入实际操作中来。

1、先规划自己系统的环境,前提就是删除之前实验操作的分区全部删除,具体我们可以按照下面几步操作来还原系统:

(1)利用umount先卸载之前挂载的文件系统

(2)修改/etc/fstab里面的数据,让开机不会自动挂载

(3)利用fdisk将对应的分区删除

(4)注意一点如果机器之前做过RAID的实验,需要卸载,修改/etc/fstab文件,然后再关闭服务,并且要得删除RAID的配置文件,具体操作请查阅软RAID的模拟实验。

(5)如果已经挂载了LVM,我们也需要删除,具体操作后续也会介绍。

我开始实验前的系统环境:

[root@centos7 ~ #1]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  200G  0 disk 
├─sda1        8:1    0  200M  0 part /boot
├─sda2        8:2    0  100G  0 part /
├─sda3        8:3    0    4G  0 part [SWAP]
├─sda4        8:4    0    1K  0 part 
├─sda5        8:5    0   20G  0 part /testdir
└─sda6        8:6    0   10G  0 part /mnt/home
sdb           8:16   0  200G  0 disk 
├─sdb1        8:17   0   10G  0 part 
├─sdb2        8:18   0   10G  0 part /mnt/sdb2
├─sdb3        8:19   0   10G  0 part 
└─sdb4        8:20   0    1K  0 part 
sdc           8:32   0   20G  0 disk 
├─sdc1        8:33   0    2G  0 part /test
└─sdc2        8:34   0   10G  0 part 
sdd           8:48   0   20G  0 disk 
└─sdd2        8:50   0 19.8G  0 part 
sde           8:64   0   20G  0 disk 
├─sde1        8:65   0   10G  0 part 
│ └─vg0-lv0 253:0    0   17G  0 lvm  /mnt/lvm
├─sde2        8:66   0    5G  0 part 
│ └─vg0-lv0 253:0    0   17G  0 lvm  /mnt/lvm
└─sde3        8:67   0    2G  0 part 
  └─vg0-lv0 253:0    0   17G  0 lvm  /mnt/lvm
sdf           8:80   0   20G  0 disk 
sr0          11:0    1  7.2G  0 rom

按照上面的还原系统的流程,达到下面环境即可

[root@centos7 ~ #5]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    4G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
├─sda5   8:5    0   20G  0 part /testdir
└─sda6   8:6    0   10G  0 part 
sdb      8:16   0  200G  0 disk 
sdc      8:32   0   20G  0 disk 
sdd      8:48   0   20G  0 disk 
sde      8:64   0   20G  0 disk 
sdf      8:80   0   20G  0 disk 
sr0     11:0    1  7.2G  0 rom  /run/media/root/CentOS 7 x86_64
[root@centos7 ~ #6]# blkid
/dev/block/8:2: UUID="bd6898a4-e81d-484f-a98c-bf0db692a30b" TYPE="xfs" 
/dev/block/8:1: UUID="cfa0ba95-faf2-41ed-a849-70c59f56e00a" TYPE="xfs" 
/dev/block/8:3: UUID="4c2a179a-61d4-4a7f-91f0-15979fc699f2" TYPE="swap" 
/dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda5: UUID="b1c4ae19-2384-4e09-bea7-2f1cffaa3dcb" TYPE="xfs" 
/dev/sda6: LABEL="/home" UUID="2cf5ce7d-46d7-443a-bb1d-3b782bb65200" TYPE="ext4" 
/dev/sdb: PTTYPE="dos" 
/dev/sde: PTTYPE="dos" 
/dev/sdd: PTTYPE="dos" 
/dev/sdc: PTTYPE="dos"

实验第一步:我们在/dev/sdc上分出4个分区,每个分区的容量为2G,且system id需要更改为8e,具体使用fdisk完成操作,其具体创建细节我们就不再多介绍,最终结果如下:

[root@centos7 ~ #11]# fdisk -l
#...................省略................
Disk /dev/sdc: 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: 0xef657dc4
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     4196351     2097152   83  Linux
/dev/sdc2         4196352    39847935    17825792    5  Extended
/dev/sdc5         4198400     8392703     2097152   8e  Linux LVM
/dev/sdc6         8394752    12589055     2097152   8e  Linux LVM
/dev/sdc7        12591104    16785407     2097152   8e  Linux LVM
/dev/sdc8        16787456    20981759     2097152   8e  Linux LVM

上面的/dev/sdc{5,6,7,8}这四个分区就是我们的物理分区。

 

实验第二步:PV阶段

要创建PV其实很简单,只要pvcreate即可,我们先看看有关PV的相关命令。

·pvcreate:将物理分区新建成为PV

·pvscan:查询目前系统里面任何具有PV的磁盘

·pvdisplay:显示目前系统上面的PV状态

·pvs:PV的报表

·pvremove:将PV属性删除,让该分区不具有PV的属性

[root@centos7 ~ #19]# pvscan
  No matching physical volumes found
[root@centos7 ~ #20]# pvcreate /dev/sdc{5,6,7,8}
  Physical volume "/dev/sdc5" successfully created
  Physical volume "/dev/sdc6" successfully created
  Physical volume "/dev/sdc7" successfully created
  Physical volume "/dev/sdc8" successfully created
[root@centos7 ~ #21]# pvscan
  PV /dev/sdc6         lvm2 [2.00 GiB]
  PV /dev/sdc8         lvm2 [2.00 GiB]
  PV /dev/sdc5         lvm2 [2.00 GiB]
  PV /dev/sdc7         lvm2 [2.00 GiB]
  Total: 4 [8.00 GiB] / in use: 0 [0   ] / in no VG: 4 [8.00 GiB]
[root@centos7 ~ #22]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdc5       lvm2 ---  2.00g 2.00g
  /dev/sdc6       lvm2 ---  2.00g 2.00g
  /dev/sdc7       lvm2 ---  2.00g 2.00g
  /dev/sdc8       lvm2 ---  2.00g 2.00g
[root@centos7 ~ #23]# pvdisplay
  "/dev/sdc6" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc6
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               7dOEay-UWx3-4jYw-5LyD-av1c-VFPE-Sc65GM
   
  "/dev/sdc8" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc8
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               KDQjbZ-wqGi-cxBB-mttK-X0ZE-KvDd-KheRR4
   
  "/dev/sdc5" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc5
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               7QGfnu-5tFo-bYAj-g3vi-V0Sq-df8S-e3wwja
   
  "/dev/sdc7" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc7
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               rrE1dF-QoEs-d4na-l6Or-gtDu-Jyrf-OjHEJX

实验第三步:VG阶段

我们仍然先看下新建VG和VG相关的命令

·vgcreate:新建VG的命令,记住实验要求PE的大小是16M,这里需要加上-s选项,指定PE的大小,后面需要跟上VG名称和PV名称

具体:vgcreate -s 16M andyvg /dev/sdc{5,6,7}

·vgscan:查找系统上面是否存在VG

·vgs:VG的报表

·vgdisplay:显示系统上面VG的状态

·vgextend:在VG内增加额外的PV

具体:vgextend andyvg /dev/sdc8

·vgreduce:在VG内删除PV

·vgchange:设置VG是否被启动(active)

·vgremove:删除一个VG

在这里我们需要注意的是,VG的名称是我们自己定义的,我们知道PV的名称实际就是设备文件名,根据实验要求我们将VG取名为andyvg,下面是我们的创建过程:

[root@centos7 ~ #25]# vgscan
  Reading all physical volumes.  This may take a while...
[root@centos7 ~ #26]# vgcreate -s 16M andyvg /dev/sdc{5,6,7}
  Volume group "andyvg" successfully created
[root@centos7 ~ #27]# pvscan
  PV /dev/sdc5   VG andyvg   lvm2 [1.98 GiB / 1.98 GiB free]
  PV /dev/sdc6   VG andyvg   lvm2 [1.98 GiB / 1.98 GiB free]
  PV /dev/sdc7   VG andyvg   lvm2 [1.98 GiB / 1.98 GiB free]
  PV /dev/sdc8               lvm2 [2.00 GiB]
  Total: 4 [7.95 GiB] / in use: 3 [5.95 GiB] / in no VG: 1 [2.00 GiB]
[root@centos7 ~ #30]# vgs
  VG     #PV #LV #SN Attr   VSize VFree
  andyvg   3   0   0 wz--n- 5.95g 5.95g
[root@centos7 ~ #31]# vgdisplay
  --- Volume group ---
  VG Name               andyvg
  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               5.95 GiB
  PE Size               16.00 MiB
  Total PE              381
  Alloc PE / Size       0 / 0   
  Free  PE / Size       381 / 5.95 GiB
  VG UUID               Mq13Pt-okme-YhVy-yW2M-7TFJ-mefj-lfCWIQ

我们再利用vgextend再额外添加一个PV

[root@centos7 ~ #32]# vgextend andyvg /dev/sdc8
  Volume group "andyvg" successfully extended
[root@centos7 ~ #34]# vgdisplay
  --- Volume group ---
  VG Name               andyvg
  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               7.94 GiB
  PE Size               16.00 MiB
  Total PE              508
  Alloc PE / Size       0 / 0   
  Free  PE / Size       508 / 7.94 GiB
  VG UUID               Mq13Pt-okme-YhVy-yW2M-7TFJ-mefj-lfCWIQ

我们发现VG的大小又增加了2G,正是我们额外增加的PV的效果。


实验第四步:LV阶段

创造了VG这个大磁盘后,再来的我们就是需要分区,这个所谓的分区指的就是LV,我们先演示将6G的VG容量丢给LV,然后观察其效果后,我们再将所有的VG容量全部丢给LV。下面我们先了解下新建LV和其相关的命令:

·lvcreate:新建LV

·lvscan:查阅系统上面的LV

·lvdisplay:显示系统上面的LV状态

·lvs:LV的报表

·lvextend:在LV里面增加容量

·lvreduce:在LV里面减少容量

·lvremove:删除一个LV

·lvresize:对LV进行容量的大小调整

[root@centos7 ~ #35]# lvscan
[root@centos7 ~ #36]# lvcreate -n andylv -L 6G andyvg
  Logical volume "andylv" created.
[root@centos7 ~ #37]# ll /dev/andyvg/andylv 
lrwxrwxrwx. 1 root root 7 Aug 30 03:24 /dev/andyvg/andylv -> ../dm-0
[root@centos7 ~ #38]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/andyvg/andylv
  LV Name                andylv
  VG Name                andyvg
  LV UUID                fQhokh-cHJJ-uLeL-jFju-XclH-fsTG-Khaflz
  LV Write Access        read/write
  LV Creation host, time centos7, 2016-08-30 03:24:34 -0400
  LV Status              available
  # open                 0
  LV Size                6.00 GiB
  Current LE             384
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
[root@centos7 ~ #39]# lvextend -l +100%FREE /dev/andyvg/andylv
  Size of logical volume andyvg/andylv changed from 6.00 GiB (384 extents) to 7.94 GiB (508 extents).
  Logical volume andylv successfully resized.
[root@centos7 ~ #40]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/andyvg/andylv
  LV Name                andylv
  VG Name                andyvg
  LV UUID                fQhokh-cHJJ-uLeL-jFju-XclH-fsTG-Khaflz
  LV Write Access        read/write
  LV Creation host, time centos7, 2016-08-30 03:24:34 -0400
  LV Status              available
  # open                 0
  LV Size                7.94 GiB
  Current LE             508
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

我们可以看到先创建了一个6G的LV名称为/dev/andyvg/andy/lv,后来我们使用逻辑卷扩展命令lvextend将VG里面所有的容量全部耗尽丢给了LV,增加指8G。


实验第五步:文件系统阶段

这个部分非常简单了,我们直接看操作吧,我LV格式化ext4的文件系统,并且实现开机挂载到/mnt/lvm中

[root@centos7 ~ #41]# mkfs.ext4 /dev/andyvg/andylv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
520192 inodes, 2080768 blocks
104038 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2130706432
64 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks: 
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
 
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 
 
[root@centos7 ~ #42]# mkdir /mnt/lvm
mkdir: cannot create directory ‘/mnt/lvm’: File exists
[root@centos7 ~ #43]# rm -fr /mnt/lvm/
[root@centos7 ~ #44]# mkdir /mnt/lvm
[root@centos7 ~ #45]# mount /dev/andyvg/andylv /mnt/lvm
[root@centos7 ~ #46]# df
Filesystem                1K-blocks    Used Available Use% Mounted on
/dev/sda2                 104806400 7553512  97252888   8% /
devtmpfs                     919820       0    919820   0% /dev
tmpfs                        934344      88    934256   1% /dev/shm
tmpfs                        934344    9280    925064   1% /run
tmpfs                        934344       0    934344   0% /sys/fs/cgroup
/dev/sda5                  20961280  140744  20820536   1% /testdir
/dev/sda1                    201388  143048     58340  72% /boot
tmpfs                        186872       4    186868   1% /run/user/42
tmpfs                        186872      16    186856   1% /run/user/0
/dev/sr0                    7587292 7587292         0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/andyvg-andylv   8061368   36564   7592268   1% /mnt/lvm
 
[root@centos7 ~ #47]# cp -a /etc/* /mnt/lvm

我们发现/etc/目录的下面的文件会全部拷到/mnt/lvm目录下,下面我们需要将其写到/etc/fstab文件里面即可。

[root@centos7 /mnt/lvm #5]# blkid
/dev/block/8:2: UUID="bd6898a4-e81d-484f-a98c-bf0db692a30b" TYPE="xfs" 
/dev/block/8:1: UUID="cfa0ba95-faf2-41ed-a849-70c59f56e00a" TYPE="xfs" 
/dev/block/8:3: UUID="4c2a179a-61d4-4a7f-91f0-15979fc699f2" TYPE="swap" 
/dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda5: UUID="b1c4ae19-2384-4e09-bea7-2f1cffaa3dcb" TYPE="xfs" 
/dev/sda6: LABEL="/home" UUID="2cf5ce7d-46d7-443a-bb1d-3b782bb65200" TYPE="ext4" 
/dev/sdc1: LABEL="TEST" UUID="1272e17b-eaac-4e68-a57e-96cdee34bb76" TYPE="ext4" 
/dev/sdb: PTTYPE="dos" 
/dev/sde: PTTYPE="dos" 
/dev/sdd: PTTYPE="dos" 
/dev/sdc5: UUID="7QGfnu-5tFo-bYAj-g3vi-V0Sq-df8S-e3wwja" TYPE="LVM2_member" 
/dev/sdc6: UUID="7dOEay-UWx3-4jYw-5LyD-av1c-VFPE-Sc65GM" TYPE="LVM2_member" 
/dev/sdc7: UUID="rrE1dF-QoEs-d4na-l6Or-gtDu-Jyrf-OjHEJX" TYPE="LVM2_member" 
/dev/sdc8: UUID="KDQjbZ-wqGi-cxBB-mttK-X0ZE-KvDd-KheRR4" TYPE="LVM2_member" 
/dev/mapper/andyvg-andylv: UUID="23f51195-fabd-4ac2-b1a8-80121283c23b" TYPE="ext4"

图片3.png

[root@centos7 /mnt #63]# umount /mnt/lvm
[root@centos7 /mnt #64]# mount -a
[root@centos7 /mnt #65]# df
Filesystem                1K-blocks    Used Available Use% Mounted on
/dev/sda2                 104806400 7553104  97253296   8% /
devtmpfs                     919820       0    919820   0% /dev
tmpfs                        934344      88    934256   1% /dev/shm
tmpfs                        934344    9280    925064   1% /run
tmpfs                        934344       0    934344   0% /sys/fs/cgroup
/dev/sda5                  20961280  140744  20820536   1% /testdir
/dev/sda1                    201388  143048     58340  72% /boot
tmpfs                        186872       4    186868   1% /run/user/42
tmpfs                        186872      16    186856   1% /run/user/0
/dev/sr0                    7587292 7587292         0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/andyvg-andylv   8061368   72464   7556368   1% /mnt/lvm


    本文仅介绍了LVM的创建流程和基本原理,后续我们还会介绍LVM的扩充和减小容量以及其精华部分的LVM快照的原理,和实现过程。

原创文章,作者:AndyIvanXue,如若转载,请注明出处:http://www.178linux.com/42191

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-01 13:12

    总结的很不错,作者很用心,通过自己的语言组织了文字,通读整篇能学到很多东西,继续保持。

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code