LVM,我们今天将要讨论的的主题对于每个Linux系统管理员来说都是十分重要的,因为熟练掌握它后就可以方便的管理和分配磁盘空间。本教程详细讲解如何从头创建逻辑卷(LVM),以及如何将其管理到极限情况。通过教程,相信可以让你在Linux系统中处理LVM更加专业和从容。

1] 什么是LVM

LVM(Logical volume management)是Linux系统一种非常灵活的文件管理系统。这种文件管理允许在最初创建一个小规模文件系统,并通过不断向逻辑卷添加磁盘的方式将最初的卷平滑扩展至超大容量。通过LVM,我们可以首先将应用系统搭建好,根据业务的发展自行扩容LVM而不必对应用系统做任何修改,以达到平滑扩容的目的。

2] 哪里可以使用LVM

在所有的Linux系统平台都可以使用LVM,甚至基于Linux的台式机也同样可以使用LVM。

3] LVM中的常用缩写

根据文章的配图,可以对于LVM有个大致的认识,常用的术语缩写如下:

LVM LogicalVolumeManagement 逻辑磁盘卷管理
PV PhysicalVolume 物理磁盘卷
VG VolumeGroup 磁盘卷组
LV LogicalVolume 逻辑磁盘卷
PE PhysicalExtent 物理扩展

4] 创建LVM文件系统的步骤

  1. 在磁盘上创建分区
  2. 在磁盘分区上创建物理卷
  3. 使用已经创建的物理卷来创建磁盘卷组
  4. 在磁盘卷组的现有空间中灵活创建逻辑卷

5] 创建LVM文件系统详细步骤

步骤1、将物理磁盘分区

首先,我们需要对磁盘进行分区以创建物理卷。让我们看看如何使用fdisk命令来分区磁盘。

先使用”-l”参数来查看磁盘的详细信息:

# fdisk -l /dev/sda

图.1 用fdisk命令显示磁盘信息

在进行任何LVM操作之前,命令fdisk大致了解一下磁盘情况是十分有必要的,这些操作包括创建磁盘分区、PV、VG以及LV。

由于主机目前已经创存在逻辑磁盘卷,所以需要使用如下命令查看LVM的基本信息:

  • pvs    显示物理卷的基本信息
  • vgs    显示磁盘卷组的基本信息
  • lvs    显示逻辑卷的基本信息

图.2 Linux系统显示LVM基本命令示例

在进行分区之前,我们先简要对fdisk命令的参数及其作用进行介绍。

# fdisk -uc /dev/sdb
  • fdisk          创建分区的命令
  • -u               使用标准单元(扇区或柱面),如果没有此参数,可能会出现”Partition N does not start on physical sector boundary.”错误
  • -c               采用DOS兼容模式
  • /dev/sdb  是进行分区的目录磁盘,由于之前存在一块”sda”,新加磁盘即为sdb

这里需要强调的是,使用fdisk命令分区时,会造成磁盘数据不可恢复性丢失,所以务必选择正确的磁盘进行操作。

图.3 fdisk命令分区步骤

对于以上fdisk命令中使用的选项解释如下:

  1. p    显示当前分区信息
  2. n    创建新分区
  3. p    创建新的主分区
  4. 1     为新创建的主分区分配分区编号
  5.       回车以选择2048作为第一扇区
  6.       再次输入回车以确定将整块磁盘划入该分区
  7. p    显示当前分区信息
  8. t     输入”8e”将新建分区类型设置为LVM
  9. p    在将分区信息写入前再次显示当前分区信息
  10. w    将修改写入磁盘并退出fdisk程序

分区一旦创建完成,可以再次使用fdisk命令显示”/dev/sdb”的信息,示意输出如下:

图.4 显示新建分区信息

最后使用如下命令将新建分区注册到内核中以便系统使用:

# partprobe /dev/sdb1

步骤2、创建物理卷(PV)

方法1:

我们已经创建了分区,再创建PV就变得非常简单,需要注意的是我们在创建PV时要十分小心,确保我们选择用于创建PV的分区是正确的分区,以免造成数据丢失。

# pvcreate /dev/sdb1

图.5 使用pvcreate命令创建物理卷

显示物理卷的简单信息使用pvs命令,如果想要查看物理卷的详细信息,则使用pvdisplay命令。两条命令如果不带使用参数,则会显示全部物理卷信息,当然也可以在命令指定想要显示的物理物理卷,示意如下:

# pvs
# pvdisplay
# pvs /dev/sdb1
# pvdisplay /dev/sdb1

图.6 显示物理卷信息

对于pvdisplay命令的输出,解释如下:

  1. 物理卷名称,也就是我们使用的分区
  2. 物理卷组名,如果该物理卷已经分配到卷组,则此时会显示相应的卷组名
  3. 物理卷的大小
  4. 是否被分配至逻辑卷,现在没有被分配,当然显示为”NO”
  5. PE容量,一旦我们创建VG,这里会显示相对的数值
  6. – 8.当加入VG后会具有相应值
  7. 物理卷的通用唯一标识符UUID

如果现在对于PE还有些迷惑,也不要紧,这部分内容将在步骤3创建VG时涉及。现在只需要了解PE => Physical extend即可。

方法2:

另外一种方法是通过一条命令一次性将多块磁盘创建成PV。需要指出的是,如果磁盘已经分区,那么它的分区就是以1开始,而向主机添加了新的磁盘,那么系统会将磁盘号依照字母顺序增加。

假设我们现在需要将10块10GB的磁盘创建10个PV,就可以按照下面的操作完成。

首先查看一下新增加磁盘的情况:

# fdisk -l | grep /dev/sd

图.7 显示10块10GB磁盘信息

依照之前分区的方法将这10块磁盘分区后,再次查看相关信息:

图.8 显示10块10GB磁盘分区信息

然后使用如下命令次这10块磁盘一同创建PV:

# pvcreate /dev/sd[c-l]1

图.9 将一组磁盘一同创建PV

通过以上两种方法,我们就可以顺利的完成创建PV的工作。

步骤3、创建卷组(VG)

卷组顾名思义当然是由PV组成的组,可以理解成由一个或多个PV组的共享存储池。举例来说,假如我们有10个容量为1TB的PV,而将这10个PV组成一个卷组,那么就会得到一个容量为10TB的卷组。

在对卷组有一个深入了解前,我们首先要明确什么是物理扩展(PE)。扩展是每个物理卷数据块的大小,相当于VG容量的计算单位。默认情况下每个扩展块大小为4MB,当然这个数值可以从8kB到16GB自行设置,如果需要修改这个数值的话,则在创建VG时使用”-s”参数指定其大小。

例如,现有一个名为”vg01″的卷组,其中只包含了一个容量为20GB的PV,那要如何估算其中包含了多少个PE呢?当然这个工作可以通过vgs命令来显示,我们也可以通过计算”VG总容量/4MB”的方式来加以验证。例如上面的20GB的VG,则通过下面的计算公式来估算PE的数量:

(1GB) 1024 X 20 (GB) = 20480 ( 20 GB) / 4 (MB) = 5120 PE.

通过计算可得一个20GB的VG包含5120个PE。下面就创建VG并通过vgs命令来检验我们的计算结果是否正确。

创建一个名为”vg01″的卷组,使用默认PE大小,包含”/dev/sda1″的物理卷。创建完成后使用vgsvgdisplay命令来显示相关信息。

# vgcreate vg01 /dev/sdb1
# vgs
# vgdisplay vg01

图.10 使用物理卷创建卷组

对于vgdisplay命令的解释如下:

  1. 卷组名称,此处为vg01
  2. LVM类型,此处为LVM2
  3. VG的访问类型,此处为可读/可写
  4. VG的状态,此处为可调整容量
  5. 目前VG包含的PV数量,此处为1
  6. 目前VG中激活的PV数量,此处为1
  7. VG总容量,此处为20GB
  8. 单一PE的容量,此处为4MB
  9. PE总数量,此处为5119
  10. 已经分配使用的PE数量及分配为容量,此处为0/0
  11. VG中剩余的PE数量及剩余容量,此处为5119/20GB
  12. VG的UUID值

现在,如果再使用pvdisplay命令,就会发现在步骤2中对应的VG和PE信息已经生成了。

刚刚我们使用的是默认大小创建PE,现在演示如何使用自定义PE的容量为32MB来创建VG。

# vgcreate -s 32 vg01 /dev/sdb1
# vgs
# vgdisplay vg01
//1024 x 20 = 20480 / 32 = 640 PE.

图.11 使用自定义PE大小创建VG

以上都是使用单一PV创建的VG,这显然同VG的名字有出入,多块PV组成的VG才是真正意义上的卷组。现在我们将创建一个名为”vg02″的卷组,PE容量为8MB,由之前的10个PV组成,命令如下:

# vgcreate -s 8 vg02 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1

当然,同样也有比较省事的命令写法:

# vgcreate -s 8 vg02 /dev/sd[c-l]1
# vgs
# vgdisplay vg02

图.12 创建多PV的VG

多VG的vgdisplay命令信息解释如下:

  1. 卷组名称,此处为vg02
  2. 目前VG包含的PV数量,此处为10
  3. 目前VG中激活的PV数量,此处为10
  4. VG总容量,此处为99.92GB
  5. 单一PE的容量,此处为8MB
  6. PE总数量,此处为12790(100GB/8MB)
  7. 已经分配使用的PE数量及分配为容量,此处为0/0
  8. VG中剩余的PE数量及剩余容量,此处为12790/99.92GB
  9. vg02的UUID值

步骤4、创建逻辑卷(LV)

逻辑卷(LV)只能在VG中创建,如果VG中没有足够的空间,那么就不能创建LV。

下面我们采用两种方法来创建逻辑卷,如果在命令中指定LV的大小,使用”-L”参数;如果指定LV中包含PE的数量,则使用”-l”参数。

首先,我们在”vg01″卷组中创建一个容量为5GB,名为”data”的逻辑卷,并使用”-L”参数指定卷的大小,命令如下:

# lvcreate -n data -L 5G vg01
# lvs
# lvdisplay /dev/mapper/vg01-data

使用”lvcreate”命令时,”-L”参数支持K 代表KB, M 代表MB, G 代表GB以及T 代表TB等容量,在创建LV前最好先查看一下VG的容量确保有足够的空间。

图.13 使用GB容量创建LV

对于lvcreate命令解释如下:

  • lvcreate    创建LV命令
  • -n              设置LV名称参数
  • data           LV的名称
  • -L               指定LV使用标准容量表示 (K, M, G, T)
  • 5G              设置LV的容量为5GB
  • vg01          指定创建LV时使用的VG

现在使用”-l”参数来创建LV,我们将在”vg01″中创建一个名为”backup”的LV,容量为160个PE。由于之前创建的”vg01″单PE容量为32MB,那么160个PE的容量应为5GB。

32 (MB/PE) X 160 PE  = 5120 (MB) = 5 (GB)

使用”-l”参数的命令如下:

# lvcreate -l 160 -n backup vg01
# lvs
# lvdisplay /dev/mapper/vg01-backup

图.14 使用PE数量创建LV

同样,对于lvcreate命令解释如下:

  • -n              设置LV名称参数
  • backup     LV的名称
  • -l               指定LV使用PE数量
  • 160           设置LV的容量为160个PE
  • vg01          指定创建LV时使用的VG

对于”backup”逻辑卷的信息,解释如下:

  1. LV的详细路径
  2. LV名称
  3. LV使用的VG
  4. LV分配的UUID
  5. LV读写状态
  6. LV容量
  7. LV占用的PE数量
  8. LV使用的块设备(/dev/sdb)

只需要知道查看块设备信息的命令为:

# lsblk /dev/sdb

图.15 查看映射到LV的块信息

至此,我们就成功创建了两个逻辑磁盘卷”data”和”backup”,之后要做的工作就是将磁盘卷创建文件系统并挂载到某个挂载点,达到系统可以使用LV的目的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注