逻辑卷介绍
逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备。
要了解逻辑卷,首先需要理解LVM中的几个核心概念:
-
物理卷(Physical Volume, PV):物理磁盘分区 ==fdisk==。
-
卷组(Volume Group, VG):PV的集合,是物理存储资源的池。
-
逻辑卷(Logic Volume, LV):从VG中划分出来的一块逻辑磁盘空间。
-
物理区域(Physical Extent, PE):每个物理卷被划分为大小相同的基本单元,默认4MB,是LVM可寻址的最小单位。
-
逻辑区域(Logical Extent, LE):逻辑卷的基本单位,与PE大小相同并一一对应。
逻辑卷的工作流程:物理磁盘或磁盘分区转换为物理卷,一个或多个物理卷组成卷组,从卷组中划分出逻辑卷。
为什么使用逻辑卷
相比直接使用物理磁盘分区,逻辑卷主要有两个优势:
-
大容量存储管理:可以将多个小容量的物理磁盘聚合为一个大的逻辑磁盘。例如,需要30TB的/data存储,单个物理磁盘无法满足,但多个物理磁盘组成的逻辑卷可以。
-
动态调整容量:业务初期难以准确预估所需磁盘空间,使用逻辑卷可以根据实际需求灵活扩展或收缩容量。
磁盘与LVM的关系
逻辑卷管理中的各层次关系:
-
硬盘 -> 分区(part) → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 格式化 → 挂载使用
数据块大小对比:
-
硬盘读取数据最小单位:1个扇区 = 512字节
-
操作系统读取数据最小单位:1个数据块 = 4KB = 8个扇区
-
LVM寻址最小单位:1个PE = 4MB = 1024个数据块
逻辑卷LVM应用
创建逻辑卷的思路
-
准备物理设备(fdisk)
-
将物理设备转换为物理卷
-
创建卷组并将物理卷加入
-
在卷组上创建逻辑卷
-
格式化逻辑卷
-
挂载使用
逻辑卷创建实例
需求:创建一个2.5G大小的逻辑卷
首先,将两个物理分区转换为物理卷:
==pvcreate== ==pvs== ==pvdisplay==
# 将/dev/sdb1转换为物理卷
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
# 将/dev/sdb2转换为物理卷
[root@localhost ~]# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
查看物理卷信息:
# 查看所有物理卷的简要信息
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdb2 lvm2 --- 2.00g 2.00g
# 查看指定物理卷的详细信息
[root@localhost ~]# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID nrgMce-USoG-nEyH-6YT1-f2y7-V4y1-zsdRnS
创建卷组并将物理卷加入:
==vgcreate== ==vgs==
# 创建名为vg01的卷组,包含两个物理卷
[root@localhost ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2
Volume group "vg01" successfully created
# 查看卷组信息
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg01 2 0 0 wz--n- 3.99g 3.99g
创建逻辑卷:
==lvcreate== ==lvs== ==lvdisplay==
# 在vg01卷组上创建名为lv01的2.5G逻辑卷
[root@localhost ~]# lvcreate -n lv01 -L 2.5G vg01
Logical volume "lv01" created.
# 查看逻辑卷信息
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv01 vg01 -wi-a----- 2.50g
# 查看块设备信息,可以看到逻辑卷的结构
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
|-sda1 8:1 0 1G 0 part /boot
`-sda2 8:2 0 19G 0 part
|-centos-root 253:0 0 17G 0 lvm /
`-centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
|-sdb1 8:17 0 2G 0 part
| `-vg01-lv01 253:2 0 2.5G 0 lvm
`-sdb2 8:18 0 2G 0 part
`-vg01-lv01 253:2 0 2.5G 0 lvm
sr0 11:0 1 9.6G 0 rom
格式化逻辑卷为ext4文件系统:
[root@localhost vg01]# mkfs.ext4 /dev/vg01/lv01
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
163840 inodes, 655360 blocks
32768 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=671088640
20 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
查看文件系统UUID并挂载:
# 查看逻辑卷的UUID和文件系统类型
[root@localhost vg01]# blkid /dev/vg01/lv01
/dev/vg01/lv01: UUID="ba4cc7c2-6190-41a0-8808-20a8312ae2a1" TYPE="ext4"
# 创建挂载点并挂载逻辑卷
[root@localhost vg01]# mkdir /u01
[root@localhost vg01]# mount /dev/vg01/lv01 /u01
# 确认挂载成功
[root@localhost vg01]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
|-sda1 8:1 0 1G 0 part /boot
`-sda2 8:2 0 19G 0 part
|-centos-root 253:0 0 17G 0 lvm /
`-centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
|-sdb1 8:17 0 2G 0 part
| `-vg01-lv01 253:2 0 2.5G 0 lvm /u01
`-sdb2 8:18 0 2G 0 part
`-vg01-lv01 253:2 0 2.5G 0 lvm /u01
sr0 11:0 1 9.6G 0 rom
创建逻辑卷的选项说明
逻辑卷创建时有两种指定大小的方式:
-
-L
:直接指定容量大小,如-L 2.5G
-
-l
:指定PE个数或剩余空间百分比-
PE是LVM最小单位,1PE=4MB,如
-l 100
创建400MB的逻辑卷 -
百分比使用,如
-l 100%free
使用全部剩余空间
-
查看卷组详细信息,了解PE分配情况:
[root@localhost vg01]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 3.99 GiB
PE Size 4.00 MiB
Total PE 1022
Alloc PE / Size 640 / 2.50 GiB
Free PE / Size 382 / 1.49 GiB
VG UUID oOMYwR-okaZ-Cbaj-FbCa-vsE2-8urR-MM9fB1
创建使用指定PE数量和全部剩余空间的逻辑卷:
# 创建100个PE大小的逻辑卷lv02
[root@localhost vg01]# lvcreate -n lv02 -l 100 vg01
Logical volume "lv02" created.
[root@localhost vg01]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv01 vg01 -wi-ao---- 2.50g
lv02 vg01 -wi-a----- 400.00m
# 查看卷组剩余空间
[root@localhost vg01]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg01 2 2 0 wz--n- 3.99g 1.10g
# 创建使用全部剩余空间的逻辑卷lv03
[root@localhost vg01]# lvcreate -n lv03 -l100%free vg01
Logical volume "lv03" created.
[root@localhost vg01]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv01 vg01 -wi-ao---- 2.50g
lv02 vg01 -wi-a----- 400.00m
lv03 vg01 -wi-a----- 1.10g
删除逻辑卷组件
删除逻辑卷相关组件的命令:
-
lvremove
:删除逻辑卷 -
vgremove
:删除卷组 -
pvremove
:删除物理卷
示例:删除逻辑卷lv03
[root@localhost vg01]# lvremove /dev/vg01/lv03
Do you really want to remove active logical volume vg01/lv03? [y/n]: y
Logical volume "lv03" successfully removed
注意事项:
-
如果逻辑卷正在使用中,需要先取消挂载再删除
-
删除物理卷前,如存在对应卷组,需使用
vgreduce
从卷组中移除:vgreduce vg01 /dev/sdb2
逻辑卷动态扩容
需求:将/u01目录动态扩容到3G
扩容思路:
-
查看/u01目录对应的逻辑卷
-
检查该逻辑卷所在卷组的剩余空间是否足够
-
如卷组空间不够,先扩容卷组,再扩容逻辑卷
-
如卷组空间足够,直接扩容逻辑卷
检查当前挂载和空间情况:
[root@localhost vg01]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 13M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 9.7G 7.4G 57% /
/dev/sda1 1014M 187M 828M 19% /boot
tmpfs 781M 12K 781M 1% /run/user/42
tmpfs 781M 0 781M 0% /run/user/0
/dev/mapper/vg01-lv01 1.5G 4.5M 1.4G 1% /u01
使用空闲物理设备扩容卷组:
[root@localhost vg01]# vgextend vg01 /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
Volume group "vg01" successfully extended
扩容逻辑卷:
[root@localhost vg01]# lvextend /dev/vg01/lv01 -L +1.5G
Size of logical volume vg01/lv01 changed from 1.50 GiB (384 extents) to 3.00 GiB (768 extents).
Logical volume vg01/lv01 successfully resized.
[root@localhost vg01]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv01 vg01 -wi-ao---- 3.00g
调整文件系统大小以匹配逻辑卷:
[root@localhost ~]# resize2fs /dev/vg01/lv01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /u01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg01/lv01 is now 786432 blocks long.
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 13M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 9.7G 7.4G 57% /
/dev/sda1 1014M 187M 828M 19% /boot
tmpfs 781M 8.0K 781M 1% /run/user/42
tmpfs 781M 0 781M 0% /run/user/0
/dev/mapper/vg01-lv01 3.0G 4.5M 2.8G 1% /u01
完成扩容后,可以看到/u01目录已从1.5G扩容到3.0G,而且是在线扩容,无需卸载文件系统。