LVM 核心概念
在执行命令前,必须理解 LVM 的三个核心组件:

-
物理卷
- 是什么:LVM 的基本存储块,可以是整个硬盘、一个硬盘分区或一个 RAID 设备。
- 类比:一堆砖块。
-
卷组
- 是什么:由一个或多个物理卷组成的存储池,您可以将多个物理卷合并成一个大的卷组,以提供更大的连续存储空间。
- 类比:用砖块砌成的一面墙。
-
逻辑卷
- 是什么:从卷组中划分出的逻辑分区,您可以根据需要创建、调整大小或删除逻辑卷,这些逻辑卷可以被格式化并挂载为文件系统。
- 类比:从墙上划分出的不同房间。
数据流向:物理卷 → 卷组 → 逻辑卷 → 文件系统 → 挂载点

LVM 管理命令详解
以下命令将按照 LVM 的生命周期进行组织:创建 → 管理 → 扩容/缩容 → 删除。
(一) 创建 LVM 环境
目标:将新的硬盘或分区转换为 LVM 可用的结构。
-
准备物理设备
- 确保您有一块新的、未分区的硬盘(
/dev/sdb),或者一个未格式化的分区(/dev/sdb1)。 - 使用
fdisk或parted进行分区(如果需要)。# 使用 fdisk 为 /dev/sdb 创建一个全盘分区 fdisk /dev/sdb # 在 fdisk 中,按 'n' 创建新分区,按 'p' 选择主分区,按 '1' 分区号, # 然后按两次回车使用默认的起始和结束扇区,最后按 'w' 保存。
- 确保您有一块新的、未分区的硬盘(
-
创建物理卷
(图片来源网络,侵删)- 使用
pvcreate命令将设备初始化为物理卷。# 对整个硬盘 /dev/sdb 创建 PV sudo pvcreate /dev/sdb
对分区 /dev/sdb1 创建 PV
sudo pvcreate /dev/sdb1
- 使用
-
创建卷组
- 使用
vgcreate命令创建一个新的卷组,并将一个或多个 PV 加入其中。# 创建名为 myvg 的卷组,使用 /dev/sdb sudo vgcreate myvg /dev/sdb
创建名为 myvg 的卷组,使用多个 PV
sudo vgcreate myvg /dev/sdb1 /dev/sdc1
- 使用
-
创建逻辑卷
- 使用
lvcreate命令从卷组中创建逻辑卷。# 在 myvg 中创建一个名为 mylv 的逻辑卷,大小为 10G sudo lvcreate -L 10G -n mylv myvg
在 myvg 中创建一个名为 mydata 的逻辑卷,使用 50% 的卷组空间
sudo lvcreate -l 50%FREE -n mydata myvg
在 myvg 中创建一个名为 mycache 的逻辑卷,大小为 500M
sudo lvcreate -L 500M -n mycache myvg
* **常用选项**: * `-L` 或 `--size`: 指定逻辑卷的大小,单位可以是 K, M, G, T。 * `-l` 或 `--extents`: 指定逻辑卷的大小,使用 PE(Physical Extent)的数量。 * `-n` 或 `--name`: 指定逻辑卷的名称。 - 使用
-
格式化并挂载
- 创建逻辑卷后,它会被创建为块设备,路径通常为
/dev/<卷组名>/<逻辑卷名>,/dev/myvg/mylv。 - 使用
mkfs命令格式化该设备。# 格式化为 ext4 文件系统 sudo mkfs.ext4 /dev/myvg/mylv
- 创建挂载点并挂载。
# 创建挂载点 sudo mkdir /mnt/mydata
挂载逻辑卷
sudo mount /dev/myvg/mylv /mnt/mydata
查看挂载情况
df -h
- 创建逻辑卷后,它会被创建为块设备,路径通常为
-
开机自动挂载
- 为了让系统重启后自动挂载,需要编辑
/etc/fstab文件。# 获取逻辑卷的 UUID sudo blkid /dev/myvg/mylv
编辑 fstab
sudo vim /etc/fstab
添加以下行 (请替换为实际的 UUID)
UUID=
/mnt/mydata ext4 defaults 0 2 - 为了让系统重启后自动挂载,需要编辑
(二) 查看 LVM 信息
目标:了解当前 LVM 的状态和配置。
-
查看所有物理卷
sudo pvdisplay # 或者使用更简洁的命令 sudo pvs
-
查看所有卷组
sudo vgdisplay # 或者使用更简洁的命令 sudo vgs
-
查看所有逻辑卷
sudo lvdisplay # 或者使用更简洁的命令 sudo lvs
-
查看 LVM 的整体结构
# 以树状图形式显示 PV, VG, LV 的关系 sudo pvscan sudo vgscan sudo lvscan # 一个非常强大的综合查看命令 sudo lvs -o +vg_name,lv_path,lv_size,lv_tags
(三) 扩容 LVM
目标:为逻辑卷增加空间。
重要:扩容分为两步:
-
扩容 LVM 层:增大逻辑卷的大小。
-
扩容文件系统层:让文件系统识别并使用新增的空间。
-
扩容逻辑卷
- 假设我们要将
/dev/myvg/mylv从 10G 扩容到 20G。# 增加 10G 空间 sudo lvextend -L +10G /dev/myvg/mylv
或者直接指定最终大小为 20G
sudo lvextend -L 20G /dev/myvg/mylv
- 假设我们要将
-
扩容文件系统
-
对于 ext2/ext3/ext4 文件系统:
# 检查文件系统 sudo e2fsck -f /dev/myvg/mylv # 调整文件系统大小以填满逻辑卷 sudo resize2fs /dev/myvg/mylv
-
对于 XFS 文件系统:
# XFS 文件系统在线扩容非常方便,无需卸载 sudo xfs_growfs /mnt/mydata # 或者指定设备路径 # sudo xfs_growfs /dev/myvg/mylv
-
-
验证扩容结果
df -h
(四) 缩容 LVM
目标:减小逻辑卷的大小。
⚠️ 警告:缩容操作有风险,可能导致数据丢失!请务必提前备份所有重要数据!
重要:缩容的顺序与扩容相反:
-
缩容文件系统层:先缩小文件系统的大小。
-
缩容 LVM 层:再缩小逻辑卷本身。
-
卸载逻辑卷
- 在缩容文件系统之前,必须先卸载它。
sudo umount /mnt/mydata
- 在缩容文件系统之前,必须先卸载它。
-
缩容文件系统
-
对于 ext2/ext3/ext4 文件系统:
# 检查文件系统 sudo e2fsck -f /dev/myvg/mylv # 缩小文件系统大小到 5G (必须小于等于当前逻辑卷大小) sudo resize2fs /dev/myvg/mylv 5G
-
对于 XFS 文件系统:
- XFS 文件系统不支持在线缩容,通常的做法是创建一个新的、小一点的逻辑卷,将数据复制过去,然后删除旧的逻辑卷。
-
-
缩容逻辑卷
- 在文件系统缩容完成后,现在可以安全地缩小逻辑卷了。
# 将逻辑卷大小缩小到 5G sudo lvreduce -L 5G /dev/myvg/mylv # 系统会提示确认,输入 'y' 继续
- 在文件系统缩容完成后,现在可以安全地缩小逻辑卷了。
-
重新挂载并验证
sudo mount /dev/myvg/mylv /mnt/mydata df -h
(五) 删除 LVM 环境
目标:彻底移除 LVM 配置,释放物理空间。
-
卸载并删除文件系统
- 确保逻辑卷已卸载。
sudo umount /mnt/mydata
- 确保逻辑卷已卸载。
-
删除逻辑卷
sudo lvremove /dev/myvg/mylv # 系统会提示确认,输入 'y' 继续
-
删除卷组
- 确保卷组中已经没有任何逻辑卷。
sudo vgremove myvg
- 确保卷组中已经没有任何逻辑卷。
-
删除物理卷
sudo pvremove /dev/sdb # 或者删除分区 # sudo pvremove /dev/sdb1
高级操作
-
添加物理卷到卷组
# 假设新硬盘是 /dev/sdd sudo pvcreate /dev/sdd sudo vgextend myvg /dev/sdd
-
从卷组中移除物理卷
# 首先确保 VG 中有足够的空闲空间,或者可以迁移数据 # 使用 pvmove 将 /dev/sdd 上的数据迁移到 VG 的其他 PV 上 sudo pvmove /dev/sdd # 然后从 VG 中移除该 PV sudo vgreduce myvg /dev/sdd # 最后删除该 PV sudo pvremove /dev/sdd
-
快照
- 快照是某个逻辑卷在特定时间点的只读副本,非常适合用于备份。
# 为 mylv 创建一个 2G 大小的快照,名为 mylv_snap sudo lvcreate -L 2G -s -n mylv_snap /dev/myvg/mylv
- 快照是某个逻辑卷在特定时间点的只读副本,非常适合用于备份。
-
重命名
- 重命名逻辑卷:
sudo lvrename myvg/mylv myvg/newlv_name
- 重命名卷组:
sudo vgrename old_vg_name new_vg_name
- 重命名逻辑卷:
希望这份详细的 LVM 命令指南能对您有所帮助!在生产环境中执行任何修改操作前,请务必备份数据。
