一、你了解逻辑卷吗?


   我们在安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确的评估各分区的大小并分配合适的硬盘空间。同样,在Linux操作系统的使用的过程中,也会遇见某个分区空间被耗尽的情况。这时候我们就需要一种机制在使用空间的过程中来有效的动态的扩展分区的空间大小,而redhat公司就给我们提供了这种机制,就是逻辑卷(LVM)的概念。在本文中笔者将通过自己的理解对逻辑卷的原理和使用方法进行相关的叙述。

   我觉得逻辑卷是将多个底层的块设备在更高一个层次上的组合。这样当我们将多个物理磁盘的多个分区组合在一起的时候,我们就可以看见一个统一的,融为一体的,容量更大的逻辑设备。再通过之前学习的磁盘管理的相关知识,我们就可以对这个逻辑设备进行分区、格式化并挂载到相应的目录。说到这里,有的同学就该提出疑问了,既然如此为什么我们不直接在物理硬盘上划分一个大一点的物理分区,这样不也能提供一个更大容量的设备吗?

   这也是我今天要讲的问题。即逻辑卷核心价值的体现逻辑卷不仅仅能够提供一个容量更大的空间,而且可以根据用户的需要进行相应的扩展和缩减。这样,当某个用户空间不够时,我们可以随时的往这个逻辑卷中添加磁盘;当用户不需要时,我们就可以把这块磁盘空间分配给其它的用户。这就使我们的磁盘得到了更高效的利用,同时,也解决了笔者在文章开篇时所提出的疑问。逻辑卷还有一个重要的功能,就是对我们存储的数据进行快照。mysql的备份中,这也是一种高效的安全的解决方案,我将在后续的博文中对如何利用逻辑卷进行mysql数据库的备份进行详细的讲解。下面我们来看一下逻辑卷的基本组成。


二、LVM的三种组织元素


卷:物理卷(PV),卷组(VG)和逻辑卷(LV)

区段:物理块和物理盘区(PE)

设备映射器(Device mapper)Linux内核模块

1.卷:

   在Linux LVM中,卷被组织为三种,即上面我们提到的物理卷(PV)、卷组(VG)和逻辑卷(LV)物理卷是真实的物理磁盘或物理磁盘分区(如 /dev/sda /dev/sda1等);卷组是物理卷的集合,卷组可以在逻辑上划分成多个逻辑卷;逻辑卷就相当于分区,可以进行相应的格式化并进行挂载。下面我将以一个实例来介绍逻辑卷的创建过程。

示例1分别在/dev/sdb/dev/sdc上添加210G的物理分区,并转换成物理卷并把它们添加到卷组MYVG中,再在卷组中创建一个大小为10G的逻辑卷MYLV

130906154.png

2.区段:

   在使LVM默认的 PE 大小是 4MB,在大多数情况下这个数值都不需要修改因为区段的大小并不影响 I/O性能。但是,区段数量太多会降低 LVM 工具的效率,所以可以使用比较大的区段,从而降低区段数量。但是注意,在一个 VG 中不能混用不同的区段大小,而且用LVM 修改区段大小是一种不安全的操作,会破坏数据。所以建议在初始设置时选择一个区段大小,以后不再修改。不同的区段大小意味着不同的 VG 粒度。例如,如果选择的区段大小是 4GB,那么只能以 4GB的整数倍缩小或扩展 LV。

   物理块即Block-size是指在分区格式化过程中指定的块大小单位是字节,有效值为1024、2048和4096字节/块。可以使用mke2fs命令在使用的过程中进行相关的设置。

示例2在创建物理卷额过程中,指定PE的大小为8M,并在格式化的过程中,指定物理块的大小为4096字节。并挂载到目录/mydata下。

131058677.png

3.设备映射器:

   设备映射器(也称为 dm_mod)是一个 Linux 内核模块(也可以是内置的),最早出现在 2.6.9 内核中。它的作用是对设备进行映射,LVM 的必须使用这个模块才能实现相关的管理功能。

   在使用LVM的过程中,需要提前加载该模块。在RHEL6的系统中,内核默认在启动的过程中已经对该模块进行了加载。dm_mod 不仅能够提供设备映射的功能,也提供了部分RAID(磁盘阵列)的功能,只是我们不常用。通常我们使用软RAID都使用dm_mod模块提供的功能实现,这将在后续的博文中继续进行讲解。

 在上面示例中创建的LVM,其实我们可以通过另一种途径进行访问。如下所示:

131220902.png


三、你的系统运行LVM了吗???


   我相信通过上面的讲解,博友们已经对LVM的概念和基本的使用有了一个较为详细的了解。下面我再向大家介绍一些LVM的高级应用,例如:逻辑卷的扩展、缩减及快照的创建等。这也是LVM的核心。

1.逻辑卷的扩展:

   通过笔者的操作和理解我觉得逻辑卷的扩展还是比较容易实现的,但是对于初学者来说应该还是有一定的难度的。既然要扩展,首先应该从物理磁盘上进行扩展这样之后进行逻辑空间扩展的时候才能够实现。我总结扩展逻辑卷的主要步骤和过程如下:

1.确定当前逻辑卷所在的卷组有足够的空间。如果不够,可以使用pvcreate新创建一块物理卷,同时使用vgextend命令将该物理卷加到卷组MYVG中,用法同示例1中的创建命令,我在这里就不在演示。

2.使用lvextend命令对物理边界进行扩展

3.使用resize2fs命令对逻辑边界进行扩展

4.上面的过程可以不对逻辑卷进行卸载而直接进行操作。

示例3将示例1中创建的逻辑卷MYLV进行扩展,使得扩展后逻辑卷的大小为15G.

131350708.png

2.逻辑卷的缩减:

   在笔者的学习过程中,感觉逻辑卷的缩减难度还是比较大的。如果操作的过程一时不慎就会导致逻辑卷上的数据彻底的丢失。与扩展不同的是,在缩减的过程中首先应该从逻辑空间上进行缩减,再在物理边界上缩减,这样才能够成功实现。根据我的经验,总结出逻辑卷的缩减过程如下:

1.确定逻辑卷上的数据不会超过缩减后的空间大小。

2.在缩减的过程中需要先对逻辑卷进行卸载。

3.与逻辑卷扩展不同的是,在缩减的过程中需要先使用e2fsck命令对文件系统进行检测。

4.利用resize2fs命令在逻辑上对逻辑卷的空间大小进行缩减。

5.利用lereduce命令在物理上缩减逻辑卷的边界。

示例4将示例3上扩展之后的逻辑卷MYLV缩减到8G,然后查看缩减之后的效果。

131506289.png


完成了逻辑卷的扩展和缩减,下面我们来介绍逻辑卷的另外一个核心的功能:


四、如何利用逻辑卷来对数据进行快照和备份?


LVM提供一种被称为快照(snapshot)的功能,它能够在系统运行的某一时刻对逻辑卷进行一个“拍摄”。该拍摄过程能够保留逻辑卷中所有文件的状态,同时该快照还提供一个通道可以用来访问逻辑卷。这样以后,当逻辑卷中的数据被修改时,快照卷只会将被修改的数据的原文件复制过来进行保存。因此,快照卷的大小不用跟逻辑卷一样大,大家可以根据自己的数据流量大小自行的设置快照卷的大小。

快照优点:

1.快照的创建的过程非常快,不需要停止生产环境。

2.快照产生的快照卷提供访问原数据的通道,保存的只是修改的数据文件的原文件。所以大小可以根据自己的生产环境进行自行设定。

示例5对示例48G的逻辑卷MYLV创建一个100M的快照MYLV-SHOT,并以只读的方式进行挂载。

131626831.png

   当然在逻辑卷的管理中还有一些其它的命令和操作,笔者这里就不详细叙述了,大家可以通过 man page进行查看。如果大家有什么疑问也可以和我交流。笔者还是相信如果大家大家能够对自己所学的知识进行总结,收获还是相当大的。以前笔者只对LVM的操作很熟悉,对原理也只是一知半解,通过本篇博文,让我深深的体会到逻辑卷管理中各种操作运行的原理,同时相关的知识体系在我的大脑中也越来越明显。以上就是笔者在学习逻辑卷管理中的一些理解和感悟,特拿来与大家分享。笔者会一如既往的坚持写博客,也希望得到大家的支持和认可。


声明:本篇博文上的所有操作都是在RHEL6.4上实现的。由笔者本人亲自实践过。