LVM 中文名就是逻辑卷管理器,其好处在于基于 LVM 建立的逻辑分区,可以在不影响分区原有文件的情况下自由调整大小,对于 ext 的分区,可以在分区已挂载的情况下增加分区大小,但要减少分区的大小只能先把分区给 umount 了,才能进行进一步的操作。另外一个好处就是快照功能了,但本文暂时只是介绍一下 LVM 里面的基本概念以及怎么创建基于 LVM 的逻辑分区,快照功能暂且不做讨论了。
先来说说 LVM 的结构,LVM 可以看成是由 Physical Volume(PV)、Volume Group(VG)、Logical Volume(LV) 三层组成。
PV 译名为物理卷。一个 PV 就对应一个物理分区,我们只要将一个物理分区的系统标识符(system ID)改成 8e,然后就可以把这个物理分区做成一个 PV;
VG 中文名可译为卷组,顾名思义,这是一个包含了多个物理卷(PV)的东西。它的容量是它所包含的 PV 容量的总和。只要一个 PV 没有被其他 VG 所包含,用户就可以将其加入自己所创建的 VG 中,不用考虑诸如 PV 在哪块硬盘上或是在硬盘的什么位置之类的物理限制。从逻辑概念上来讲,这就相当于是一个虚拟的硬盘。可以像对正常硬盘一样对它进行分区、格式化之类的磁盘操作,只是 VG 的分区没有主分区和扩展分区之分;
LV 译名是逻辑卷,顾名思义,与 PV 相反,这是一个逻辑上的概念。对那个虚拟硬盘 VG 进行分区操作得到的一个分区就是一个 LV。LV 可以像一般的分区一样进行格式化、挂载之类的分区操作。例如,可以将一个 LV 格式化成 btrfs 文件系统,然后挂载在 /home 下使用。
由上面的介绍,可以看出,PV 是与物理分区打交道的底层,LV 是与用户交互的顶层,而 VG 则是连接两者的桥梁,同时也正是 VG 的出现使得 PV 和 LV 分离开来各司其职,这也就让我们无需理会底层的物理情形而对顶层的 LV 的大小进行调整成为可能。那么具体的这种调整机制怎么实现的呢?这就要介绍另外一个概念:Physical Extend(PE)。
PE 是整个 LVM 最小的存储块,LVM 默认使用的是 4MB 的 PE 块,如果用这个默认值创建一个 VG,那么 VG 将以 4MB 为单位被切分成多个 PE 块,所以在 VG 上创建的 LV 的大小只能是 4MB 的整数倍。如果分区时你给出的 LV 容量不是 4MB 的整数倍,系统会自动调整到 4MB 的整数倍,然后把和这个倍数相同数量的 PE 块分配给 LV。只要 LV 里面有未写入数据的空的 PE 块,那么就可以把这些 PE 块重新拿出来归还给 VG,从而实现在不影响 LV 里面已经存放的数据前提下将 LV 的容量减少。同样,如果 VG 里面有未被任何 LV 占有的 PE 块,就可以将这些 PE 块分配给想要增加容量的 LV,从而实现 LV 容量的增加。可见 LV 的容量增减不是连续的,是以 PE 为最小单位进行的。
那么是不是只要把 PE 分的足够小,比如一个字节,就可以实现 LV 的容量连续增减了呢??
可以说,的确如此,但是这么做你就要面临另外一个问题,就是无论一个 PE 大小是多少,一个 VG 最多只能容纳 655534 个 PE,因此你如果把 PE 调到一个字节,那么一个 VG 最多只能有约 640KB。所以说 PE 不能太小。如果按照默认的 4M 的话,一个 VG 最大约为 256GB。
另外就是,如果一个 VG 的所有 PE 块都分到各个 LV 里面了,那么还能不能增加 LV 的容量呢?
答案是可以,但是必须先增加 VG 的容量。增加 VG 的容量可以通过新加入一个 PV 到 VG 中来实现。同样的,如果 VG 中存在一个未被任何 LV 占用的 PV,也可以通过将 PV 从 VG 中除掉来减少 VG 的容量。而这个从 VG 中拿出来的 PV 可以重新格式化成其它文件系统以供他用,或者直接删除分区把空间归还给硬盘的未使用空间。
以上就是我对 LVM 的一些理解,由于本人才疏学浅,所以难免有不妥,不足,不正确之处,还请指正。
下面呢,就是讲怎么在装机的时候怎么具体创建 PV、VG、LV 这些东西了,我装机的时候由于没有截图,也没法截图,所以呢我实际的截图都是在装完机后用 YaST 里面的那个磁盘分区管理工具完成的,因为那个工具其实装机时进行分区的那个图形化工具,界面是一样的。
看下面的图,我的 sdb 还有 831G 的未分区空间,我就用这些剩余空间来演示一下吧
点左下角那个“添加”按钮,就出现如下的分区添加页面,如下所示,选那个 0x8E Linux LVM,不用挂载分区,选好后点完成,一个 PV 就创建好了
我用同样的操作再创建一个,如下图所示,sdb3 和 sdb4 两个就是我刚刚创建好的 PV