Linux LVM(Logical Volume Manager)是Linux内核的一部分,用于管理磁盘分区和卷。LVM的主要目标是提高磁盘分区和卷的管理灵活性。LVM基于Linux内核的硬盘和分区系统,使得用户可以更加容易地分配和管理磁盘空间。
在LVM中,有两个主要的概念:
- Volume(卷):卷是LVM中的基本单位,它是一个逻辑设备,可以包含多个分区或者一个分区。卷可以被挂载到文件系统中,从而扩展了磁盘的空间。
- LV(逻辑卷):LV是Volume的缩写,是卷的一种特殊形式。LV中包含了一个或多个分区,可以被挂载到文件系统中。LV的大小是由它所包含的分区或者磁盘组成的。
LVM通过在物理硬盘上创建多个卷,然后将这些卷挂载到文件系统中,实现了对磁盘空间的动态管理。用户可以将一个或多个卷组合在一起,形成一个大的卷,从而扩展了磁盘的空间。LVM还支持跨卷的读写操作,从而提高了文件系统的性能。
在LVM中,卷和LV之间使用一个虚拟接口进行管理。这个接口由称为“抽象I/O”的系统调用提供支持。通过这个接口,LVM可以实现对卷和LV的管理,从而提高了磁盘管理的效率。
总的来说,LVM是Linux内核的一部分,用于管理磁盘分区和卷。它通过在物理硬盘上创建多个卷,然后将这些卷挂载到文件系统中,实现了对磁盘空间的动态管理。LVM支持跨卷的读写操作,从而提高了文件系统的性能。用户可以将一个或多个卷组合在一起,形成一个大的卷,从而扩展了磁盘的空间。
以下是在日常使用当中经常使用到的相关知识:
1. 创建
创建lv之前,需要先创建磁盘分区,再创建pv,再创建vg,最后在vg中才能创建lv。
1.1. 创建分区
使用fdisk命令进行磁盘分区,建议将分区System改为Linux LVM,便于区分和管理。
fdisk /dev/sdb
1.2. 创建pv
经过实际验证,可以不需要手动创建pv,在vg创建或者扩容时,会自动创建pv。
个人建议不做此步骤。
pvcreate /dev/sdb1
1.3. 创建vg
vgcreate vg_data /dev/sdb1
1.4. 创建lv
lvcreate -l 100%vg -n lv_data vg_data
1.5. 格式化lv
# XFS
mkfs.xfs /dev/mapper/vg_data-lv_data
# EXT4
mkfs.ext /dev/mapper/vg_data-lv_data
1.6. 挂载
moount /dev/mapper/vg_data-lv_data /data
此处建议写入/etc/fstab,保证服务器重启后,磁盘自动挂载。
2. 扩容
lv扩容的步骤与创建lv基本相似,任然需要对磁盘进行分区,(创建pv),将pv加入vg,再将lv进行扩容,最后对lv进行在线扩容即可。
以下是lv扩容命令:
# lvextend
lvextend -l 100%vg /dev/mapper/vg_data-lv_data
# 在线扩容
# ext4格式
resize2fs /dev/mapper/vg_data-lv_data
# xfs格式
xfs_growfs /dev/mapper/vg_data-lv_data
3. 缩容
下面是在Linux操作系统中使用LVM缩小LV的步骤,根目录一般无法缩小。
此外,ext4文件系统可以进行扩缩容操作,但xfs的文件系统只能扩容,无法缩容。
所以如果需要进行xfs的缩容,可以先使用xfsdump备份文件系统,然后对逻辑卷(/分区)进行缩容操作(此时原xfs文件系统会损坏),然后再重新格式化该逻辑卷(/分区),最后xfsrestore将备份还原到该逻辑卷(/分区)。当然也可以通过其他方式备份数据并还原,只要能做到数据不丢失都可以。
3.1. 卸载lv
umount /dev/mapper/vg_data-lv_data
3.2. 缩容
# 减小5G
lvresize -L -5G /dev/mapper/vg_data-lv_data
# 查看是否成功,以及缩容后大小
lvs
# 缩容文件系统
resize2fs /dev/mapper/vg_data-lv_data
lvresize命令比较灵活,可以用来缩容,也可以用来扩容,可以直接指定目标大小,也可以通过+|-算法来扩容或者缩容,详细信息可以查看命令帮助。
3.3. 挂载lv
moount /dev/mapper/vg_data-lv_data /data
挂载后使用df检查路径大小。
4. 移除
4.1 移除lv
在移除lv之前,同样需要先卸载已经挂载到操作系统的lv。
umount /dev/mapper/vg_data-lv_data
卸载文件系统后,删除lv
lvremove /dev/mapper/vg_data-lv_data
删除vg
vgremove centos
# 如果卷组中还有lv,移出时,会提示,是否也移出,咱们这里直接移出
删除pv
pvremove /dev/sdb1
5. 其他
从PV中删除这个硬盘:
pvremove /dev/sdb1
从VG中删除这个硬盘:
vgreduce /dev/sdb1
VG中去除PV unknown device:
vgreduce --removemissing /dev/sdb1
将sda1的数据移动到sdb1:
pvmove /dev/sda1 /dev/sdb1