当前位置:首页>Linux>Linux LVM(四):条带化与镜像

Linux LVM(四):条带化与镜像

  • 2026-10-11 05:36:43
Linux LVM(四):条带化与镜像

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

LVM 不仅能管理存储,还能做软 RAID。本篇讲清 LVM 的两大特性:条带化(Striping,提速) 和 镜像(Mirroring,备份),以及 lvconvert 的类型转换。

一、条带化(Striping)

1.1 原理

把数据轮流写到多块盘上,提升顺序读写性能。类似 RAID 0。

文件块:   [B1][B2][B3][B4][B5][B6]
           ↓   ↓   ↓
磁盘:     sdb sdc sdd    (循环写入)

优势:

  • • 顺序读写带宽 ≈ N 块盘叠加
  • • 适合大文件顺序读写(视频、备份、数据库表扫描)

劣势:

  • • 没有冗余,任何一块盘坏,全部数据丢失
  • • 块大小不合适会拖慢随机 I/O

1.2 创建条带 LV

$ lvcreate -L 30G -i 3 -I 64 -n lv_stripe vg_data

参数:

参数
含义
-i 3
stripe 数(用几块盘)
-I 64
stripe 大小(KiB),常见值:64、128、256
-L 30G
LV 总大小(必须是 stripe 数 × stripe 大小的整数倍)

要求:VG 至少有 3 块 PV。

1.3 stripe 大小怎么选?

场景
推荐 stripe 大小
大文件顺序 I/O(视频、备份)
256 KiB ~ 1 MiB
数据库(特别是 OLTP)
64 KiB ~ 128 KiB
普通文件系统
64 KiB(默认)
虚拟化磁盘
64 KiB ~ 256 KiB

经验:先按 64K 测试,再按业务负载调到 128K 或 256K。

1.4 验证条带

$ 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 0

Type 显示 striped 就是条带 LV。

1.5 普通 LV 转条带

不能直接转!要:

# 1. 备份数据
# 2. 删除原 LV

$ lvremove /dev/vg_data/lv_demo

# 3. 重新创建为条带

$ lvcreate -L 10G -i 2 -I 64 -n lv_demo vg_data

# 4. 还原数据

二、镜像(Mirroring)

2.1 原理

把数据复制到多块盘上,提供冗余。类似 RAID 1。

写入:    [B1] → 同时写入 sdb 和 sdc
读出:    [B1] ← 从 sdb 或 sdc 读取(负载均衡)

优势:

  • • 单盘损坏不丢数据
  • • 读性能可能提升(多源读)
  • • 镜像转换可在后台进行

劣势:

  • • 容量利用率 = 1/N(N=镜像数)
  • • 写性能略降(多写一份)
  • • 同步写需要日志盘

2.2 创建镜像 LV

# -m 1 表示 1 份镜像(即总共 2 份:1 份数据 + 1 份镜像)
$ lvcreate -L 10G -m 1 -n lv_mirror vg_data /dev/sdb /dev/sdc

参数:

参数
含义
-m 1
镜像份数(1 = 共 2 份,2 = 共 3 份)
/dev/sdb /dev/sdc
显式指定盘,更安全(避免自动选同一块盘)

要求:

  • • VG 至少有 2 块 PV
  • • 默认会创建 mirror log(也称 log LV),需要单独空间

2.3 镜像同步进度

刚创建时,后台在做数据同步。看进度:

$ lvs vg_data
  LV        VG      Attr       LSize  Cpy%Sync
  lv_mirror vg_data mwi-a-m--- 10.00g    45.32

m = mirror,Cpy%Sync = 同步百分比。等 100% 后才是真正冗余。

2.4 单独指定 log 盘

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(默认)放盘上,单点风险。

2.5 故障盘替换

镜像的好处就是单盘损坏后自动降级:

# 1. 发现 /dev/sdc 故障,从 VG 移除
$ vgreduce --removemissing vg_data

# 2. 物理换上新盘

$ pvcreate /dev/sdc     # 假设换了新盘(同设备名)
$ vgextend vg_data /dev/sdc

# 3. 修复镜像(自动同步)

$ lvconvert --repair vg_data/lv_mirror

2.6 转换普通 LV 为镜像

# 给已有的 lv_demo 加镜像(不影响业务)
$ lvconvert -m 1 /dev/vg_data/lv_demo /dev/sdc

后台同步,进度看 Cpy%Sync。

2.7 拆除镜像

# 拆除镜像(变回单盘)
$ lvconvert -m 0 /dev/vg_data/lv_mirror /dev/sdb

三、RAID 风格镜像(推荐用于生产)

传统的 -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/sde

RAID 风格镜像 vs 传统 -m 1:

特性
-m 1
 传统
--type raid1
Log
单独 log 卷
内置 metadata
扩展镜像数
限制多
灵活
性能
一般
更好
显示
mr

生产推荐用 --type raid1,更现代、更灵活。

四、LVM Cache:把 SSD 当 HDD 的缓存

LVM 可以把 SSD 用作机械盘的读/写缓存,提升随机 I/O 性能。

4.1 创建缓存池

# 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

4.2 把现有 LV 接入缓存

# 把 lv_data 接入缓存
$ lvconvert --type cache --cachepool vg_data/cache_pool vg_data/lv_data

效果:

  • • 读热点数据从 SSD 命中,性能提升 5~10 倍
  • • 写也走 SSD 缓存(writeback 模式)

4.3 缓存模式

模式
行为
writethrough
写直达:数据写到 SSD 同时写 HDD,慢但安全
writeback
写回:数据先写 SSD,异步刷到 HDD,快但有丢数据风险
passthrough
直通:SSD 只做读缓存

4.4 拆分缓存

# 把 LV 从缓存中拆出来(缓存失效,但 LV 完整)
$ lvconvert --uncache vg_data/lv_data

五、lvconvert:万能转换器

lvconvert 是 LVM 的"变形金刚",常用转换:

用途
命令
加镜像
lvconvert -m 1 vg/lv /dev/sdX
去镜像
lvconvert -m 0 vg/lv
转 RAID1
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
转 thin
lvconvert --type thin-pool vg/pool
拆分 LV
lvconvert --splitcache vg/cp

六、选型决策树

你的需求是什么?
│
├── 极致顺序读性能(视频、备份)
│   └── Striping(RAID 0)
│
├── 极致顺序读性能 + 冗余
│   └── RAID10 / RAID 5/6
│
├── 高冗余(关键数据)
│   └── RAID1 / RAID6
│
├── 利用 SSD 提升慢盘性能
│   └── LVM Cache
│
└── 灵活分配、按需使用
    └── Thin Provisioning(见下一篇)

七、本篇小结

特性
创建命令
优势
风险
Striping
lvcreate -i N -I size
顺序读写翻倍
无冗余
镜像
lvcreate -m 1
 或 --type raid1
单盘坏不丢数据
容量减半
RAID5/6
lvcreate --type raid5/6 -i N
容量利用率高
写性能一般,重建慢
Cache
lvconvert --type cache
慢盘变快
配置复杂

生产环境最常用:

  • • 数据库:raid10 或 raid5 + SSD cache
  • • 文件存储:raid6
  • • 临时数据:striped(可丢)
  • • 系统盘:raid1

最新文章

随机文章