LVM-逻辑卷管理是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。
硬盘(/dev/sda)--> 分区(/dev/sda1)--> 逻辑卷组(vg0)--> 逻辑卷(lv0)--> 文件系统(ext4)
物理单元(PE) :Physical Extents--具有唯一编号的PE是能被LVM寻址的最小单元,PE的大小可以指定,默认为4MB。PE的大小一旦确定将不能改变,同一个卷组中的所有的物理卷的PE的大小是一致的
逻辑单元(LE):Logical Extents--是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小,在同一个卷组中,LE的大小和PE是相同的,通常一一对应
物理卷(PV):Physical Volume--底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等
卷组(VG):Volume Group--建立在物理卷之上,它由一个或多个物理卷组成,即把物理卷整合起来提供容量分配,一个LVM系统中可以只有一个卷组,也可以包含多个卷组
逻辑卷(LV):Logical Volume--逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间,它是最终用户使用的逻辑设备,逻辑卷创建之后,其大小可以伸缩
实验
1.创建pv
查看当前硬盘情况 fdisk -l | grep /dev
创建 pv:pvcreate /dev/sdb5
查看 pvdisplay、pvs、lsblk -f、df -h
[root@localhost ~]# fdisk -l | grep /dev
Disk /dev/sda:100 GiB,107374182400 字节,209715200 个扇区
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 209715199 207616000 99G 8e Linux LVM
Disk /dev/sdb:50 GiB,53687091200 字节,104857600 个扇区
/dev/sdb1 2048 2099199 2097152 1G 83 Linux
/dev/sdb2 2099200 4196351 2097152 1G 5 扩展
/dev/sdb5 2101248 4196351 2095104 1023M 8e Linux LVM
Disk /dev/sdc:20 GiB,21474836480 字节,41943040 个扇区
/dev/sdc2 3907584 9764863 5857280 2.8G Linux 文件系统
Disk /dev/mapper/rl-root:63.9 GiB,68593647616 字节,133971968 个扇区
Disk /dev/mapper/rl-swap:3.9 GiB,4215275520 字节,8232960 个扇区
Disk /dev/mapper/rl-home:31.2 GiB,33487323136 字节,65404928 个扇区
[root@localhost ~]# pvcreate /dev/sdb5
Physical volume "/dev/sdb5" successfully created.
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name rl
PV Size <99.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 25343
Free PE 0
Allocated PE 25343
PV UUID YxSpEk-fl4v-eqc1-KdzT-gxAo-bUeK-mDMd0z
"/dev/sdb5" is a new physical volume of "1023.00 MiB"
--- NEW Physical volume ---
PV Name /dev/sdb5
VG Name
PV Size 1023.00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID Bv1TMp-PGFC-XG8J-rMv2-dxcD-01JB-GpHmAU
2.创建VG
vgcreate testvg /dev/sdb5:这里的testvg是vg的自定义名称,/dev/sdb5是pv的名称
查看 vgdisplay / vgs
[root@localhost ~]# vgcreate testvg /dev/sdb5
Volume group "testvg" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1020.00 MiB
PE Size 4.00 MiB
Total PE 255
Alloc PE / Size 0 / 0
Free PE / Size 255 / 1020.00 MiB
VG UUID HdnYgO-uZ8u-YUrH-oBD7-k45q-1SAn-burt3N
--- Volume group ---
VG Name rl
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size <99.00 GiB
PE Size 4.00 MiB
Total PE 25343
Alloc PE / Size 25343 / <99.00 GiB
Free PE / Size 0 / 0
VG UUID icObNf-X0QE-Dnr6-d0Qa-MGCS-WbL5-T2lkFD
3.创建LV
lvcreate -L 1000M -n testlv testvg
查看 lvdisplay
进行格式化mkfs.ext4 /testvg/testlv
注意:只有lv才可以用来存放数据和格式化的
挂载:mkdir /home/test——创建挂载点
mount /dev/testvg/testlv /home/test
检查挂载:df -h | grep /testlv
[root@localhost ~]# lvcreate -L 1000M -n testlv testvg
Logical volume "testlv" created.
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/testvg/testlv
LV Name testlv
VG Name testvg
LV UUID aH2OQ4-1pQd-PW9g-nZ4t-vrXH-n0Pq-ATEmYr
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-11-08 09:24:22 +0800
LV Status available
# open 0
LV Size 1000.00 MiB
Current LE 250
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
--- Logical volume ---
LV Path /dev/rl/swap
LV Name swap
VG Name rl
LV UUID 5fkCWh-Gi91-TvsJ-MfgY-1quH-Qj4g-tl3C1g
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-11-07 21:45:54 +0800
LV Status available
# open 2
LV Size <3.93 GiB
Current LE 1005
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/rl/home
LV Name home
VG Name rl
LV UUID XHsW05-nuDG-6yez-JIwI-ITaq-deib-2RGRCh
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-11-07 21:45:54 +0800
LV Status available
# open 1
LV Size <31.19 GiB
Current LE 7984
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/rl/root
LV Name root
VG Name rl
LV UUID VTXahn-3ofL-J8uO-fMRM-M7Lt-RdPn-pGew8I
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-11-07 21:45:54 +0800
LV Status available
# open 1
LV Size 63.88 GiB
Current LE 16354
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
[root@localhost ~]# mkdir /home/test/
[root@localhost ~]# mkdir /home/test/
[root@localhost ~]# df -h | grep /dev
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
/dev/mapper/rl-root 64G 2.6G 62G 4% /
/dev/sda1 1014M 199M 816M 20% /boot
/dev/mapper/rl-home 32G 255M 31G 1% /home
/dev/mapper/testvg-testlv 2.0G 24K 1.9G 1% /home/test
注意: 最后一行显示的是已经扩容完成后的结果,正常结果应该是:
4.扩容
需要先检查VG是否有足够的空间 vgs,不够的话需再虚拟机上新增一块磁盘
开始分区,fdisk /dev/sdc 全部默认,查看 fdisk -l | grep /dev(这一步在这里不再展示)
在新分区创建pv:pvcreate /dev/sdc1
扩容vg:vgextend testvg /dev/sdc1
查看是否生效vgdisplay testvg
扩容LV:lvextend -L 1G /dev/testvg/testlv
查看是否生效df -h | grep testlv
扩容文件系统:resize2fs /dev/testvg/testlv
重新查看lv扩容是否生效:df -h | grep testlv
如果依然不生效执行 lvresize -L +1G /dev/testvg/testlv,再次执行 resize2fs /dev/testvg/testlv
[root@localhost ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# vgextend testvg /dev/sdc1
Volume group "testvg" successfully extended
[root@localhost ~]# vgdisplay testvg
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size <2.86 GiB
PE Size 4.00 MiB
Total PE 731
Alloc PE / Size 250 / 1000.00 MiB
Free PE / Size 481 / <1.88 GiB
VG UUID HdnYgO-uZ8u-YUrH-oBD7-k45q-1SAn-burt3N
[root@localhost ~]# lvextend -L 1G /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 1000.00 MiB (250 extents) to 1.00 GiB (256 extents).
Logical volume testvg/testlv successfully resized.
[root@localhost home]# resize2fs /dev/testvg/testlv
resize2fs 1.45.6 (20-Mar-2020)
/dev/testvg/testlv 上的文件系统已被挂载于 /home/test;需要进行在线调整大小
old_desc_blocks = 1, new_desc_blocks = 1
/dev/testvg/testlv 上的文件系统现在为 524288 个块(每块 4k)。
[root@localhost home]# df -h | grep testlv
/dev/mapper/testvg-testlv 2.0G 24K 1.9G 1% /home/test
5 .缩容
以下是缩容的实验步骤,这里不再展示,可自行尝试
1.重新指定文件系统容量
需要先umount /home/test
检查命令 e2fsck -f /dev/testvg/testlv
重新指定大小 resize2fs /dev/testvg/testlv 1G
2.重新指定lv容量
禁用逻辑卷 lvchange -an /dev/testvg/testlv
lvreduce -L 1G /dev/testvg/testlv
开启逻辑卷 lvchange -ay /dev/testvg/testlv
查看lv大小 lvs /dev/testvg/testlv
检查文件系统状态 e2fsck -f /dev/testvg/testlv
重新挂载lv mount /dev/testvg/testlv /home/test
可以使用df -h | grep testlv 来查看大小了