跳到主要内容

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 最佳实践

规划建议

  1. PE 大小选择

    • 小文件系统:4MB PE
    • 大文件系统:64MB 或更大 PE
  2. 卷组命名

    • 使用有意义的名称:vg_data, vg_backup
    • 避免使用默认名称 vg0
  3. 逻辑卷命名

    • 使用描述性名称: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

故障排查

常见问题

  1. 物理卷丢失
# 扫描丢失的物理卷
pvscan --cache

# 重新激活卷组
vgchange -ay vg0
  1. 逻辑卷无法挂载
# 检查逻辑卷状态
lvdisplay /dev/vg0/lv0

# 激活逻辑卷
lvchange -ay /dev/vg0/lv0
  1. 卷组无法访问
# 检查卷组状态
vgdisplay vg0

# 重新扫描卷组
vgscan

数据恢复

# 从备份恢复 LVM 配置
vgcfgrestore -f /etc/lvm/backup/vg0 vg0

# 重新激活卷组
vgchange -ay vg0

总结

LVM 是 Linux 系统中强大的存储管理工具,提供了:

  • 灵活性:动态调整存储大小
  • 可靠性:支持快照和镜像
  • 性能:支持条带化和缓存
  • 可管理性:统一的存储管理接口

通过合理使用 LVM,可以构建高效、可靠、可扩展的存储解决方案,特别适合 Kubernetes 等现代容器化环境的需求。