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  给卷组、逻辑卷扩容

 

  总结

  分区相关的基础就说到这里吧,这里是入门,比较浅显的,深入里面还有很多细节,总之,系统安装前,一定要做好磁盘分区的规划,否则后续很麻烦。

 

posted @ 2024-12-07 18:24  没有星星的夏季  阅读(56)  评论(0编辑  收藏  举报