Linux硬盘挂载与磁盘分区基础(二)(物理卷、卷组、逻辑卷)
上篇介绍了分区,都是建立在硬盘的基础之上,但是问题出现了,硬盘的空间是固定的,一般的,无论我们的电脑还是服务器,都可以容纳多块硬盘,甚至还可以使用USB等接口接入额外的存储,这样,如果都是用单个硬盘的分区来管理,比如扩容,非常不方便,有没有办法把多个硬盘视为一个整理,当做一块硬盘来管理分区呢?这就是本篇说下物理卷、卷组、逻辑卷,也就是LVM(逻辑卷管理)。
现简单说说基本概念:
物理卷(Physical Volume):从理解上说,无论是硬盘还是分区等,都是存储的容器,但是他们不是一类,所以我们需要一个统一,这就是物理卷,所以当你看到物理卷这个概念的时候,你可以把它就理解成存储空间即可,至于是什么不重要。
卷组(Volume Group):有了多个物理卷,我们将他们组合成一个整体,它就是卷组,我们可以把卷组视为一块逻辑上的硬盘。
逻辑卷(Logical Volume):有了卷组这个逻辑硬盘,就可以对它进行分区挂载使用了,这个分区就是逻辑卷。
所以,LVM的过程是这样的:对每个硬盘或者分区创建物理卷,多个物理卷组成卷组,对卷组进行分区就有了逻辑卷,将逻辑卷格式化挂载使用。
用图来说明:
下面我们开始演示:
首先,我们这里有两块硬盘:/dev/sdb
和/dev/sdc
可以看到,他们都是10G,如果但使用硬盘的分区,我们无法创建一个15G空间的分区系统,但是使用逻辑卷却可以,下面我们一步步演示。
创建物理卷
为了得到15G的空间,我们可以对两块硬盘直接创建物理卷,但是方便演示,我们这边这么做:
1、对/dev/sdb直接创建物理卷,也就是10G
2、对/dev/sdc创建一个5G的分区/dev/sdc1,然后将分区做成物理卷,也就是5G
3、对于/dev/sdb剩余空间,我们创建分区/dev/sdc2,后续可以用来扩容
对/dev/sdb
直接创建物理卷,执行命令:sudo pvcreate /dev/sdb
对/dev/sdc
创建两个5G的分区,这里我直接使用fdisk
来创建(创建过程参考上一篇),执行:sudo fdisk /dev/sdc
注:我这里采用的是fdisk
来分区,如果采用parted
来分区,这个备注可以跳过:
使用fdisk创建了分区,建议将分区类型改成Linux LVM,虽然不修改也没问题,但是可以方便后续管理,否则哪天接手的同学没注意,对分区进行了一些危险操作就尴尬了。
修改分区类型操作过程如下图:
注:分区创建好了,可能需要重启,或者使用sudo partprobe
更新分区表
接着执行下面两个命令创建物理卷:
sudo pvcreate /dev/sdc1
sudo pvcreate /dev/sdc2
然后我们可以采用pvscan(列出所有的物理卷)或者pvdisplay(打印所有物理卷的基本信息)来查看:
创建卷组
我们对/dev/sdb
和/dev/sdc1
创建卷组,后续将/dev/sdc2
加入卷组进行扩容。
首先,我们介绍一个概念:
物理扩展(Physical Extend,PE):我们将多个物理卷拼在一起,但是他们的大小不一样,所以我们需要有一个统一,就是定义一个基本单元,然后每个物理卷按照这个基本单元来划分有多个,最终决定这个物理卷的大小,而这个基本单元就是PE,默认4M,比如一个101M的分区,可以划分25个PE,那么也就是说可用的空间就是100M了。PE是卷组保存数据的最小单元。注意,PE大小在卷组创建时指定,一定卷组建立,PE大小将不可改变。
我们执行下面的命令创建卷组:
# 如果不指定PE,那么直接执行,vg-test是卷组名称,/dev/sdb和/dev/sdc1是物理卷名
sudo vgcreate test-vg /dev/sdb /dev/sdc1
# 如果要指定PE,可以使用-s参数,例如:
sudo vgcreate -s 8M test-vg /dev/sdb /dev/sdc1
创建完成,我们可以使用sudo vgscan
列出所有的卷组
或者通过sudo vgdisplay test-vg
来查看卷组信息
创建逻辑卷
首先,这里也有个概念:
逻辑拓展(Logical Extend,LE):它类似于卷组的PE,只不过它是逻辑卷分配的最小单元,在同一卷组中,它决定于卷组的PE,且每个LE与卷组中的一个PE对应,大小相同。
有了卷组,我们可以创建逻辑卷:
# 通过指定PE个数来创建,使用-l参数指定PE个数,推荐使用这个方式
sudo lvcreate -l 3838 -n test-vg-test-lv test-vg
# 通过指定大小来创建,使用-L参数指定逻辑卷的大小,单位为:kKmMgGtT
sudo lvcreate -L 15G -n test-vg-test-lv test-vg
上面两种方式推荐采用指定PE个数的方式,因为更直观,只需换算一下就好了,采用其它方式指定最终也是转换为PE个数的方式。
创建之后,我们可以采用sudo lvscan
查看
或者使用sudo lvdisplay /dev/test-vg/test-vg-test-lv
直接打印逻辑卷的基本信息,注意逻辑卷的名称:
挂载
到这里,逻辑卷就创建完成了,我们现在可以挂载使用
# 创建挂载目录
sudo mkdir /mnt/test
# 格式化
sudo mkfs.xfs /dev/test-vg/test-vg-test-lv
# 挂载
sudo mount /dev/test-vg/test-vg-test-lv /mnt/test
接下来就可以正常使用了,我们可以通过df -h
命令查看挂载情况
还可以通过sudo lsblk
命令查看硬盘分区的使用情况
扩容
到这里,我们已经通过将两个10G大小的硬盘,创建出来了15G的文件系统,接着我们继续看看扩容。
首先,我们还有个/dev/sdc2
分区没有使用,前面我们已经对它创建物理卷,接下来我们把它加入到卷组:sudo vgextend test-vg /dev/sdc2
可以看到,空间增加了5G,接着我们可以把这个5G的空间加到我们已经创建的逻辑卷中去。
# 可以使用-l指定PE个数的方式,使用+号,表示增加容量,不使用表示扩容后的大小
sudo lvextend -l +1279 /dev/test-vg/test-vg-test-lv
# 也可以使用-L指定逻辑卷的大小,使用+号,表示增加容量,不使用表示扩容后的大小
sudo lvextend -l +5G /dev/test-vg/test-vg-test-lv
同分区一样,我们现在只是扩容了逻辑卷,想让它可以可用,我们需要调整分区大小,注意,切记格式化,否则数据将会丢失:
# 如果是ext4,使用resize2fs命令,后面参数是分区
sudo resize2fs /dev/test-vg/test-vg-test-lv
# 如果是xfs,使用xfs_growfs命令,后面参数是挂载点
sudo xfs_growfs /dev/test-vg/test-vg-test-lv
基本命令
到这里,物理卷、卷组、逻辑卷相关基础就说完了,这里总结一下命令,每个命令有很多参数,需要自行去尝试:
物理卷 | 卷组 | 逻辑卷 | 说明 |
pvcreate | vgcreate | lvcreate | 创建物理卷、卷组、逻辑卷 |
pvdisplay | vgdisplay | lvdisplay | 打印物理卷、卷组、逻辑卷的基本信息 |
pvremove | vgremove | lvremove | 删除物理卷、卷组、逻辑卷 |
pvscan | vgscan | lvscan | 扫描物理卷、卷组、逻辑卷(只有名称等信息) |
vgextend | lvextend | 给卷组、逻辑卷扩容 |
总结
分区相关的基础就说到这里吧,这里是入门,比较浅显的,深入里面还有很多细节,总之,系统安装前,一定要做好磁盘分区的规划,否则后续很麻烦。