lvm详解
lvm是什么
LVM(Logical Volume Manager)逻辑卷管理,是在硬盘分区和文件系统之间添加的一个逻辑层,为文件系统屏蔽下层硬盘分区布局,并提供一个抽象的盘卷,在盘卷上建立文件系统。它提供了一种灵活的方式来管理和操作磁盘空间,使管理员能够动态地创建、调整大小、合并和移动逻辑卷,而无需中断系统。
LVM的主要目标是将物理存储设备(如硬盘、SSD等)抽象为逻辑卷(Logical Volume),屏蔽了物理磁盘和分区的细节,使用户和系统能够以逻辑上的方式管理存储空间。当我们对底层的物理硬盘进行操作时,不再是针对分区进行操作,而是通过逻辑卷对底层硬盘进行管理操作。
lvm其实跟ext4这样的文件系统类似,抽象成一个个分区后,将这些分区挂载到某个目录下,就可以像操作目录一样操作磁盘了。
lvm与ext4这样的文件系统最大的区别是,ext4针对是某个磁盘的一部分的抽象,而lvm则是针对一个或多个磁盘的一部分或者整体的抽象,lvm能够将多个磁盘抽象成同一个逻辑卷。
关键术语
- 物理存储介质(The physical media):其实就是硬盘或者ssd,LVM存储介质,可以是硬盘分区、整个硬盘、raid阵列或SAN硬盘。设备必须初始化为LVM物理卷,才能与LVM结合使用。
- 物理卷PV(physical volume):物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质比较却包含与LVM相关的管理参数,创建物理卷可以用硬盘分区,也可以用硬盘本身。
- 卷组VG(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,一个卷组VG由一个或多个物理卷PV组成。可以在卷组VG上建立逻辑卷LV。
- 逻辑卷LV(logical volume):类似于非LVM系统中的硬盘分区,逻辑卷LV建立在卷组VG之上。在逻辑卷LV之上建立文件系统。
lvm的搭建流程
graph TB
a(磁盘/分区)-->b(创建物理卷pv)-->c(创建逻辑卷vg,vg可以有多个pv组成)-->d(创建逻辑卷lv)-->e(格式化并挂载)
lvm有什么用
卷组VG可以使多个硬盘空间看起来像是一个大硬盘。
逻辑卷LV可以创建跨多个硬盘空间的分区。
在使用逻辑卷LV时,可以在空间不足时动态调整大小,不需要考虑逻辑卷LV在硬盘上的位置,不用担心没有可用的连续的空间。
可以在线对卷组VG、逻辑卷LV进行创建、删除、调整大小等操作。但LVM上的文件系统也需要重新调整大小。
LVM允许创建快照,用来保存文件系统的备份。
如何使用lvm
使用lsblk查看磁盘分区,确定要使用的磁盘或者分区,可以是没有创建过分区的物理磁盘,也可以已经创建出来的分区;
选择磁盘或者分区利用pvcreate创建物理卷PV,创建完成后可以使用pvs查看pv
pvcreate /dev/sda
pvs
创建完成后,使用lsblk -f查看文件系统类型时已经变更为了LVM2_member.
(base) ➜ ~ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
└─sda1 LVM2_member 6xxxxxxxxxxxxxxxx
可以使用pvdisplay查看pv的详细情况。
pvdisplay /dev/sda1
- 创建vg
使用vgcreate创建vg,命令如下:
# 这里的vg_data就是vg的名称
vgcreate vg_data /dev/sda1
创建完成后使用如下命令查看vg的详细情况:
vgs
vgdisplay vg_data
- 创建逻辑卷lv
lvcreate -n lvname -L lvsize(M,G) vgname
lvcreate -n lv_data -L 64M vg_data
- 格式化分区,并将其挂载
mkfs.ext4 /dev/vg/lv_data
mkdir /data
mount /dev/vg/lv_data /data
- lv扩容
lvm最重要的功能就是动态调整分区大小,如果之前创建的vg还有剩余的空间,则可以直接在原有lv的基础上扩容,使用如下命令扩展:
lvextend -L +100M /dev/vg/lv_data
resize2fs /dev/vg/lv_data
如果vg里的所有空间都已经分配完了,则需要先扩展vg,再扩展lv。
缩容则采用如下命令:
lvreduce -L 100M /dev/vg/lv_data
resize2fs /dev/vg/lv_data
- 扩展vg
扩展vg一般是增加了一块磁盘,这个时候就可以把这块磁盘扩展到vg里,比如sdb。
pvcreate /dev/sdb
vgextend vg_data /dev/sdb
关于lvm的一些疑问
- lvm创建的文件是如何分配到具体的物理磁盘上的