
什么是LVM?
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
为什么要使用LVM?
在日常工作或者学习中,随着电脑的不断被使用,我们的磁盘空间可能会越来越小,这时候,我们不能直接更换大硬盘,因为硬盘有价,数据无价,这时候我们就可以使用LVM,LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,和硬件相关的存储设置被其隐藏,你能不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样能减少操作成本,LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
LVM工作机制
LVM就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
逻辑卷管理概念
物理卷(PV, Physical Volume)
物理卷就是指磁盘,磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和LVM相关的管理参数。当前LVM允许你在每个物理卷上保存这个物理卷的0至2份元数据拷贝.默认为1,保存在设备的开始处.为2时,在设备结束处保存第二份备份.
卷组(VG, Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。能在卷组上创建一个或多个"LVM分区"(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(LV, Logical Volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/home或/usr等)。
关系结构
物理硬盘 → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统
LVM操作实战
1. 检查系统是否安装了LVM管理工具
bash
rpm -qa|grep lvm
输出示例:
lvm2-2.02.177-4.el7.x86_64
llvm-private-5.0.0-3.el7.x86_64
lvm2-libs-2.02.177-4.el7.x86_64
2. 安装LVM工具(如果未安装)
bash
yum install lvm*
3. 创建物理卷(PV)
基本PV命令:
pvcreate:将物理分区新建为pvpvs/pvscan:查看系统里有pv的磁盘pvdisplay:显示系统上面的pv状态pvremove:删除pv
使用两个磁盘:/dev/sdl (20G) 和 /dev/sdh (1G) 来完成LVM
bash
pvcreate /dev/sdl /dev/sdh
输出:
Physical volume "/dev/sdl" successfully created.
Physical volume "/dev/sdh" successfully created.
查看新建的PV:
bash
pvs
输出:
PV VG Fmt Attr PSize PFree
/dev/sdh lvm2 --- 1.00g 1.00g
/dev/sdl lvm2 --- 20.00g 20.00g
4. 创建卷组(VG)
有关VG的命令:
vgcreate [-s xM] vgName /dev/sd...:新建vg,-s后面接pe的大小(可选)vgextend:扩展vg,就是增加pvvgs/vgscan:查看系统里有vg的磁盘vgdisplay:显示系统上面的vg状态vgremove:删除vgvgreduce:在vg里删除pv
创建vgqjc并查看:
bash
vgcreate -s 16M vgqjc /dev/sdl
vgs
输出:
VG #PV #LV #SN Attr VSize VFree
vgqjc 1 0 0 wz--n- 19.98g 19.98g
5. 创建逻辑卷(LV)
有关LV的命令:
lvcreate -l pe num /-L size -n lvname vgName:新建lv,-l指定pe的个数,-L指定容量lvextend:增加容量lvs/lvscan:查看系统里有lv的磁盘lvdisplay:显示系统上面的lv状态lvremove:删除lvlvreduce:在lv里减少容量
创建lvqjc:
bash
lvcreate -l 512 -n lvqjc vgqjc
输出:
WARNING: ext4 signature detected on /dev/vgqjc/lvqjc at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/vgqjc/lvqjc.
Logical volume "lvqjc" created.
查看:
bash
lvs
输出:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvqjc vgqjc -wi-a----- 8.00g
6. 格式化逻辑卷
bash
mkfs.ext4 /dev/vgqjc/lvqjc
7. 挂载使用
bash
mount /dev/vgqjc/lvqjc /mnt
df -Th
输出显示逻辑卷已成功挂载到/mnt目录。
LVM的在线扩展
情况一:VG空间足够
当需要扩展的PE数量,VG可以提供时:
bash
lvextend -L +100M /dev/vgtest/lvtest
resize2fs /dev/vgtest/lvtest # 更新文件系统大小
情况二:VG空间不够
需要先扩展VG,即往VG中加PV:
bash
# 新建PV
pvcreate /dev/sdg
# 扩展VG
vgextend vgtest /dev/sdg
# 扩展LV
lvextend -L 1G /dev/vgtest/lvtest
# 更新文件系统
resize2fs /dev/vgtest/lvtest
LVM的缩减操作
注意:缩减操作有风险,请确保数据已备份!
- 卸载文件系统
- 缩减文件系统
- 缩减逻辑卷
bash
# 检查当前大小
lvs
# 缩减文件系统到5G
resize2fs /dev/vgqjc/lvqjc 5G
# 缩减逻辑卷到5G
lvreduce -L 5G /dev/vgqjc/lvqjc
# 重新挂载并验证
mount /dev/vgqjc/lvqjc /mnt
df -Th
ls /mnt # 检查文件是否丢失
删除LVM
如果要彻底移除LVM,需要按创建步骤的反向操作:
- 卸载文件系统
- 删除LV
- 删除VG
- 删除PV
bash
# 卸载
umount /dev/mapper/vgqjc-lvqjc
# 删除LV
lvremove /dev/mapper/vgqjc-lvqjc
# 删除VG
vgremove /dev/mapper/vgqjc
# 删除PV
pvremove /dev/sdl
常用命令总结
物理卷(PV)管理
bash
pvcreate /dev/sdX # 创建物理卷
pvs # 查看物理卷简要信息
pvdisplay # 查看物理卷详细信息
pvremove /dev/sdX # 删除物理卷
卷组(VG)管理
bash
vgcreate vgname /dev/sdX # 创建卷组
vgs # 查看卷组简要信息
vgdisplay # 查看卷组详细信息
vgextend vgname /dev/sdX # 扩展卷组
vgreduce vgname /dev/sdX # 从卷组中移除物理卷
vgremove vgname # 删除卷组
逻辑卷(LV)管理
bash
lvcreate -L 大小 -n lvname vgname # 创建逻辑卷
lvs # 查看逻辑卷简要信息
lvdisplay # 查看逻辑卷详细信息
lvextend -L +大小 /dev/vgname/lvname # 扩展逻辑卷
lvreduce -L 大小 /dev/vgname/lvname # 缩减逻辑卷
lvremove /dev/vgname/lvname # 删除逻辑卷
文件系统操作
bash
resize2fs /dev/vgname/lvname # 调整ext文件系统大小
mkfs.ext4 /dev/vgname/lvname # 格式化逻辑卷
mount /dev/vgname/lvname /mountpoint # 挂载逻辑卷
注意事项
- 备份重要数据:在进行LVM缩减操作前,务必备份重要数据
- 在线扩展:LVM支持在线扩展,无需卸载文件系统
- 缩减风险:缩减操作需要先卸载文件系统,操作不当可能导致数据丢失
- PE大小:创建卷组时可以通过
-s参数指定PE大小,影响后续扩展的粒度 - 文件系统类型:不同文件系统使用不同的工具调整大小(ext系列用resize2fs,xfs用xfs_growfs)