LVM逻辑卷管理器详解

一、LVM简介

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、 'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。

如图所示LVM模型:

blob.png

1、逻辑卷管理布局

  逻辑卷管理的核心是它如何处理安装在系统上的硬盘分区。在逻辑卷管理的世界里,硬盘称作物理卷(Physical Volume,PV)。每个物理卷都会映射到硬盘上创建的某一物理分区。

  多个物理卷元素集中在一起可以组成一个卷组(Volume Group,VG)。逻辑卷管理系统会把卷组当做物理硬盘一样对待,但事实上卷组可能是由分布在多个物理硬盘上的多个物理分区组成的。卷组

提供了一个创建逻辑分区的平台,而这些逻辑分区事实上包含了文件系统。

  整个结构中的最后一层是逻辑卷(Logical Volume,LV)。逻辑卷为了Linux提供了创建文件系统的分区环境,作用类似于到目前为止我们一直在探讨的Linux中的物理硬盘。Linux系统将逻辑卷当

做物理分区对待。你可以使用任意一种标准Linux文件系统来做格式化逻辑卷,然后再将它在某个挂载点添加进Linux虚拟目录中。

2、Linux中的LVM

  Linux LVM是由Heinz Mauelshagen开发的,与1998年发布到Linux社区。它允许你在Linux上用简单的命令行命令管理一个完整的逻辑卷管理环境。

  Linux LVM有两个可用的版本。

   LVM1:最初的LVM包于1998年发布,只在Linux内核2.4版本上可用。它仅提供了基本的逻辑卷管理功能。

   LVM2:LVM的更新版本,在Linux内核2.6中才可用。它在标准的LVM功能外提供了额外的功能。

  大部分采用2.6内核版本的现代Linux发行版都提供对LVM2的支持。除了标准的逻辑卷管理功能外,LVM2为你提供了一些其他的在Linux系统上好用的功能。

   <1>快照

       最早的Linux LVM允许你将一个已有的逻辑卷在逻辑卷在线的状态下复制到另一个设备。这个功能称作快照(snapshot)。快照功能对备份由于高可靠性需求而无法锁定的重要数据来说非常

好。传统的备份方法在将分拣复制到备份媒体上时通常要将文件锁定。快照允许你在复制的同时继续运行关键任务的web服务器或数据库服务器。遗憾的是,LVM1只允许你创建只读快照。一旦创建快照,

你就不能在写入东西了。

       LVM2允许你创建在线逻辑卷的可读写快照。有了可读写的快照,你就可以删除原先的逻辑卷然后将快照作为替代挂载上。这个功能对快速故障转移或要修改数据的程序试验(一旦失败,就要

重启系统)非常有用。

   <2>条带化

       LVM2提供的另一个有意思的功能是条带化(striping)。有了条带化,可跨多个物理硬盘创建一个逻辑卷。当LinuxLVM将文件写入逻辑卷时,文件中的数据块会被分散到多个硬盘上。每个后

继数据块会被写到下一个硬盘上。

       条带化有助于提供硬盘的性能,因为Linux可以将一个文件的多个数据块同时写入多个硬盘,而不是必须等待单个硬盘移动读写磁头到多个不同位置。这个改进同样适用于读取顺序访问的文件,

因为LVM可同时从多个硬盘读取数据。

   <3>镜像

       通过LVM安装文件系统并不意味着文件系统就不会出问题。和物理分区一样,LVM逻辑卷也容易受到断电和硬盘崩溃的影响。一旦文件系统损坏了,就总有可能无法恢复它。

       LVM快照过程提供了一些便利,知道你可以在人和我时间创建一个逻辑卷的备份副本,但对有些环境来说可能不够。有很多数据改变的系统,比如数据库服务器,自上次快照可能要存储数百或

数千条记录。

       这个问题的一个解决办法就是LVM镜像。镜像是一个实时更新的逻辑卷的一份完整副本。当你创建镜像逻辑卷时,LVM会将原始逻辑卷同步到镜像副本中。根据原始逻辑卷的大小,这可能需要一

些时间才能完成。

       一旦原始同步完成了,LVM会为文件系统的每次写过程进行两次些过程——一个写到主逻辑卷,一个写到镜像副本。如你能猜到的,这个过程会降低系统的写入性能。然而,如果原始逻辑卷因

为某些原因损坏了,你就可以在手头有一个完整的最新副本了。

二、使用Linux LVM

1、新增硬盘sdb

   手动在虚拟机上添加一个20G的硬盘。添加完后,使用如下命令可以扫描内核识别添加的硬盘:

blob.png

2、定义物理卷

   这个过程的第一步就是将硬盘上的物理分区转换成Linux LVM使用的物理卷区段。我们的朋友fdisk命令在这里可以帮我们。在创建了基本的Linux分区之后,你需要通过t命令改变分区类型:

[root@centos6 ~]# fdisk /dev/sdb     #对新增的硬盘"sdb"分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x5c191617.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n      #新增一个新分区 
Command action
   e   extended
   p   primary partition (1-4)
p     #新增的分区选择为主分区
Partition number (1-4): 1     #默认为主分区编号为1
First cylinder (1-2610, default 1):      #直接回车键默认起始柱面为1
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G       #给新增的分区分配10G的容量

Command (m for help): T     #选择分区的类型
Selected partition 1
Hex code (type L to list codes): 8E     #选择分区类型为8e(Linux LVM)
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w     #分区完毕,保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

blob.png

3、创建物理卷

   8e分布分区类型表示这个分区将会被用作Linux LVM系统的一部分,而不是一个直接的文件系统。pvcreate命令定义为pv定义了使用的物理卷。它简单地将分区标记成Linux LVM系统中的物理卷,

你可以用pvdisplay命令来显示已创建的物理卷列表,如果你想看看你在这个过程中的进度的话。

blob.png

blob.png

blob.png

4、创建PV卷及移除PV卷

   从物理卷中创建一个或多个卷组。没有固定的规则说一定要为你的系统创建多个卷组,你可以将所有的可用物理卷加到一个卷组,或者你组合不同的物理卷创建多个卷组。要从命令行创建卷组,

你需要使用vgcreate命令。vgcreate命令

   创建VG卷

blob.png

   移除PV卷:

blob.png

5、创建VG卷以及扩展及移除VG卷

   创建VG卷

blob.png

   扩展VG卷,在磁盘"sdb"中再次分区一个主分区"sdb2",并创建为PV卷,最后加入到VG卷"myvg"中

blob.png

blob.png

   移除某部分VG卷,需查看移除的PV卷是否有数据,在移除

blob.png

6、创建逻辑卷使用以及扩展、缩减、及移除

   创建逻辑卷"mylv"

blob.png

blob.png

   逻辑卷格式化后挂载使用

blob.png

   扩展逻辑卷"mylv",将PV卷"sdb1"创建成VG卷后并加入到"myvg"卷中,并加入逻辑卷"mylv"中

blob.png

   空闲VSize为15G,实际挂载的大小为5G,现在需要先扩展物理边界,之后再扩展逻辑边界

blob.png

   缩减逻辑卷"mylv",需要先卸载挂载,之后缩减逻辑边界在缩减物理边界(实际生产环境中不建议缩减)

blob.png

   移除逻辑卷"mylv",先取消挂载,后移除(数据有风险、操作需谨慎)

blob.png

三、LVM( Logical Volume Manager)总结

   Linux系统和windos的不同之处在于它支持大量不同的存储文件和目录方法。每个文件系统方法都有不同的特征,使得它适用于不同的情况。同时,每个文件系统方法都采用与存储设备

交互的不同命令。

   在将文件系统安装到存储设备之前,必须首先准备这个设备。fdisk命令用来将存储设备分区以使它们为文件系统准备好。在分区存储设备时,必须定义在上面使用寿命类型的文件系统。

   在完成存储设备分区后,你可以用该分区使用几种不同文件系统中的一种,最流行的Linux文件系统是ext3和ext4.这两个文件系统都提供了日志文件系统功能,使得它们在Linux系统崩

溃时较少的遇到错误问题。

   在存储设备分区上直接创建文件系统的一个限制因素是,如果硬盘空间用完了,你不能轻易的改变文件系统的大小。但Linux支持逻辑卷管理,一种跨多个存储设备创建虚拟分区的方法。

这种方法允许你轻松的扩展一个已有文件系统,而不用完全重新构建。Linux LVM包提供了跨多个存储设备创建逻辑卷的命令行命令。

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

(0)
AleenAleen
上一篇 2016-09-05 11:00
下一篇 2016-09-05 16:36

相关推荐

  • Zabbix通过邮件报警

                    Zabbix通过邮件报警 前言 本篇文章转自我的个人博客 http://anyisalin.com 欢迎大家访问 这次的内容大部分都是操作, 但是大家需要对定…

    2016-05-13
  • 千万不要把 bool 设计成函数参数

    我们有很多Coding Style 或 代码规范。但这一条可能会经常被我们所遗忘,就是我们经常会在函数的参数里使用bool参数,这会大大地降低代码的可读性。不信?我们先来看看下面的代码。 当你读到下面的代码,你会觉得这个代码是什么意思? widget->repaint(false); 是不要repaint吗?还是别的什么意思?看了文档后,我们才知道这个…

    Linux干货 2016-07-10
  • rpm包管理、yum仓库、ftp、http服务、编译安装

    一、软件包管理 1.1 软件包管理 API:Application Programming Interface  应用程序开发接口;程序员面对的编程接口 POSIX:portable operating system:可移植操作系统接口 v   程序源代码 –> 预处理 …

    Linux干货 2016-11-27
  • 域名解析服务(DNS)之bind

    DNS简介 DNS是Domain Name System的简称,DNS的主要作用就是讲主机名解析成ip地址的过程,因为在计算机网络当中是通过ip地址来进行主机间通信的,ipv4的地址是32位,人类记忆起来十分困难,更何况ipv6的128位,所以我们需要一个简单容易记忆的字符串来替换ip地址,当我们访问www.baidu.com它能知道访问的是某个ip地址的服…

    Linux干货 2016-10-09
  • 一起学DNS系列(十四)DNS查询工具之DIG的使用(2)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jeffyyko.blog.51cto.com/28563/240243    上节谈到了利用DIG的+trace参数追踪域名解析的过程,其实除此之外,DIG还有一些其他的参数,这节会涉及到这…

    2015-03-17
  • 如何在linux系统上获取命令的帮助信息,man文档的章节划分

    内置命令获取帮助文档的方式:   判断一个命令是否是Linux内置的,可以用type命令,只有Linux的内置命令才能使用 help 命令获得帮助。 type cd 输出:cd is a shell builtin 说明这个命令是系统自带的内置命令,那么就可以使用 help命令来获取帮助。 help 命令名 外部命令获取帮助文档的方式: 第一种办法是使用 &…

    Linux干货 2016-10-31