LVM
LVM 概述
LVM (Logical Volume Manager) 是 Linux 系统中的一个逻辑卷管理器,它提供了在物理存储设备上创建和管理逻辑卷的功能。LVM 的主要优势包括:
- 灵活性:可以动态调整卷大小
- 可扩展性:支持在线扩容
- 快照:支持创建数据快照
- 条带化:支持跨多个磁盘的条带化
- 镜像:支持数据镜像以提高可用性
LVM 安装
安装 LVM 工具包
LVM 工具包通常包含在 lvm2
包中,不同发行版的安装命令如下:
Ubuntu/Debian
sudo apt update
sudo apt install lvm2
CentOS/RHEL/Rocky Linux
sudo yum install lvm2
# 或者使用 dnf (新版本)
sudo dnf install lvm2
Alpine Linux
apk add lvm2
验证安装
安装完成后,验证 LVM 工具是否可用:
# 检查 LVM 版本
lvm version
# 检查主要命令是否可用
which pvcreate
which vgcreate
which lvcreate
启动 LVM 服务
某些发行版需要启动 LVM 服务:
# Ubuntu/Debian
sudo systemctl enable lvm2-lvmetad
sudo systemctl start lvm2-lvmetad
# CentOS/RHEL
sudo systemctl enable lvm2-lvmetad
sudo systemctl start lvm2-lvmetad
LVM 核心概念
物理卷 (Physical Volume, PV)
- 物理卷是 LVM 的基本存储单元
- 可以是整个磁盘、分区或 RAID 设备
- 通过
pvcreate
命令创建
卷组 (Volume Group, VG)
- 卷组是物理卷的集合
- 为逻辑卷提供存储池
- 可以动态添加或删除物理卷
逻辑卷 (Logical Volume, LV)
- 逻辑卷是从卷组中分配的逻辑存储单元
- 可以像普通分区一样使用
- 支持动态调整大小
物理扩展 (Physical Extent, PE)
- 物理扩展是卷组中的最小分配单元
- 默认大小为 4MB,可自定义
逻辑扩展 (Logical Extent, LE)
- 逻辑扩展是逻辑卷中的最小分配单元
- 与物理扩展一一对应
LVM 架构图
LVM 组件关系
常用 LVM 命令
物理卷管理
# 创建物理卷
pvcreate /dev/sdb /dev/sdc
# 查看物理卷信息
pvdisplay
pvscan
# 删除物理卷
pvremove /dev/sdb
卷组管理
# 创建卷组
vgcreate vg0 /dev/sdb /dev/sdc
# 查看卷组信息
vgdisplay vg0
vgscan
# 扩展卷组
vgextend vg0 /dev/sdd
# 删除卷组
vgremove vg0
逻辑卷管理
# 创建逻辑卷
lvcreate -L 10G -n lv0 vg0
# 查看逻辑卷信息
lvdisplay /dev/vg0/lv0
lvscan
# 扩展逻辑卷
lvextend -L +5G /dev/vg0/lv0
# 删除逻辑卷
lvremove /dev/vg0/lv0
文件系统管理
# 格式化逻辑卷
mkfs.ext4 /dev/vg0/lv0
# 挂载逻辑卷
mount /dev/vg0/lv0 /data1
# 扩展文件系统(在线扩容)
resize2fs /dev/vg0/lv0
LVM 操作示例
完整 LVM 创建流程
# 1. 创建物理卷
pvcreate /dev/sdb /dev/sdc
# 2. 创建卷组
vgcreate -s 64M vg0 /dev/sdb /dev/sdc
# 3. 创建逻辑卷
lvcreate -L 20G -n lv0 vg0
# 4. 格式化文件系统
mkfs.ext4 /dev/vg0/lv0
# 5. 创建挂载点并挂载
mkdir -p /data1
mount /dev/vg0/lv0 /data1
# 6. 添加到 /etc/fstab
echo "/dev/vg0/lv0 /data1 ext4 defaults 0 0" >> /etc/fstab
在线扩容示例
# 1. 添加新磁盘到卷组
vgextend vg0 /dev/sdd
# 2. 扩展逻辑卷
lvextend -L +10G /dev/vg0/lv0
# 3. 扩展文件系统
resize2fs /dev/vg0/lv0
快照创建示例
# 创建快照
lvcreate -L 5G -s -n lv0_snapshot /dev/vg0/lv0
# 挂载快照
mkdir -p /mnt/snapshot
mount /dev/vg0/lv0_snapshot /mnt/snapshot
# 删除快照
umount /mnt/snapshot
lvremove /dev/vg0/lv0_snapshot
LVM 最佳实践
规划建议
-
PE 大小选择
- 小文件系统:4MB PE
- 大文件系统:64MB 或更大 PE
-
卷组命名
- 使用有意义的名称:
vg_data
,vg_backup
- 避免使用默认名称
vg0
- 使用有意义的名称:
-
逻辑卷命名
- 使用描述性名称:
lv_app_data
,lv_logs
- 包含用途信息
- 使用描述性名称:
性能优化
# 使用条带化提高性能
lvcreate -L 100G -i 3 -I 256 -n lv_striped vg0
# 使用镜像提高可用性
lvcreate -L 100G -m 1 -n lv_mirrored vg0
监控和维护
# 查看 LVM 状态
lvs -o +devices
vgs -o +pv_name
# 检查 LVM 元数据
vgcfgbackup vg0
vgcfgrestore vg0
故障排查
常见问题
- 物理卷丢失
# 扫描丢失的物理卷
pvscan --cache
# 重新激活卷组
vgchange -ay vg0
- 逻辑卷无法挂载
# 检查逻辑卷状态
lvdisplay /dev/vg0/lv0
# 激活逻辑卷
lvchange -ay /dev/vg0/lv0
- 卷组无法访问
# 检查卷组状态
vgdisplay vg0
# 重新扫描卷组
vgscan
数据恢复
# 从备份恢复 LVM 配置
vgcfgrestore -f /etc/lvm/backup/vg0 vg0
# 重新激活卷组
vgchange -ay vg0
总结
LVM 是 Linux 系统中强大的存储管理工具,提供了:
- 灵活性:动态调整存储大小
- 可靠性:支持快照和镜像
- 性能:支持条带化和缓存
- 可管理性:统一的存储管理接口
通过合理使用 LVM,可以构建高效、可靠、可扩展的存储解决方案,特别适合 Kubernetes 等现代容器化环境的需求。