LVM 快照

LVM 快照是 Linux 逻辑卷管理提供的 "秒级瞬间定格" 技术。它能在几毫秒内为你的整个数据卷创建一个可读写的 "历史镜像",而无需复制任何实际数据

LVM 快照并非完整复制原始数据,它通过 "写时复制 (Copy-On-Write,COW) " 机制共享原始 LV(称为 "源 LV" )的数据块,仅在源 LV 或快照 LV 发生修改时才复制变化的数据,因此空间占用远小于完整副本

如何合理规划快照大小?(原则:宁大勿小,避免 COW 区域满导致快照失效)

短期快照(如升级前):通常分配源 LV 大小的 10%-20%(如 100GB 源 LV 分配 10-20GB 快照)

长期快照(不推荐):需根据业务写入量动态调整(如数据库服务器可能需 50% 以上)

LVM 快照核心特性:

  • 轻量化:初始不占用额外空间(仅需少量元数据),随数据变化动态增长
  • 即时创建:无需等待数据复制,创建过程毫秒级完成
  • 临时性质:设计用于短期场景(如备份、测试),不建议长期保留
  • 双向可用:可从快照恢复源 LV,或从源 LV 更新快照(需读写快照)

LVM 快照的工作流程如下:

  1. 创建快照时:快照 LV 与源 LV 共享所有数据块,快照仅记录 "指向源 LV 数据块" 的元数据,不占用实际数据空间(仅需为 COW 区域分配少量空间)
  2. 源 LV 写入数据时:
    • 若源 LV 要修改某个数据块,LVM 会先将该块的原始数据复制到快照的 COW 区域
    • 然后源 LV 才会写入新数据。此时,快照通过 COW 区域保留了修改前的数据
  3. 快照 LV 写入数据时(仅读写快照):
    • 若快照是读写模式,修改快照数据时,直接写入快照自身的 COW 区域,不影响源 LV

LVM 快照的创建与管理

# 先创建一个 5G 大小的 lv

image

# 格式化并挂载

image

# 创建测试数据

image

# 创建快照并模拟数据丢失(-s 表示创建 snapshot)

image

# 从快照恢复数据(lvm 快照是一次性的,恢复快照后对应 lv 自动删除)

# lvconvert --mergesnapshot 是最后一颗 "后悔药",如果确认必须整体回滚,果断卸载并执行它;如果只是个别文件问题,请挂载快照手动还原文件,别轻易动用这颗核弹

# 挂载快照前不要使用 mkfs 命令,挂载需使用 mount -t <xfs/ext[234]> -o ro,nouuid 选项(快照文件系统类型取决于 "源 LV" 文件系统类型)

# 如果仍然挂载失败,检查文件系统一致性:

fsck -f /dev/<vg-name>/<lv-snapshot_name> (EXT4)

xfs_repair /dev/<vg-name>/<lv-snapshot_name>(XFS)

image

posted @ 2026-09-08 14:16  demoduan  阅读(4)  评论(0)    收藏  举报