字数 1659,阅读大约需 9 分钟

LVM 不仅能管理存储,还能做软 RAID。本篇讲清 LVM 的两大特性:条带化(Striping,提速) 和 镜像(Mirroring,备份),以及 lvconvert 的类型转换。
把数据轮流写到多块盘上,提升顺序读写性能。类似 RAID 0。
文件块: [B1][B2][B3][B4][B5][B6]
↓ ↓ ↓
磁盘: sdb sdc sdd (循环写入)优势:
劣势:
$ lvcreate -L 30G -i 3 -I 64 -n lv_stripe vg_data参数:
-i 3 | |
-I 64 | |
-L 30G |
要求:VG 至少有 3 块 PV。
经验:先按 64K 测试,再按业务负载调到 128K 或 256K。
$ lvs --segments
LV VG #Seg Type SSize
lv_stripe vg_data 1 striped 30.00g
lv_stripe vg_data 1 striped 10.00g /dev/sdb 0
lv_stripe vg_data 1 striped 10.00g /dev/sdc 0
lv_stripe vg_data 1 striped 10.00g /dev/sdd 0Type 显示 striped 就是条带 LV。
不能直接转!要:
# 1. 备份数据
# 2. 删除原 LV
$ lvremove /dev/vg_data/lv_demo
# 3. 重新创建为条带
$ lvcreate -L 10G -i 2 -I 64 -n lv_demo vg_data
# 4. 还原数据把数据复制到多块盘上,提供冗余。类似 RAID 1。
写入: [B1] → 同时写入 sdb 和 sdc
读出: [B1] ← 从 sdb 或 sdc 读取(负载均衡)优势:
劣势:
# -m 1 表示 1 份镜像(即总共 2 份:1 份数据 + 1 份镜像)
$ lvcreate -L 10G -m 1 -n lv_mirror vg_data /dev/sdb /dev/sdc参数:
-m 1 | |
/dev/sdb /dev/sdc |
要求:
刚创建时,后台在做数据同步。看进度:
$ lvs vg_data
LV VG Attr LSize Cpy%Sync
lv_mirror vg_data mwi-a-m--- 10.00g 45.32m = mirror,Cpy%Sync = 同步百分比。等 100% 后才是真正冗余。
mirror log 是关键元数据,建议放 SSD 上:
$ lvcreate -L 10G -m 1 --mirrorlog mirrored -n lv_mirror vg_data \
/dev/sdb /dev/sdc /dev/nvme0n1p1--mirrorlog mirrored 把 log 也做镜像(生产推荐)。--mirrorlog core 用内存,但重启会丢 log。--mirrorlog disk(默认)放盘上,单点风险。
镜像的好处就是单盘损坏后自动降级:
# 1. 发现 /dev/sdc 故障,从 VG 移除
$ vgreduce --removemissing vg_data
# 2. 物理换上新盘
$ pvcreate /dev/sdc # 假设换了新盘(同设备名)
$ vgextend vg_data /dev/sdc
# 3. 修复镜像(自动同步)
$ lvconvert --repair vg_data/lv_mirror# 给已有的 lv_demo 加镜像(不影响业务)
$ lvconvert -m 1 /dev/vg_data/lv_demo /dev/sdc后台同步,进度看 Cpy%Sync。
# 拆除镜像(变回单盘)
$ lvconvert -m 0 /dev/vg_data/lv_mirror /dev/sdb传统的 -m 1 镜像有一些局限(如:单点 log、扩展不灵活)。LVM 提供 RAID1 / RAID5 / RAID6 / RAID10 风格:
# 创建 RAID1
$ lvcreate --type raid1 -L 10G -n lv_raid1 vg_data \
/dev/sdb /dev/sdc
# 创建 RAID5(至少 3 块盘)
$ lvcreate --type raid5 -L 20G -i 2 -n lv_raid5 vg_data \
/dev/sdb /dev/sdc /dev/sdd
# 创建 RAID6(至少 4 块盘)
$ lvcreate --type raid6 -L 30G -i 3 -n lv_raid6 vg_data \
/dev/sdb /dev/sdc /dev/sdd /dev/sde
# 创建 RAID10(条带+镜像)
$ lvcreate --type raid10 -L 20G -i 2 -m 1 -n lv_raid10 vg_data \
/dev/sdb /dev/sdc /dev/sdd /dev/sdeRAID 风格镜像 vs 传统 -m 1:
-m 1 | --type raid1 | |
|---|---|---|
m | r |
生产推荐用
--type raid1,更现代、更灵活。
LVM 可以把 SSD 用作机械盘的读/写缓存,提升随机 I/O 性能。
# SSD 做 cache pool(先把 SSD 做成 cache pool)
$ lvcreate -L 50G -n cache_pool vg_data /dev/nvme0n1
# 把 cache pool 转换成 cache pool 类型
$ lvconvert --type cache-pool --cachemode writethrough vg_data/cache_pool# 把 lv_data 接入缓存
$ lvconvert --type cache --cachepool vg_data/cache_pool vg_data/lv_data效果:
writethrough | |
writeback | |
passthrough |
# 把 LV 从缓存中拆出来(缓存失效,但 LV 完整)
$ lvconvert --uncache vg_data/lv_datalvconvert 是 LVM 的"变形金刚",常用转换:
lvconvert -m 1 vg/lv /dev/sdX | |
lvconvert -m 0 vg/lv | |
lvconvert --type raid1 -m 1 vg/lv | |
lvconvert --type linear vg/lv | |
lvconvert --type cache --cachepool vg/cp vg/lv | |
lvconvert --uncache vg/lv | |
lvconvert --repair vg/lv | |
lvconvert --type thin-pool vg/pool | |
lvconvert --splitcache vg/cp |
你的需求是什么?
│
├── 极致顺序读性能(视频、备份)
│ └── Striping(RAID 0)
│
├── 极致顺序读性能 + 冗余
│ └── RAID10 / RAID 5/6
│
├── 高冗余(关键数据)
│ └── RAID1 / RAID6
│
├── 利用 SSD 提升慢盘性能
│ └── LVM Cache
│
└── 灵活分配、按需使用
└── Thin Provisioning(见下一篇)lvcreate -i N -I size | |||
lvcreate -m 1--type raid1 | |||
lvcreate --type raid5/6 -i N | |||
lvconvert --type cache |
生产环境最常用:
raid10 或 raid5 + SSD cacheraid6striped(可丢)raid1