一:认识

   逻辑卷,很多人会认为就是LVM(Logical Volume Manager),但其实LVM只是逻辑卷的一个管理程序,真正实现底层逻辑卷的功能的则是工作在内核中的DM。

   下面先来说说逻辑卷的原理。逻辑卷是由一系列虚拟磁盘组成的卷组,通常也可以称作逻辑分区。它的特点就是可以动态的扩展和缩减,使得分区不再有大小限制。这样一来,妈妈就真的再也不用担心我分区不够用啦,也不用因为刚装系统的时候为每个分区的大小而纠结了。

   刚才说过,实现这种功能的,是工作在内核中的DM程序,它是一种驱动。根据DM table,mapping table这样的映射规则,将多个硬盘(包括raid)组成一个大的逻辑设备:meta device。这个逻辑设备就可以实现动态的扩展。

   DM是工作在内核的程序,而LVM则是工作在用户空间的程序。它给用户提供接口,使用户能够通过命令的方式来控制内核中的DM,去创建映射规则。


二:结构

   逻辑卷的实现分为三层:底层的PV,中间层的VG,和上层的LV。

   PV(Physical Volume)是底层的物理磁盘,是真正存储数据的地方。VG(Volume Group)是卷组,它将几块磁盘物理设备组合起来当做软件设备来使用,使得在用户看来这一个卷组就是一个整体,而不关心底层的磁盘状况。在VG上格式化创建文件系统后才能使用的,叫做LV逻辑卷。

今日夜谈--逻辑卷的那点事_逻辑卷

   如上图,PV是物理层面的,VG是内核中DM模块实现的,而LV是在用户空间,用户通过命令来创建的。


三:逻辑卷的创建

   了解了逻辑卷的组成和原理后,大家都会清楚,创建一个逻辑卷,肯定是从创建底层的PV开始的。所以先来创建PV。

   PV的命令有很多,比如pvcreate,pvdisplay,pvs,pvmove,pvremove,pvscan,等等。创建时用到的命令,肯定是pvcreate咯。

   在创建PV之前,先从硬盘划分两块分区用来当做物理卷用:

       fdisk /dev/sda

       选择n,new一个新分区,创建一个大小为5G的分区:+5G;

       同样的操作再创建一个分区;

       在fdisk的交互模式下键入t,选择文件系统类型,我们选择8e。保存退出。

       partprobe /dev/sda使得改变生效。

pvcreate /dev/sda10 /dev/sda11,这句命令就创建了两个pv,可以通过pvdisplay来查看以创建的pv。

   VG的主要命令有:vgcreate,vgck,vgdisplay,vgs,vgreduce,vgextend,vgremove等等。

   VG在创建的时候会将底层的PV分成很多份小块,每个小块叫做PE,VG的颗粒度最小的存储单位是PE。

   创建VG:vgcreate -s 8M(PE大小) myvg(名称) /dev/sda{10,11}

   通过vgdisplay能查看创建vg的状态。


   创建好VG后就可以继续创建最终的LV啦。LV的命令和底层的两位兄弟类似:lvcreate,lvdisplay,lvs,lvreduce,lvextend,lvresize,lvremove。

   创建LV:lvcreate -L(逻辑卷大小) -l(逻辑盘区个数,PE个数) -n (名称)

-p (r,rw权限)

   eg:lvcreate -L 500M -n mydata myvg(指定在哪个vg中创建)

   创建的结果可以用lvdisplay,和lvs来查看。结果发现lv的大小是504M。那是因为刚才说过的,PE是存储的最小单位,而之前指定的PE大小为8M,所以LV的大小一定是PE的整数倍。当然也可以直接指定PE的个数来创建LV。



三:逻辑卷的扩展和缩减

   这样一来逻辑卷的创建就基本结束啦。但是仅仅创建不能体现出逻辑卷的作用。它的最大用处就是可以动态的扩展和缩减了。

   在对逻辑卷进行动态的扩展和缩减之前,先要掌握PV的添加和删除操作.

   添加PV:

       pvcreate /dev/sda12(前提是这个分区事先创建)

       pvextend myvg /dev/sda12 在myvg卷组中添加创建好的/dev/sda12这个PV。

   移除PV:

       pvmove /dev/sda12 先将这个PV中的数据move到其他地方

       vgreduce myvg /dev/sda12 再从VG中删除这个PV

       pvremove /dev/sda12 最后再删除这个PV

   

   以上的操作是在底层对VG卷组进行的动态的改变。下面介绍逻辑卷的扩展和缩减操作。

   lvextend  -l+ 带加号表示增加,不带表示指定数值 -L 指定大小

   eg: lvextend -L 1G /dev/myvg/mydata 指定扩展后的大小为1G,扩展的逻辑卷的是mydata

       lvextend -l+ 500M /dev/myvg/mydata 将mydata这个逻辑卷扩展500M的存储

   扩展物理边界后还得扩展逻辑边界,即文件系统的边界(缩减时相反):

   resize2fs /dev/myvg/mydata 重新定义mydata的大小,不指定大小默认扩展和物理边界一致

   resize2fs /dev/myvg/mydata  1G 指定mydata的大小为1G,这和上面的扩展不一样,是文件系统的边界

   

   缩减LV是风险比较大的做法,建议不要去做,因为可能会导致数据损坏:

   缩减lv:

       1.卸载文件系统 umount

       2.检测文件系统 e2fsck -f /dev/myvg/mydata

       3.缩减逻辑边界 resize2fs /dev/myvg 200M

       4.lvreduce -L 200M  /dev/myvg/mydata


   好了,以上就介绍了逻辑卷的一些基本原理;如果去创建一个逻辑分区和如果扩展和缩减逻辑分区。在我们不想为分区的大小规划而烦恼的时候,可以考虑逻辑分区这样一个很实用而且很好用的一个功能。