磁盘在经过分区后,如果想分区的大小会非常困难。但是分区挂载使用后,随着存储文件的不断增多,可使用的空间会越来越小。此时,也无法扩大该分区的大小。因此,通常情况下只能在分区的时候预先估计每个分区后期的容量,从而一次性地划分足够的磁盘空间来最大限度地延迟这个情况的发生。但是,这种方式依然是治标不治本而已。因为预估的未必准确,如果预估的值较小,依然会出现空间不足的情况;如果预估的值较多,则会造成内存资源的浪费。因此,为了更好地使用磁盘空间,提高系统空间的可扩展性,此时就需要使用逻辑卷。
什么是逻辑卷
逻辑卷就是使用逻辑卷组管理(Logic Volume Manager)功能创建出来的一种抽象的设备,是能够被Linux操作系统识别的设备。
下面来介绍几个概念。
- 物理卷(Physical Volume, PV):也就是物理磁盘分区,比如说/dev/sdb1。如果要想使用LVM来管理这个物理卷,可使用fdisk工具将其ID改为LVM可以识别的值(也就是8e)。
- 卷组(Volume Group, VG):也就是若干个PV的集合。
- 逻辑卷(Logic Volume, LV):也就是从VG中划出来的一块逻辑磁盘。
它们之间的关系如下图所示:
如何制作逻辑卷
首先给出制作物理卷的流程图:
下面开始介绍详细的步骤。
- 创建物理卷
这里继续使用虚拟机来演示逻辑卷的创建过程,首先为虚拟机创建一个大小为1GB的磁盘,添加成功后启动虚拟机,可以发现多了一个/dev/sdc设备。如下图所示:
接着将/dev/sdc分成3个区,即/dev/sdc1(300MB)、/dev/sdc2(300MB)、/dev/sdc3(剩余所有空间)。
首先是分区1:
接着是分区2:
最后则是分区3:
分区创建完之后,使用fdisk -l确认一下分区是否确实创建成功了。查看结果如下所示:
不过,此时各个分区的ID值都是是83,因此还需要更改ID值为8e,来表明该分区是一个特殊的用于逻辑卷管理的分区。
首先修改第一个分区:
接着是第二个分区:
接着是最后一个分区:
修改完毕后再次使用fdisk -l查看结果如下所示:
也就是说,经过上面的步骤之后,/dev/sdc1、/dev/sdc2、/dev/sdc3就具备了成为PV的条件,下面使用命令pvcreate将分区/dev/sdc1、/dev/sdc2创建为PV,执行的命令如下所示:
[root@localhost ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# pvcreate /dev/sdc2
Physical volume "/dev/sdc2" successfully created.
完成后执行pvscan命令查看系统所有的物理卷。如下图所示:
虽然使用pvscan命令可以查看系统中的PV信息,但是显示的内容比较简洁,因此可以使用pvdisplay命令来显示更详细的使用状态,执行pvdisplay命令之后如下图所示:
- 创建卷组
在创建物理卷后就可以着手卷组的创建。这里使用/dev/sdc1、/dev/sdc2这两个物理卷来创建一个名为VG1的卷组,使用到的命令如下所示:
vgcreate VG1 /dev/sdc1 /dev/sdc2
执行结果如下所示:
接着使用vgscan命令来搜索当前系统上的所有卷组,当然也可使用vgdisplay可以看到更详细的信息:
从上面结果可知VG1大小为592.00M,基本上与/dev/sdc1和/dev/sdc2这两个物理卷的大小之和相等,存在误差是因为在分区和制作物理卷、卷组的过程中会消耗一部分磁盘空间)。
- 扩展卷组
假如在使用过程中发现VG1的容量不足时,可以使用vgextend命令来对VG1的容量进行扩容,比如将之前创建的/dev/sdc3的分区加入VG1中。
首先使用如下命令将/dev/sdc3制作成物理卷:
pvcreate /dev/sdc3
执行结果如下所示:
接着执行如下命令来将/dev/sdc3加入到VG1中:
vgextend VG1 /dev/sdc3
执行结果如下所示:
接着再次使用vgdisplay查看,结果如下所示:
从结果来看,卷组VG1的容量成功获得了增加。
- 创建逻辑卷
当创建好卷组(VG1)后,就可以着手进行逻辑卷的创建。创建逻辑卷用到的命令是lvcreate,在创建逻辑卷的时候需要对逻辑卷的大小、名称,以及该逻辑卷使用的是哪个卷组的空间等信息进行定义。其中,-L指定逻辑卷的大小,后面的SIZE表示具体的逻辑卷大小的值,比如说100MB,-n为指定逻辑卷的名字,最后的参数VG1是指定从什么卷组中分配空间
下面创建一个大小为100MB的逻辑卷,命名为LV1,所用空间从VG1中划分。对应的命令如下所示:
lvcreate -L 100M -n LV1 VG1
执行结果如下所示:
接着使用lvdisplay来查看对应的信息,如下所示:
- 扩展逻辑卷
当逻辑卷的容量不足时,就需要对逻辑卷的容量进行扩展,扩展使用到的命令为lvextend,比如将LV1从100M扩展到200M,使用到的命令如下所示:
lvextend -L +100M /dev/VG1/LV1
执行该命令后,使用lvdisplay查看:
但是,使用df -h命令查看结果如下所示:
从结果来看,似乎没有扩展成功。其实根本原因在于文件系统没有进行更新。更新文件系统的命令如下所示:
# ext3、ext4更新文件系统的命令
resize2fs /dev/mapper/VG1-LV1
# xfs更新文件系统的命令
xfs_growfa /dev/mapper/VG1_LV1
执行后再次使用df -h来查看,结果如下所示:
- 创建文件系统并挂载
现在我们已经成功创建了一个逻辑卷,但是目前还无法进行使用。与使用物理分区类似,逻辑卷也需要创建对应的文件系统并进行挂载后才能使用。在对逻辑卷进行创建文件系统的时候,其全路径为:/dev/卷组名/逻辑卷名,比如:/dev/VG1/LV1
首先执行如下命令来创建对应的文件系统:
mkfs.ext3 /dev/VG1/LV1
执行之后结果如下所示:
接着是创建挂载点,本例子是在/root/newLV下,执行之后如下所示:
最后使用mount命令进行挂载,使用到的命令如下所示:
mount /dev/VG1/LV1 newLV
接着使用df -h|grep VG1来查看,结果如下所示:
当然,我们还可以使用如下命令来配置系统启动后自动进行挂载:
echo "/dev/VG1/LV1 /root/dev defaults 0 0" >> /etc/fstab
到此,关于Linux中逻辑卷组就已经介绍完毕,希望对大家有所帮助。