LVM 管理
LVM(Logical Volume Manager,逻辑卷管理器)是 Linux 中非常强大的磁盘管理工具,它在物理磁盘与文件系统之间增加了一层抽象,使得存储空间的分配和调整更加灵活。
LVM 核心概念
Section titled “LVM 核心概念”LVM 由三个层次组成:
| 层次 | 缩写 | 说明 |
|---|---|---|
| 物理卷 | PV (Physical Volume) | 底层磁盘或分区,是 LVM 的基础构建块 |
| 卷组 | VG (Volume Group) | 由一个或多个 PV 组合而成的存储池 |
| 逻辑卷 | LV (Logical Volume) | 从 VG 中分配的逻辑分区,可格式化挂载使用 |
层次关系如下:
磁盘/分区 --> PV --> VG --> LV --> 文件系统/dev/sdb1 --> PV1 -+ +--> vg_data --> lv_app --> /app/dev/sdc1 --> PV2 -+ --> lv_backup --> /backup安装 LVM 工具
Section titled “安装 LVM 工具”大多数企业 Linux 发行版已预装 LVM,如未安装:
sudo dnf install lvm2 -y创建物理卷(PV)
Section titled “创建物理卷(PV)”物理卷是 LVM 的基础层,需要先将磁盘或分区初始化为 PV。
准备磁盘分区
Section titled “准备磁盘分区”先使用 fdisk 或 gdisk 创建分区,并将分区类型设为 8e(Linux LVM):
sudo fdisk /dev/sdb# n -> p -> 1 -> 回车 -> 回车 -> t -> 8e -> wsudo partprobe /dev/sdb初始化物理卷
Section titled “初始化物理卷”sudo pvcreate /dev/sdb1sudo pvcreate /dev/sdc1也可以直接在整个磁盘上创建 PV(无需事先分区):
sudo pvcreate /dev/sdd查看物理卷信息
Section titled “查看物理卷信息”# 简洁列表sudo pvs
# 详细信息sudo pvdisplay /dev/sdb1创建卷组(VG)
Section titled “创建卷组(VG)”卷组将多个 PV 汇聚为一个统一的存储池。
sudo vgcreate vg_data /dev/sdb1 /dev/sdc1查看卷组信息
Section titled “查看卷组信息”# 简洁列表sudo vgs
# 详细信息sudo vgdisplay vg_data后续添加新磁盘时,可以将新的 PV 加入现有 VG:
sudo pvcreate /dev/sdd1sudo vgextend vg_data /dev/sdd1从卷组中移除物理卷
Section titled “从卷组中移除物理卷”# 先迁移数据到其他 PVsudo pvmove /dev/sdc1
# 再从 VG 中移除sudo vgreduce vg_data /dev/sdc1创建逻辑卷(LV)
Section titled “创建逻辑卷(LV)”逻辑卷是从卷组中划分出来的可用存储空间,可以格式化并挂载使用。
按指定大小创建
Section titled “按指定大小创建”sudo lvcreate -L 50G -n lv_app vg_data按卷组剩余空间的百分比创建
Section titled “按卷组剩余空间的百分比创建”# 使用卷组剩余空间的 100%sudo lvcreate -l 100%FREE -n lv_backup vg_data查看逻辑卷信息
Section titled “查看逻辑卷信息”# 简洁列表sudo lvs
# 详细信息sudo lvdisplay /dev/vg_data/lv_app格式化并挂载逻辑卷
Section titled “格式化并挂载逻辑卷”# 格式化为 XFSsudo mkfs.xfs /dev/vg_data/lv_app
# 创建挂载点并挂载sudo mkdir -p /appsudo mount /dev/vg_data/lv_app /app
# 验证df -hT /app配置 fstab 自动挂载
Section titled “配置 fstab 自动挂载”# 获取 LV 的 UUID(也可以直接使用 LV 路径)sudo blkid /dev/vg_data/lv_app
# 编辑 fstabecho '/dev/vg_data/lv_app /app xfs defaults 0 0' | sudo tee -a /etc/fstabLVM 最强大的功能之一就是在线扩展逻辑卷。
扩展 LV 并同时扩展文件系统
Section titled “扩展 LV 并同时扩展文件系统”使用 -r 参数可以在扩展 LV 的同时自动扩展文件系统:
# 增加 20G 空间sudo lvextend -r -L +20G /dev/vg_data/lv_app扩展到指定大小
Section titled “扩展到指定大小”# 将 LV 扩展到 100Gsudo lvextend -r -L 100G /dev/vg_data/lv_app使用所有剩余空间扩展
Section titled “使用所有剩余空间扩展”sudo lvextend -r -l +100%FREE /dev/vg_data/lv_app分步扩展(手动扩展文件系统)
Section titled “分步扩展(手动扩展文件系统)”如果不使用 -r 参数,需要手动扩展文件系统:
# 第一步:扩展 LVsudo lvextend -L +20G /dev/vg_data/lv_app
# 第二步:扩展文件系统# XFS 文件系统sudo xfs_growfs /app
# EXT4 文件系统sudo resize2fs /dev/vg_data/lv_app查看 LVM 状态:pvs/vgs/lvs
Section titled “查看 LVM 状态:pvs/vgs/lvs”这三个命令是日常运维中最常用的 LVM 状态查询命令。
pvs - 查看物理卷摘要
Section titled “pvs - 查看物理卷摘要”sudo pvsPV VG Fmt Attr PSize PFree/dev/sdb1 vg_data lvm2 a-- <50.00g 0/dev/sdc1 vg_data lvm2 a-- <50.00g 30.00gvgs - 查看卷组摘要
Section titled “vgs - 查看卷组摘要”sudo vgsVG #PV #LV #SN Attr VSize VFreevg_data 2 2 0 wz--n- 99.99g 30.00glvs - 查看逻辑卷摘要
Section titled “lvs - 查看逻辑卷摘要”sudo lvsLV VG Attr LSize Pool Origin Data% Meta%lv_app vg_data -wi-ao---- 50.00glv_backup vg_data -wi-ao---- 19.99g自定义输出字段
Section titled “自定义输出字段”# 显示 LV 名称、大小、卷组和设备路径sudo lvs -o lv_name,lv_size,vg_name,lv_pathLVM 快照
Section titled “LVM 快照”LVM 快照可以在某一时刻创建逻辑卷的只读或读写副本,常用于备份和测试。
# 为 lv_app 创建一个 10G 的快照sudo lvcreate -s -L 10G -n lv_app_snap /dev/vg_data/lv_app参数说明:
-s:表示创建快照-L 10G:快照空间大小(存储变化数据)-n lv_app_snap:快照名称
查看快照状态
Section titled “查看快照状态”sudo lvs快照卷会显示 Origin(源卷)和 Data%(已使用的快照空间百分比)。
挂载快照(只读方式访问历史数据)
Section titled “挂载快照(只读方式访问历史数据)”sudo mkdir -p /mnt/snapsudo mount -o ro /dev/vg_data/lv_app_snap /mnt/snap从快照恢复数据
Section titled “从快照恢复数据”可以从快照中复制需要的文件:
sudo cp /mnt/snap/important-file.conf /app/important-file.conf或者合并快照以回滚整个逻辑卷:
# 先卸载源卷和快照sudo umount /appsudo umount /mnt/snap
# 合并快照(回滚到快照时刻的状态)sudo lvconvert --merge /dev/vg_data/lv_app_snap
# 重新挂载sudo mount /dev/vg_data/lv_app /appsudo umount /mnt/snapsudo lvremove /dev/vg_data/lv_app_snap删除 LVM 资源
Section titled “删除 LVM 资源”删除时需要按照 LV -> VG -> PV 的顺序逐层操作。
-
卸载并删除逻辑卷:
Terminal window sudo umount /appsudo lvremove /dev/vg_data/lv_app -
删除卷组:
Terminal window sudo vgremove vg_data -
删除物理卷:
Terminal window sudo pvremove /dev/sdb1 /dev/sdc1
完整实战:从磁盘到 LVM 挂载
Section titled “完整实战:从磁盘到 LVM 挂载”以下演示使用两块新磁盘 /dev/sdb 和 /dev/sdc 搭建 LVM 存储的完整流程。
-
在两块磁盘上创建分区:
Terminal window sudo parted /dev/sdb mklabel gptsudo parted /dev/sdb mkpart primary 0% 100%sudo parted /dev/sdc mklabel gptsudo parted /dev/sdc mkpart primary 0% 100%sudo partprobe -
创建物理卷:
Terminal window sudo pvcreate /dev/sdb1 /dev/sdc1sudo pvs -
创建卷组:
Terminal window sudo vgcreate vg_data /dev/sdb1 /dev/sdc1sudo vgs -
创建逻辑卷:
Terminal window sudo lvcreate -L 80G -n lv_app vg_datasudo lvcreate -l 100%FREE -n lv_logs vg_datasudo lvs -
格式化并挂载:
Terminal window sudo mkfs.xfs /dev/vg_data/lv_appsudo mkfs.xfs /dev/vg_data/lv_logssudo mkdir -p /app /var/applogssudo mount /dev/vg_data/lv_app /appsudo mount /dev/vg_data/lv_logs /var/applogs -
配置开机自动挂载:
Terminal window sudo cp /etc/fstab /etc/fstab.bakcat <<EOF | sudo tee -a /etc/fstab/dev/vg_data/lv_app /app xfs defaults 0 0/dev/vg_data/lv_logs /var/applogs xfs defaults 0 0EOFsudo mount -a -
验证结果:
Terminal window df -hT /app /var/applogssudo pvs && sudo vgs && sudo lvs
LVM 的灵活性使其成为企业 Linux 环境中管理存储的首选方案。熟练掌握 PV、VG、LV 的操作以及在线扩展和快照功能,将极大提升存储管理效率。