1、lvm概念
逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的逻辑卷(LogicalVolume)创建新的逻辑设备。底层的原始的磁盘不再由内核直接控制,而由LVM层来控制。对于上层应用来说卷组替代了磁盘块成为数据存储的基本单元。LVM管理着所有物理卷的物理盘区,维持着逻辑盘区和物理盘区之间的映射。LVM逻辑设备向上层应用提供了和物理磁盘相同的功能,如文件系统的创建和数据的访问等。但LVM逻辑设备不受物理约束的限制,逻辑卷不必是连续的空间,它可以跨越许多物理卷,并且可以在任何时候任意的调整大小。相比物理磁盘来说,更易于磁盘空间的管理。
2、为什么要用LVM
每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估 计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。
虽然有很多动态调整磁盘的工具可以使用,例如PartitionMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要 重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解 决问题。
因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。
3、传统分区带来的问题
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变。当一个分区空间已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中。
当采用LVM时:
1、将硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
2、文件系统建立在LVM上,可以跨分区,方便使用;
3、当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。
使用LVM主要是方便管理、增加了系统的扩展性。可以跨分区,多个硬盘组合。
4、LVM实现原理图解及构造
LVM若要成功建立,由以下几部分组成
物理磁盘(PhysicalStorageMedia)
物理磁盘是指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。
物理卷(Physical Volume,PV)
物理卷是指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group,VG)
卷组是指非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。
逻辑卷(Logical Volume,LV)
类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。
5、lvm举例讲解
可能这样说对于小白来说可能不太容易理解,下面举个例子所有吃货都能理解的例子来讲解一下什么是LVM
比如现在有ABCD四个人,A现在有半斤面粉,B现在有半斤水,C现在有1两葱,D现在有1两油(此时这半斤面粉,半斤水,1两葱和1两油就好比上图的4块PV物理卷硬盘),进行不进行lvm操作的话,是操作者说了算,此时该操作者就属于厨师,如果这个厨师嫌麻烦的话,就安排A吃属于他自己的半斤面粉,B就喝属于他自己半斤水,C就吃属于自己的1两葱,D就吃属于自己的一两油,ABCD四个人井水不犯河水。
如果现在ABCD四个人找到了厨师,想把他们的食材进行一下融合,ABCD把属于自己的面,水,油,葱全部给到厨师,厨师根据4个人提供的食材的量给他们融合在一起,帮他们做成一张葱油饼(此时这张葱油饼就好比上图的VG),葱油饼(VG)的大小取决于ABCD提供的食材(PV)的多少,如果提供的量多,就可以做成一张大饼,如果提供的量少,就可以做成一张小饼。
ABCD四个人就等待分配属于自己的葱油饼即可,此时每个人分配到的葱油饼的大小(lv)就是根据每个人的饭量大小来取。
PV是不可改变大小的,VG和LV是可以分配大小的。
VG进行扩大容量操作是所有硬盘都划分了,盘容量不够用了,需要重新添加硬盘,类似于ABCD都是大胃王,不够他们吃的,这时候又打电话叫E来送食材来加原料
VG进行缩减容量是将部分空间变成未分配状态或者给到别的VG,操作类似于ABCD带的食材量太多了,有一块饼还没做,等待下次在做或者将食材再做个酱香饼啥的
LV进行扩大容量操作是一开始给了一个挂载点10个G的空间,但是不够用了,需要将空间扩大到20G,容量索取的话需要在别的挂载点上压缩出来或者直接使用VG未分配的空间,类似于这张饼就这么大,1个人分一张饼,A不够吃,要不去看看还有没有剩下的饼,没有剩下的饼,就得看看BCD谁的饼没吃完,给A一些吃。
LV进行缩减容量操作是一开始给了一个挂载点100个G的空间,但是不够用了,需要将空间缩小到50G,容量压缩出来的话直接变成未分配的空间或者给别的分区,厨师给B一张饼,但是B的饭量小,剩下的饼要不就剩下,谁饿了去盘子里拿,要不就问问ACD,谁不够吃,直接把B吃不下的饼给到ACD。
备注:一个LV的空间只能来自于一个VG,一个LV的空间不允许来自两个VG,功能上实现不了。
换句话说就是不管多少人吃饼,只能吃自己贡献原材料这个组的饼,不能吃别的组的饼,比如ABCD四个人提供的原材料做成了饼,另外一组是做包子,你肯定不能吃人家组里的包