首先我们要知道,逻辑卷也来源于物理磁盘,只是将他们统一定义和重新分配空间。这一点非常重要,只有理解了这一定才能更好的理解逻辑卷和卷组。
本文介绍的是最常用的线性卷 。
什么是线性卷?复杂的定义没必要去看,简单来说就是1+1=2
你有两块磁盘,一块60G,一块30G,他们两块盘组成线性卷,就是60+30=90G
目录
- 一、定义
- 二、分析
- 三、LVM相关命令:
- 二、卷组的扩容和缩容
- 三、逻辑卷的扩容和缩容
-
- [1. 增大逻辑卷和文件系统](#1. 增大逻辑卷和文件系统)
-
- [1.可选:如果卷组的空间不足以增大 LV,需要使用以下命令向卷组中添加新物理卷](#1.可选:如果卷组的空间不足以增大 LV,需要使用以下命令向卷组中添加新物理卷)
- 2.现在卷组足够大,根据你的需求执行以下步骤:
- 3.当lv完成扩容之后,使用以下命令重新定义逻辑卷上的文件系统大小
- 4.验证
- [2. 缩小逻辑卷](#2. 缩小逻辑卷)
-
- [1.要将 *myvg* 卷组中 *mylv* 逻辑卷缩小到 64MB,需要使用以下命令:](#1.要将 myvg 卷组中 mylv 逻辑卷缩小到 64MB,需要使用以下命令:)
- 2.要将逻辑卷缩小64MB,需要使用以下命令
- 四、卷组和逻辑卷的改名操作
-
- [1. 重命名 LVM 逻辑卷](#1. 重命名 LVM 逻辑卷)
- 2.重命名现有卷组
- 总结:
一、定义
物理卷:故名思意,就是实际的磁盘。
卷组:将实际的物理卷按特定的方法组合到一起。
逻辑卷:对卷组的空间进行划分,形成新的分区。
二、分析
可以把物理卷想象成一个一个的相同,或者不同的杯子(暂时想成相同大小的杯子吧,更容易理解);
卷组就是将几个杯子放一起,来实现一个杯子完成不了的功能;
逻辑卷就是对卷组中划分出来空间的一种叫法。我们假设最上层的一个杯子是分出来的第一个逻辑卷。
对逻辑卷的扩容就是再给他加一层,这样第一层加第二层就变成了一个逻辑卷。
对卷组的扩容就是给底部再加入逻辑卷,也就是单独的杯子。
注意:这种想象类比的方法只可作为辅助理解线性卷,其他类型的逻辑卷并不能用这个例子解释!!!
三、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 逻辑卷
-
如果逻辑卷当前已挂载,卸载该卷:
# umount /mnt
如果你的挂载点不是mnt,使用你的挂载点替换 /mnt。
-
重命名现有逻辑卷:
# 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具体的原理,但是肯定也会对你有一点启发,后面的博客也会慢慢的更新出来,如果有特别想让我更新的内容,也可以直接私信或者评论告诉我,我抽空写出来。