LVM vs 传统分区深度对比
磁盘分区是服务器部署的第一步。LVM和传统分区各有什么优劣?本文帮你做出正确选择。
一、架构对比
【传统分区架构】
物理磁盘 /dev/sdb
↓
分区 /dev/sdb1, /dev/sdb2
↓
格式化 mkfs.ext4 /dev/sdb1
↓
挂载 mount /dev/sdb1 /data
【LVM架构】
物理磁盘 /dev/sdb, /dev/sdc
↓
物理卷 PV: pvcreate /dev/sdb /dev/sdc
↓
卷组 VG: vgcreate vg_data /dev/sdb /dev/sdc
↓
逻辑卷 LV: lvcreate -n lv_app -L 100G vg_data
↓
格式化 mkfs.ext4 /dev/vg_data/lv_app
↓
挂载 mount /dev/vg_data/lv_app /data
二、功能对比
| 功能 | 传统分区 | LVM |
|---|---|---|
| 在线扩容 | ❌ 需卸载/停机 | ✅ 在线扩容 |
| 跨磁盘 | ❌ 单盘限制 | ✅ 多盘合并 |
| 快照 | ❌ 不支持 | ✅ 支持快照 |
| 条带化 | ❌ 不支持 | ✅ 提升性能 |
| 复杂度 | 简单 | 稍复杂 |
| 性能损耗 | 无 | <5% |
三、扩容操作对比
【传统分区扩容】(风险高,需停机) # 1. 卸载分区 umount /data # 2. 调整分区大小(危险操作!) fdisk /dev/sdb # 删除旧分区 → 创建更大的分区 # ⚠️ 如果操作失误,数据全丢! # 3. 调整文件系统 resize2fs /dev/sdb1 # 4. 重新挂载 mount /dev/sdb1 /data
【LVM扩容】(在线,无需停机) # 1. 检查VG剩余空间 vgdisplay vg_data # 2. 如果VG空间不足,添加新磁盘 pvcreate /dev/sdd vgextend vg_data /dev/sdd # 3. 扩展逻辑卷(在线!) lvextend -L +100G /dev/vg_data/lv_app # 或 lvextend -l +100%FREE /dev/vg_data/lv_app # 4. 扩展文件系统(在线!) resize2fs /dev/vg_data/lv_app # 或 xfs_growfs /data # 完成!全程无需卸载,应用无感知
四、LVM快照功能
# 创建快照(瞬间完成,不影响业务) lvcreate -n lv_snap -L 20G -s /dev/vg_data/lv_app # 挂载快照(查看某一时刻的数据) mount /dev/vg_data/lv_snap /mnt/snapshot # 从快照恢复(数据误删时救命) umount /data lvconvert --merge /dev/vg_data/lv_snap # 恢复快照后,原LV数据回到快照时刻 # 删除快照 umount /mnt/snapshot lvremove /dev/vg_data/lv_snap
五、使用场景建议
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 根分区 / | 传统分区 | 简单稳定,无需频繁调整 |
| 数据分区 /data | LVM | 未来可能需要扩容 |
| 数据库 | LVM | 快照备份、在线扩容 |
| 日志分区 | 传统分区 | 定期清理即可 |
| 虚拟机镜像 | LVM | 灵活调整大小 |
六、LVM常用命令速查
# 物理卷PV pvcreate /dev/sdb # 创建PV pvdisplay # 查看PV pvs # 简洁查看 pvremove /dev/sdb # 删除PV # 卷组VG vgcreate vg0 /dev/sdb # 创建VG vgextend vg0 /dev/sdc # 扩展VG vgdisplay # 查看VG vgs # 简洁查看 vgreduce vg0 /dev/sdb # 从VG移除PV # 逻辑卷LV lvcreate -n lv0 -L 100G vg0 # 创建LV lvextend -L +50G /dev/vg0/lv0 # 扩展LV lvreduce -L -50G /dev/vg0/lv0 # 缩小LV(谨慎!) lvdisplay # 查看LV lvs # 简洁查看 lvremove /dev/vg0/lv0 # 删除LV
七、性能考虑
# LVM有轻微性能损耗,主要来自: # 1. 额外的抽象层映射 # 2. 快照时的COW(写时复制)开销 # 优化建议: # 1. 数据库等高性能场景,使用裸设备或考虑性能损耗 # 2. 启用read_ahead提升顺序读性能 blockdev --setra 8192 /dev/vg_data/lv_app # 3. SSD使用none调度器 echo none > /sys/block/dm-0/queue/scheduler
总结
生产环境强烈建议数据盘使用LVM。虽然有一点学习成本和性能损耗,但在线扩容和快照功能带来的便利远超这些代价。
