Linux系统中磁盘创建管理(二)



Linux系统中LVM的创建与管理指南

LVM是Logical Volume Manager(逻辑卷管理器)的简写,它为主机提供了更高层次的磁盘存储管理能力。LVM可以帮助系统管理员为应用与用户方便地分配存储空间,在LVM管理下的逻辑卷可以按需改变大小或添加移除。另外,LVM可以为所管理的逻辑卷提供定制的命名标识。


LVM相关概念简介

LVM是建立在磁盘分区和文件系统之间的一个逻辑层,专门为文件系统屏蔽下层磁盘分区布局,提供一个逻辑的盘卷,再在盘卷上来建立文件系统。

LVM的结构如图1所示:

 Linux系统中磁盘创建管理(二)_lvm创建管理



图1展示了LVM的基本结构,那么图中的VG是什么,PV又是什么?下面对LVM逻辑卷涉及的概念作以简单的介绍。


1、物理卷(Physical Volume,PV)

   物理卷就是指硬盘分区,也可以指整个硬盘或已创建的软RAID ,是LVM的基本存储设备,与普通物理存储介质的区别是该设备包含有LVM相关的管理参数。


2、卷组(Volume Group,VG)

   卷组是由一个或多个物理卷所组成的存储池,在卷组上能创建一个或多个“LVM分区”(逻辑卷)。


3、逻辑卷(Logical Volume,LV)

逻辑卷LV类似于非LVM系统中的硬盘分区,它建立在卷组之上,是一个标准的块设备,在逻辑卷之上可以建立文件系统。可以做这样一个设想来理解以上三者的关系: 如果把PV比做地球的一个板块,VG则是一个地球,因为地球是由多个板块组成的,那么在地球上划分一个区域并标记为亚洲,则亚洲就相当于一个LV。


4、物理块(Physical Extent,PE)

   物理卷是由大小相等的物理块PE为存储的基本单位,同时也是LVM寻址的最小单元。


5、逻辑块(Logical Extent,LE)

   逻辑卷是由大小相等的逻辑块为存储的基本单位。在同一个卷组中,LE的大小和PE是相等的,有一一对应的关系。


6、卷组描述区(Volume Group Description Area,VGDA)

   VGDA中保存了逻辑卷以及卷组相关的元数据,它和磁盘将包含分区信息的元数据保存在位于分区的起始位置的分区表类似。

   VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符。系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。

如何创建逻辑卷

创建逻辑卷通常包括如下步骤:

创建分区

创建物理卷

创建卷组

激活卷组

创建逻辑卷

创建文件系统


相关命令:

PV命令——

          pvcreate  建立 PV

          pvscan  查找当前系统中具有 PV 属性的磁盘

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


VG命令——

          vgcreate   建立 VG

          vgscan     查看系统上具有 VG 属性

          vgdisplay  查看系统上的 VG 状态

          vgextend   在 VG 内增加额外的 PV

          vgreduce   在 VG 内移除 PV


LV命令——

          lvcreate   建立 LV

                     -L 后面设定容量

                     -n 后面设定 LV 名称

          lvscan     查看系统上 LV 的属性

          lvdisplay  查看系统上的 LV 状态

          lvextend   在 LV 里面增加容量


下面通过一个实例来详细介绍创建逻辑卷的整个过程。


【LVM实例】



添加1块物理硬盘,进行 LVM 的磁盘管理。

查看分区表:

#fdisk  -l


可以看到有 1 块新硬盘,sdb

我们将这块硬盘分成 3 个分区,每个分区 300MB 空间

 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_02


上面曾经提到过,标准的 Linux分区ID号为 83,此时我们已经产生了3个标准的分区:sdb1  sdb2  sdb3。下面需要将这 3 个标准分区的 ID号改成可以支持 LVM 的分区ID。

备注:LVM的分区ID=8e


 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_03


备注:t 表示更改分区 ID号


保存退出之后,查看一下分区表,就看见了 3个新的分区,并且 ID=8e

 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_04

[root@oracle ~]# partprobe



既然已经产生了支持 LVM的标准分区,下面来创建 PV,这里我们先使用两个标准分区 sdb1  sdb2

 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_05

查看一下创建的结果:

pvscan  查找当前系统中具有 PV 属性的磁盘


 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_06


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


 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_07


现在创建了 PV 之后,开始将这两个 PV 合并成一个 VG,


并把这个 VG 定名为 firstVG

 Linux系统中磁盘创建管理(二)_linux磁盘管理_08

备注:此时这个 VG 中的 PE为默认值,即 4MB

     若想改变 PE 的大小,需要在创建 VG 的时候指定 PE 的大小

如:

备注:我们从 VG 中删除一个 PV

     #vgreduce  firstVG  /dev/sdb2


看一下 VG 的创建结果

vgscan  查看系统上具有 VG 属性

 Linux系统中磁盘创建管理(二)_linux磁盘管理_09


vgdisplay  查看系统上的 VG 状态

 Linux系统中磁盘创建管理(二)_linux磁盘管理_10

现在 VG 也产生了,接下来就是将这个 VG 分割成 LV,从上图可以看到该 VG 的容量是 576MB,下面我们直接将整个 VG 划分成一个 LV,同时将这个 LV 命名为 firstLV。

 Linux系统中磁盘创建管理(二)_lvm创建管理_11

查看一下 LV 的创建结果




lvscan 查看系统上 LV 的属性

 Linux系统中磁盘创建管理(二)_linux磁盘管理_12




lvdisplay 查看系统上的 LV 状态

 Linux系统中磁盘创建管理(二)_lvm创建管理_13


现在 LV 也创建好了,接下来就是格式化、挂载目录使用了

 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_14

备注:实现永久挂载

    #vi  /etc/fstab







当有一天发现 /mnt/lvm 这个目录的空间不够用了,咋办?

下面就来演示扩展的操作:

先卸载该目录

 Linux系统中磁盘创建管理(二)_linux磁盘管理_15

我们在最开始的时候创建了第三个具有8e标识的分区 sdb3,现在先把这个分区变成 PV,再将该 PV加入到 firstVG中。


创建 PV 的步骤略。

 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_16



加入到原有 VG 中后,可以先查看一下新的 PV 的容量,pvdisplay

之后根据这个容量显示的单位来进行原有 LV 的扩展


lvextend 在 LV 里面增加容量

 Linux系统中磁盘创建管理(二)_lvm创建管理_17



此时查看一下 firstLV 的容量

 Linux系统中磁盘创建管理(二)_lvm创建管理_18

仔细观察可以看到原有 firstLV 的大小已经被扩容到 856MB了。


我将已经扩容了的新 LV 挂载到 /mnt/lvm下

 Linux系统中磁盘创建管理(二)_linux磁盘管理_19


使用 df 命令来查看一下 /mnt/lvm这个目录的容量

 Linux系统中磁盘创建管理(二)_磁盘管理与创建_20

我们看到了一个有意思的地方,显示 /mnt/lvm 目录的容量为 567MB。

也就是说 /dev/firstVG/firstLV 这个分区的大小并没有扩大,但是上面明明看到了新的 LV 的大小是 856MB,这是咋回事呢??

这里涉及到了文件系统的扩容,需要一个命令 resize2fs


 Linux系统中磁盘创建管理(二)_linux系统磁盘创建_21


备注:文件系统扩容时,需要先将已经挂载的目录卸载


现在我们再次挂载之后再来查看一下 /mnt/lvm 目录的大小

 Linux系统中磁盘创建管理(二)_lvm创建管理_22


至此实现了真正的扩容。



删除LVM

#umount  /mnt/lvm   卸载目录

#lvremove  /dev/firstVG/firstLV   移除 LV

#vgchange  -a  n  firstVG   关闭 VG 的 Active 标志

#vgremove  firstVG       移除 VG

#pvremove  /dev/sdb1   移除 PV