LVM逻辑卷配置过程

LVM逻辑卷配置过程详解

LVM原理

要想理解好LVM的原理,我们必须首先要掌握4个基本的逻辑卷概念。

①PE  (Physical Extend)  物理拓展

②PV  (Physical Volume)  物理卷

③VG  (Volume Group)  卷组

④LV  (Logical Volume)  逻辑卷

我们知道在使用LVM对磁盘进行动态管理以后,我们是以逻辑卷的方式呈现给上层的服务的。所以我们所有的操作目的,其实就是去创建一个LV(Logical Volume),逻辑卷就是用来取代我们之前的分区,我们通过对逻>辑卷进行格式化,然后进行挂载操作就可以使用了。那么LVM的工作原理是什么呢?所谓无图无真相,咱们下面通过图来对逻辑卷的原理进行解释!!


LVM逻辑卷配置过程_第1张图片
图片.png

1.将我们的物理硬盘格式化成PV(Physical Volume)

我们看到,这里有两块硬盘,一块是sda,另一块是sdb,在LVM磁盘管理里,我首先要将这两块硬盘格式化为我们的PV(Physical Volume),也就是我们的物理卷,其实格式化物理卷的过程中LVM是将底层的硬盘划分为了一个一个的PE(Physical Extend),我们的LVM磁盘管理中PE的默认大小是4M大小,其实PE就是我们逻辑卷管理的最基本单位。比如说我有一个400M的硬盘,那么在将其格式化成PV的时候,其实际就是将这块物理硬盘划分成了100个的PE,因为PE默认的大小就是4M。这个就是我们的第一步操作。

2.创建一个VG(Volume Group)

在将硬盘格式化成PV以后,我们第二步操作就是创建一个卷组,也就是VG(Volume Group),卷组在这里我们可以将其抽象化成一个空间池,VG的作用就是用来装PE的,我们可以把一个或者多个PV加到VG当中,因为在第一步操作时就已经将该硬盘划分成了多个PE,所以将多个PV加到VG里面后,VG里面就存放了许许多多来自不同PV中的PE,我们通过上面的图片就可以看到,我们格式化了两块硬盘,每个硬盘分别格式化成了3个PE,然后将两块硬盘的PE都加到了我们的VG当中,那么我们的VG当中就包含了6个PE,这6个PE就是两个硬盘的PE之和。通常创建一个卷组的时候我们会为其取一个名字,也就是该VG的名字。

3.基于VG创建我们最后要使用的LV(Logical Volume)

【注意】PV以及VG创建好以后我们是不能够直接使用的,因为PV、VG是我们逻辑卷底层的东西,我们其实最后使用的是在VG基础上创建的LV(Logical Volume),所以第三步操作就是基于VG来创建我们最终要使用的LV。

当我们创建好我们的VG以后,这个时候我们创建LV其实就是从VG中拿出我们指定数量的PE,还是拿上图来说,我们看到我们此时的VG里面已经拥有了6个PE,这时候我们创建了我们的第一个逻辑卷,它的大小是4个PE的大小,也就是16M(因为一个PE的默认大小是4M),而这4个PE有三个是来自于第一块硬盘,而另外一个PE则是来自第二块硬盘。当我们创建第二个逻辑卷时,它的大小就最多只有两个PE的大小了,因为其中的4个PE已经分配给了我们的第一个逻辑卷。

所以创建逻辑卷其实就是我们从VG中拿出我们指定数量的PE,VG中的PE可以来自不同的PV,我们可以创建的逻辑卷的大小取决于VG当中PE存在的数量,并且我们创建的逻辑卷其大小一定是PE的整数倍(即逻辑卷的大小一定要是4M的整数倍)。

4.将我们创建好的LV进行文件系统的格式化,然后挂载使用

在创建好LV以后,这个时候我们就能够对其进行文件系统的格式化了,我们最终使用的就是我们刚创建好的LV,其就相当于传统的文件管理的分区,我们首先要对其进行文件系统的格式化操作,然后通过mount命令对其进行挂载,这个时候我们就能够像使用平常的分区一样来使用我们的逻辑卷了。

我们在创建好LV以后,我们会在 /dev 目录下看到我们的LV信息,例如 /dev/vgname/lvname, 我们每创建一个VG,其会在/dev目录下创建一个以该VG名字命名的文件夹,在该VG的基础上创建好LV以后,我们会在这个VG目录下多出一个以LV名字命名的逻辑卷。

下面我们来对整个LVM的工作原理进行一个总结:

(1)物理磁盘被格式化为PV,空间被划分为一个个的PE

(2)不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内

(3)LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘

(4)LV直接可以格式化后挂载使用

(5)LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据

LVM逻辑卷配置过程_第2张图片
图片.png

我们看到,我们这里如果要对LV进行扩充,直接加进来一块sdc硬盘,然后将其格式化成PE,然后将该PV加入到了VG当中,这个时候我们就可以通过增加LV中PE的数量来动态的对LV进行扩充了,只要我们的LV的大小不要超过我们VG空余空间的大小就行!

二、创建LVM逻辑卷

LVM逻辑卷配置过程_第3张图片
图片.png

熟悉了LVM的工作原理,首先是要将我们的物理硬盘格式化成PV,然后将多个PV加入到创建好的VG中,最后通过VG创建我们的LV。

三、拉伸一个逻辑卷

我们知道相比于传统磁盘管理方式的各种问题,使用LVM逻辑卷来管理我们的磁盘,我们可以对其进行动态的管理。在传统的磁盘管理方式中,我们如果出现分区大小不足的情况下,我们此时只能通过加入一块物理硬盘,然后对其进行分区,因为加入的硬盘作为独立的文件系统存在,所以对原有分区并没有影响,如果此时我们需要扩大分区,就只能先将之前的分区先卸载掉,然后将所有的信息转移到新的分区下,最后再将新的分区挂载上去,如果是在生产环境下,这样是不可想象的,正因为如此,我们才出现了LVM的磁盘管理方式,可以动态的对我们的磁盘进行管理。

我们首先来看下动态拉伸一个逻辑卷的示意图:


LVM逻辑卷配置过程_第4张图片
图片.png

我们从上图可以看到,我们在对逻辑卷进行拉伸时,其实际就是向逻辑卷中增加PE的数量,而PE的数量是由VG中剩余PE的数量所决定的。
【注意:】逻辑卷的拉伸操作可以在线进行,不需要卸载掉我们的逻辑卷

这样的好处就是当我们的逻辑卷的大小不够用时,我们不需要对其进行卸载,就可以动态的增加我们的逻辑卷的大小,并不会对我们的系统产生任何影响。例如如果我们的服务器上运行着一个重要的服务或者数据库,并要求我们7*24小时不间断保持在线,那么这样的动态增加逻辑卷的大小就非常的有必要了。

接下来我们来看看拉伸逻辑卷的步骤:

因为我们的逻辑卷的拉伸操作是可以在线进行的,所以这里我们先将逻辑卷挂载上,并在使用情况下动态的拉伸我们的逻辑卷

四、实验

首先从空的硬盘sdb上创建分区sdb1,为接下来做LVM做准备.

root@ubuntu:~# fdisk  -l

Disk /dev/sdb: 160 GiB, 171798691840 bytes, 335544320 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

root@ubuntu:~# fdisk /dev/sdb 

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x88fc7537.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-335544319, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-335544319, default 335544319): 

Created a new partition 1 of type 'Linux' and of size 160 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

创建逻辑卷
将新创建的两个分区/dev/sdb1 转化成物理卷,主要是添加LVM属性信息并划分PE存储单元.

root@ubuntu:~# pvcreate /dev/sdb1
 Physical volume "/dev/sdb1" successfully created
root@ubuntu:~# pvs
  PV         VG        Fmt  Attr PSize   PFree  
  /dev/sda5  ubuntu-vg lvm2 a--    9.52g  28.00m
  /dev/sdb1            lvm2 ---  160.00g 160.00g
root@ubuntu:~# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               ubuntu-vg
  PV Size               9.52 GiB / not usable 2.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2437
  Free PE               7
  Allocated PE          2430
  PV UUID               qOK5ke-q0K9-ndE6-bO8h-xhI8-xZiq-Fs7LL6
   
  "/dev/sdb1" is a new physical volume of "160.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               160.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               hdHeYm-nnk2-89TZ-08OQ-P8p3-cz0G-5vqavc

创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组.可以看出默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小。

root@ubuntu:~# vgcreate vgdata /dev/sdb1
  Volume group "vgdata" successfully created
root@ubuntu:~# vgs
  VG        #PV #LV #SN Attr   VSize   VFree  
  ubuntu-vg   1   2   0 wz--n-   9.52g  28.00m
  vgdata      1   0   0 wz--n- 160.00g 160.00g
root@ubuntu:~# vgdisplay 
  --- Volume group ---
  VG Name               vgdata
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               160.00 GiB
  PE Size               4.00 MiB
  Total PE              40959
  Alloc PE / Size       0 / 0   
  Free  PE / Size       40959 / 160.00 GiB
  VG UUID               KO9v11-cMSG-wklj-Uu0x-Uj3e-4o8a-ICi5Gj

分配LV逻辑卷使用(利用vgdata卷组创建一个名为data的逻辑卷,大小为160G)

root@ubuntu:~# lvcreate -L 159G -n data vgdata 
  Logical volume "data" created.
root@ubuntu:~# lvs
  LV     VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   ubuntu-vg -wi-ao----   7.50g                                                    
  swap_1 ubuntu-vg -wi-ao----   2.00g                                                    
  data   vgdata    -wi-a----- 159.00g                                                    
root@ubuntu:~# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vgdata/data
  LV Name                data
  VG Name                vgdata
  LV UUID                1iGgQG-fCtw-lUXA-XczM-rcYd-JFFd-QVqjxk
  LV Write Access        read/write
  LV Creation host, time ubuntu, 2019-03-07 15:57:16 +0800
  LV Status              available
  # open                 0
  LV Size                159.00 GiB
  Current LE             40704
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:3

逻辑卷使用前和分区一样,都需要格式化一下

root@ubuntu:~# mkfs.ext4 /dev/vgdata/data 
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 41680896 4k blocks and 10420224 inodes
Filesystem UUID: 23a544b0-0231-41df-a24e-94e370322815
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done     

查看磁盘UID,开机自动挂载

root@ubuntu:~# blkid 
/dev/sdb1: UUID="hdHeYm-nnk2-89TZ-08OQ-P8p3-cz0G-5vqavc" TYPE="LVM2_member" PARTUUID="88fc7537-01"

root@ubuntu:~# cat /etc/fstab
UUID=hdHeYm-nnk2-89TZ-08OQ-P8p3-cz0G-5vqavc /ftp ext4 defaults 0 0 

报错

在阿里云服务器做磁盘扩容时,我遇到了一个问题

$ pvcreate /dev/vdb1
  Can't open /dev/vdb1 exclusively.  Mounted filesystem?

第一反应就是查看这个分区是否已经在使用了,但是并没有
只需要 dmsetup remove xxx 移除掉就可以创建PV了。

$ dmsetup remove /dev/mapper/mydisk-disk
$ pvcreate /dev/vdb1
WARNING: ext4 signature detected on /dev/vdb1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/vdb1.
  Physical volume "/dev/vdb1" successfully created

部分资料来自: https://www.cnblogs.com/fiberhome/p/8109530.html

你可能感兴趣的:(LVM逻辑卷配置过程)