一、LVM核心概念
记住核心逻辑:物理磁盘 → 物理卷 → 卷组 → 逻辑卷 → 挂载使用,核心组件如下:
1. 物理卷(PV)
LVM的基础原料,可是空闲物理磁盘(如/dev/sdb)或磁盘分区(如/dev/sdb1),标记为PV后即可被LVM使用,推荐先分区再做PV,更灵活。
2. 卷组(VG)
将多个PV合并成“磁盘池”,汇总所有PV容量,逻辑卷从这里分配空间(例:两块100G PV可组成200G VG)。
3. 逻辑卷(LV)
从VG中划分的“虚拟分区”,格式化挂载后可像普通磁盘使用,核心优势是能随时调整容量,无需迁移数据。
4. 扩展单元(PE)
LVM最小分配单位,默认4MB,逻辑卷容量需为PE整数倍,默认大小足够日常使用,无需刻意调整。
二、前期准备
1. 环境要求
基于Linux系统,需至少一块空闲磁盘/分区,建议用虚拟机测试,避免损坏数据。
# 查看空闲磁盘
lsblk 或 fdisk -l
2. 安装LVM工具
# CentOS/RHEL
yum install -y lvm2
# Ubuntu/Debian
apt update && apt install -y lvm2
三、从零创建LVM
以两块空闲磁盘(/dev/sdb、/dev/sdc)为例,步骤如下:
步骤1:创建物理卷(PV)
pvcreate /dev/sdb /dev/sdc # 创建PV
pvs # 验证创建结果
步骤2:创建卷组(VG)
vgcreate vg_data /dev/sdb /dev/sdc # 创建名为vg_data的VG
vgs # 验证
步骤3:创建逻辑卷(LV)
lvcreate -L 50G -n lv_data vg_data # 从VG划分50G LV,命名lv_data
lvs # 验证
LV设备路径:/dev/vg_data/lv_data
步骤4:格式化并挂载
mkfs.ext4 /dev/vg_data/lv_data # 格式化为ext4
mkdir -p /mnt/data # 创建挂载目录
mount /dev/vg_data/lv_data /mnt/data # 临时挂载
# 永久挂载(重启生效)
echo "/dev/vg_data/lv_data /mnt/data ext4 defaults 0 0" >> /etc/fstab
df -h # 验证挂载
四、核心操作:逻辑卷扩容
将lv_data从50G扩容到100G(卷组需有足够空闲空间):
vgs # 查看VG剩余空间
lvextend -L 100G /dev/vg_data/lv_data # 扩容LV
resize2fs /dev/vg_data/lv_data # 更新ext4文件系统(xfs用xfs_growfs)
df -h # 验证
五、注意事项
- 操作前用lsblk确认空闲磁盘,避免误操作系统盘(/dev/sda)。
- LV扩容后必须更新文件系统,否则df -h看不到新增容量。
- 缩容前必须卸载LV并检查文件系统,防止数据丢失。
- LV完整路径为/dev/卷组名/逻辑卷名(如/dev/vg_data/lv_data)。
六、最后用人话总结PV→VG→LV就是:
在LVM的世界里PV是食材、VG是锅、LV是碗,你的新挂载的硬盘相当于食材(这里是青椒,猪肉丝)。现在你有一个碗(这里是白米饭),你觉得吃不饱或不好吃,有需求加点菜。你就要从锅(制作成有盐有油有温度的菜)里取到碗里,实现你所需求的青椒肉丝盖浇饭。
但是你在正常的情况下是无法直接把食材配饭吃的(抬杠当我没说),以及社会的规则下,你也不好直接去锅里夹菜直接吃,这时候PV→VG→LV的顺序就应运而生了!