Linux基础篇-逻辑卷管理

首先我们要知道,逻辑卷也来源于物理磁盘,只是将他们统一定义和重新分配空间。这一点非常重要,只有理解了这一定才能更好的理解逻辑卷和卷组。

本文介绍的是最常用的线性卷

什么是线性卷?复杂的定义没必要去看,简单来说就是1+1=2

你有两块磁盘,一块60G,一块30G,他们两块盘组成线性卷,就是60+30=90G

目录

一、定义

物理卷:故名思意,就是实际的磁盘。

卷组:将实际的物理卷按特定的方法组合到一起。

逻辑卷:对卷组的空间进行划分,形成新的分区。

二、分析

可以把物理卷想象成一个一个的相同,或者不同的杯子(暂时想成相同大小的杯子吧,更容易理解);

卷组就是将几个杯子放一起,来实现一个杯子完成不了的功能;

逻辑卷就是对卷组中划分出来空间的一种叫法。我们假设最上层的一个杯子是分出来的第一个逻辑卷。

对逻辑卷的扩容就是再给他加一层,这样第一层加第二层就变成了一个逻辑卷。

对卷组的扩容就是给底部再加入逻辑卷,也就是单独的杯子。

注意:这种想象类比的方法只可作为辅助理解线性卷,其他类型的逻辑卷并不能用这个例子解释!!!

三、LVM相关命令:

1.物理卷

查看物理卷:pvs,pvscan,pvdisplay

这三个命令显示的内容很显而易见,根据需要查询的信息的不同选择自己需要的命令实现目的就可以

bash 复制代码
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <49.00g 4.00m
[root@localhost ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<49.00 GiB / 4.00 MiB free]
  Total: 1 [<49.00 GiB] / in use: 1 [<49.00 GiB] / in no VG: 0 [0   ]
[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <49.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              12543
  Free PE               1
  Allocated PE          12542
  PV UUID               F8i4v0-kxMy-8AzN-XadE-zXbt-m8WT-K8p8Jp

创建物理卷:pvcreate

用法:pvcreate 磁盘名

这里将我新添加的磁盘sdb新建为物理卷,使用pvs命令查看物理卷

bash 复制代码
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <49.00g 4.00m
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part
  ├─centos-root 253:0    0 47.5G  0 lvm  /
  └─centos-swap 253:1    0  1.5G  0 lvm  [SWAP]
sdb               8:16   0    8G  0 disk
sdc               8:32   0    5G  0 disk
sr0              11:0    1  4.4G  0 rom
[root@localhost ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <49.00g 4.00m
  /dev/sdb          lvm2 ---    8.00g 8.00g

删除物理卷:pvremove

需要注意的是,如果物理卷上层有卷组和逻辑卷,删除了物理卷,剧组和逻辑卷的内容也会丢失!!!

bash 复制代码
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <49.00g 4.00m
  /dev/sdb          lvm2 ---    8.00g 8.00g
[root@localhost ~]# pvremove /dev/sdb
  Labels on physical volume "/dev/sdb" successfully wiped.
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <49.00g 4.00m

2.卷组

查看卷组:vgs,vgscan,vgdisplay

当逻辑卷组合成卷组之后,这时候单个物理磁盘无法满足的功能(例如:单个盘空间不足,磁盘太多挂载麻烦,不方便统一读写等),这时候就可以把卷组看成物理磁盘,可以对它进行分区和格式化等操作。

bash 复制代码
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <49.00g 4.00m
[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "centos" using metadata type lvm2
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <49.00 GiB
  PE Size               4.00 MiB
  Total PE              12543
  Alloc PE / Size       12542 / 48.99 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               sL4abi-hl7c-tFoT-fWtG-OLH0-0PyV-DVyxLR

创建卷组:vgcreate

用法: vgcreate 卷组名 需要添加到卷组的物理卷(支持添加多个物理卷)

bash 复制代码
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <49.00g 4.00m
[root@localhost ~]# vgcreate myvg /dev/sdb /dev/sdc
  Volume group "myvg" successfully created
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <49.00g  4.00m
  myvg     2   0   0 wz--n-  12.99g 12.99g

删除卷组:vgremove

同样,需要注意的是,删除了卷组,卷组所在逻辑卷中保存的数据也会丢失,需要谨慎操作!!!

bash 复制代码
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <49.00g  4.00m
  myvg     2   0   0 wz--n-  12.99g 12.99g
[root@localhost ~]# vgremove myvg
  Volume group "myvg" successfully removed
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <49.00g 4.00m

3.逻辑卷

查看逻辑卷:lvs,lvscan,lvdisplay

逻辑卷类比到物理磁盘来看的话,就是一个个的分区,逻辑卷的详细信息会显示出当前逻辑卷位于哪个卷组以及物理卷

bash 复制代码
[root@localhost ~]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 47.49g
  swap centos -wi-ao----  1.50g
[root@localhost ~]# lvscan
  ACTIVE            '/dev/centos/swap' [1.50 GiB] inherit
  ACTIVE            '/dev/centos/root' [47.49 GiB] inherit
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                Ly4QAv-cvlm-2Nji-Z3Dq-cvE4-8TYk-fh2Vmi
  LV Write Access        read/write
  LV Creation host, time localhost, 2023-05-26 05:30:01 +0800
  LV Status              available
  # open                 2
  LV Size                1.50 GiB
  Current LE             384
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                1cd8Xo-dmHc-scj7-Pczc-NINP-SYYq-GQcOw2
  LV Write Access        read/write
  LV Creation host, time localhost, 2023-05-26 05:30:01 +0800
  LV Status              available
  # open                 1
  LV Size                47.49 GiB
  Current LE             12158
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

创建逻辑卷:lvcreate

用法:lvcreate -n 逻辑卷名 -L 大小 卷组名

在这里,我们用刚刚建好的卷组myvg来创建一个大小为500M的逻辑卷,逻辑卷名为mylv

lvcreate -n mylv -L 500M myvg

需要注意的是,创建完成的逻辑卷并不能直接使用,还需要在逻辑卷中创建文件系统,例如,我这里为逻辑卷创建xfs文件系统

# mkfs.xfs /dev/myvg/mylv

meta-data=/dev/myvg/mylv isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1368, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.

当格式化完成之后,我们就可以挂载逻辑卷并正常使用了

# mount /dev/myvg/mylv /mnt
# df -h
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/myvg-mylv 506528 29388 477140 6% /mnt

删除逻辑卷:lvremove

1.如果逻辑卷当前已挂载,卸载该卷:

# umount /mnt

2.如果在集群环境中存在逻辑卷,则在所有其激活的节点上取消激活逻辑卷。

首先需要使用lvdisplay命令查看逻辑卷的激活状态

lvdisplay

如果在输出中看到"LV Status"一栏显示"available",表示逻辑卷已成功激活

对每个这样的节点运行以下命令,我们这里的示例为单节点:

lvchange -an vg-name/lv-name

# lvchange -an /dev/myvg/mylv

3.使用 lvremove 删除逻辑卷

# lvremove /dev/myvg/mylv
Do you really want to remove active logical volume "mylv"? [y/n]: y
Logical volume "mylv1" successfully removed

备注

激活逻辑卷,使用lvchange命令,并指定-ay 参数来激活逻辑卷。例如,如果要激活名为"mylv"的逻辑卷,可以使用以下命令:

  lvchange -ay /dev/vgname/mylv

其中,vgname为卷组名称,mylv为逻辑卷名称。这个命令会激活指定的逻辑卷。

二、卷组的扩容和缩容

卷组的扩容并不难理解,继续添加pv来扩大卷组的容量,实现的方法就是添加更多的pv

通过添加一个或多个空闲的物理卷来增加卷组的容量

bash 复制代码
# vgextend myvg /dev/vdb3
Physical volume "/dev/vdb3" successfully created.
Volume group "myvg" successfully extended

三、逻辑卷的扩容和缩容

1. 增大逻辑卷和文件系统

要增大逻辑卷的大小,需要使用 lvextend 命令。当扩展逻辑卷时,可以指定你想要增大的量,或者指定扩展它需要达到的大小。

先决条件

1.有一个现有逻辑卷(LV),其中包含一个文件系统。使用 df -Th 命令确定文件系统类型。

2.卷组中有足够的空间来扩展 LV 和文件系统。使用 vgs -o name,vgfree 命令确定可用空间。

1.可选:如果卷组的空间不足以增大 LV,需要使用以下命令向卷组中添加新物理卷

# vgextend myvg /dev/vdb3
Physical volume "/dev/vdb3" successfully created.
Volume group "myvg" successfully extended

2.现在卷组足够大,根据你的需求执行以下步骤:

按指定的大小扩展 LV,我这里是将mylv扩大到3G

注意:是扩大到3G,不是增加3G容量!!!

# lvextend -L 3G /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 2.00 GiB (512 extents) to 3.00 GiB (768
extents).
Logical volume myvg/mylv successfully resized.

要扩展 mylv 逻辑卷使其占据 myvg 卷组中所有未分配的空间,请使用以下命令:

# lvextend -l +100%FREE /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 6.35 TiB
(1665465 extents).
Logical volume myvg/mylv successfully resized.

lvcreate 命令一样,可以使用 lvextend 命令的 -l 参数来指定扩展数目,从而增大逻辑卷的大小。还可以使用此参数指定卷组的比例或者卷组中剩余空间的比例

注意:这里是增加3G容量!!!

 lvextend -l +3G /dev/myvg/mylv

3.当lv完成扩容之后,使用以下命令重新定义逻辑卷上的文件系统大小

因为此时的逻辑卷已经扩展,而文件系统中的记录信息并没有被同步,那这时候就需要同步文件系统中的记录

这里的/mnt是将扩容完成之后的lv挂载到了mnt目录,而不是系统本身的mnt目录!!!

xfs_growfs /mnt

meta-data=/dev/mapper/myvg-mylv isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 262144 to 524288

如果没有 -D 选项,xfs_growfs 将文件系统增大到底层设备支持的最大大小,也就是扩容之后的所有空间都会被使用,默认就是不添加参数,将扩容之后的所有空间都添加到文件系统中

4.验证

使用以下命令验证文件系统是否在增长:

bash 复制代码
 df -Th

2. 缩小逻辑卷

使用 lvreduce 命令来减小逻辑卷的大小

注意:GFS2 或者 XFS 文件系统不支持缩小!!!

如果您要缩小的逻辑卷包含一个文件系统,为了防止数据丢失,必须确定该文件系统没有使用将被缩小的逻辑卷中的空间。因此,建议在逻辑卷包含文件系统时使用 lvreduce 命令的 --resizefs 选项

当使用这个选项时,lvreduce 命令会在缩小逻辑卷前尝试缩小文件系统。如果缩小文件系统失败,就像文件系统已满或者文件系统不支持缩小等情况, lvreduce 命令将会执行失败,且不会尝试缩小逻辑卷,更有利于数据安全。

需要注意的是,你的需求是将文件系统缩小到 某个大小还是减小某个大小!!!

1.要将 myvg 卷组中 mylv 逻辑卷缩小到 64MB,需要使用以下命令:

bash 复制代码
lvreduce --resizefs -L 64M myvg/mylv

2.要将逻辑卷缩小64MB,需要使用以下命令

在调整大小值前指定 - 符号表示该值将从逻辑卷的实际大小中减小。

# lvreduce --resizefs -L -64M myvg/mylv

四、卷组和逻辑卷的改名操作

1. 重命名 LVM 逻辑卷

  1. 如果逻辑卷当前已挂载,卸载该卷:

    # umount /mnt
    

    如果你的挂载点不是mnt,使用你的挂载点替换 /mnt

  2. 重命名现有逻辑卷:

    # lvrename myvg mylv mylv1
    Renamed "mylv" to "mylv1" in volume group "myvg"
    

    通过指定设备的完整路径来重命名逻辑卷:

    # lvrename /dev/myvg/mylv /dev/myvg/mylv1
    

2.重命名现有卷组

bash 复制代码
# vgrename myvg myvg1
Volume group "myvg" successfully renamed to "myvg1"

总结:

对于线性lvm的理解,还是按普通物理磁盘来类比

pv  ----- raid0         :相当于组合为raid0来增加单个设备的容量
vg ------ 物理磁盘       :相当于经过底层组合之后显示的一个大容量设备,比物理设备更灵活,可					                         以按需求来扩容或者缩容
lv  ------- 磁盘分区     :相当于在设备上的分区,也需要对其进行格式化创建文件系统才可以使用

好久不写博客,看到还有一篇未完成的草稿,拖了很久没有更新过博客了,索性咬咬牙写完了这篇文章,相比之前的思路,今天续写的内容实例变少了很多,但是依旧是干货满满,可能对于大部分人来说,还是没法理解lvm具体的原理,但是肯定也会对你有一点启发,后面的博客也会慢慢的更新出来,如果有特别想让我更新的内容,也可以直接私信或者评论告诉我,我抽空写出来。

相关推荐
flysnow0101 小时前
Linux CMakeLists编写之可执行程序
linux·cmake
码农郁郁久居人下1 小时前
Linux:文件系统与日志分析
linux·运维·服务器
你疯了抱抱我2 小时前
【CentOS7.6】yum 报错:Could not retrieve mirrorlist http://mirrorlist.centos.org
linux·centos·yum
小御姐@stella3 小时前
mac如何安装nginx 详细流程图
运维·nginx·流程图
-无-为-3 小时前
科普文:Linux服务器性能调优概叙
linux·运维·服务器
是程序喵呀3 小时前
软考《信息系统运行管理员》-2.2 信息系统运维的组织
运维·软件工程
计算机平台作业答案讲解4 小时前
QT实现GIF动图显示(小白版,可直接copy使用)
服务器·开发语言·数据结构·数据库·c++·qt·动态规划
Java追光着4 小时前
谷粒商城学习-07-虚拟机网络设置
服务器·网络·学习·谷粒商城
梅孔立4 小时前
linux 默认 python 2.7 版本没有pip安装教程
linux·python·pip