干货 | LVM快照学习

一个执着于技术的公众号

前言

在上一章节,我们学习了LVM逻辑卷管理技术,知道了LVM能够通过增减PE的数量来弹性调整文件系统的大小。除此之外,LVM还有另一个重要功能「LVM快照技术」,也就是可以给文件系统做一个备份。

LVM快照原理

在讲LVM之前,大家先思考一个问题;为什么不管多大的逻辑卷进行备份,快照都会在几秒之内完成?

其实LVM快照采用写时复制技术(copy-on-wire,COW),即当LVM快照创建的一瞬间,系统会记录那个时间点逻辑卷的状态、数据等。此时拍下的快照相当于一张白纸。如图所示:

快照做好后,随着时间的推移,源卷里的东西会发生改变。如数据1、2改写成了A、B,如下图:

此时lv源卷里发生改变的数据会转移到快照卷里面去。当恢复快照时,源卷会和快照进行合并,源卷里没有改变的数据+快照卷,就恢复到最初的状态

「注意」

  • 快照卷空间大小不能设置太小,否则当源卷数据改变太大时,快照卷没法装下。快照卷大小封顶由卷组(VG)的大小决定。

  • 快照与待备份的逻辑卷(LV)必须要在同一个VG下,否则创建快照会失败。

创建 LVM 快照

1、实验准备


在做LVM快照之前,我们先把逻辑卷创建出来:

1)事先准备4个分区

2)创建PV

3)创建卷组vg1

4)创建大小为10G的逻辑卷lv1

5)格式化&&挂载至/data下

6)写入数据,以便后面实验验证


2、LVM快照实验

在创建快照之前,我们先查看下系统当前的LV及VG的使用情况

通过查询,得知逻辑卷lv1大小为10G,所属卷组vg1;卷组vg1容量为40G,空闲容量还有30G。因此我们有足够的资源为逻辑卷lv1创建快照。

1、创建快照

参数解释:

  -L:指定快照卷大小
  --snapshot :指定创建类型为快照卷
  --name:指定快照卷名称
  /dev/vg1/lv1:代表要对lv1卷打快照

其实快照就是一个特殊类型的逻辑卷,跟创建逻辑卷的命令相同,也是lvcreate。

  • lvs查询快照卷

2、模拟数据受损,以便进行备份恢复

这里代表原始数据是hello world,被恶意更改为hello worl。现在我们采用「LVM快照回滚」找回我们的“重要数据”

3、挂载快照

「这里有个报错哦」


排错步骤如下:

1)根据提示,执行dmesg | tail

2)根据报错提示,无法挂载此UUID的磁盘。我们再查看下磁盘的UUID吧

这时会发现:逻辑卷lv1与快照卷lv1_snap001共用同一个UUID了。通过查询资料,得出以下结论:

如果逻辑卷使用的文件系统为xfs,挂载快照卷时会报错的。因为xfs不允许相同的UUID文件系统直接挂载(快照是LVM的克隆,因此UUID是一致的)。要解决这个办法,要么修改其UUID,要么带上nouuid参数,让文件系统忽略相同的UUID所造成的问题。

3)我们这里选择带上nouuid参数,执行结果如下图:

问题解决,快照卷已挂载至/data_bak


4、还原数据

以上实验是我们明确知道需要还原的某个文件,因此挂载快照卷,直接拷贝其快照卷中的文件即可。但是,当数据卷上有很多小文件,数据都有可能被改变。这种情况就不适用上面的方法了。接下来我们介绍还原数据卷上所有数据的方式。

还原整个逻辑卷的数据

1、挂载快照卷2、把快照中的数据导出

  • 本实验将快照卷的数据导至/opt目录

3、卸载数据卷&&格式化数据卷&&重新挂载

此时数据卷已无数据,现在利用我们备份的数据进行恢复

4、把数据还原到源数据卷

这样就把创建快照时刻的数据完全还原出来了,只不过操作有点繁琐。接下来,我们用一种更简单方法,利用「合并快照」两步搞定数据还原。

合并快照(merge snapshot)

1、老规矩,先模拟大量重要数据受损,需要恢复整个逻辑卷的情况:

这里的大量文件,就特指test文件吧

2、卸载数据卷和快照卷

3、合并快照

确认源数据卷和快照数据卷都没有被挂载后就可以执行合并快照的操作了:

注意,合并快照的操作会自动删除快照数据卷,如下图所示:

4、重新挂载源数据卷

test文件内容已变成“hello world”,说明整个数据卷上的内容已经被还原到了创建快照的时刻。

总结

快照是 LVM 中的一个稍微高级一点的话题,但仅就日常使用来说,本文介绍的常见用法足够大家愉快的开启探索之旅了。


  往期精彩  

◆  手把手教你搭建一套OpenStack云平台

◆  带你体验一次原生OpenStack发放云主机的过程

◆  Linux运维工程师面试问答录

◆  干货 | Linux平台搭建网关服务器

◆  干货 | 理解正向代理与反向代理的区别

◆  硬核科普服务器硬盘组成与基本原理

◆  一文带你速懂虚拟化KVM和XEN

◆  实战 | Hadoo大数据集群搭建

◆  运维工程师心法:6大技能让你告别背锅

<think>嗯,用户想了解Linux LVM快照的还原方法。我之前学过一些LVM的知识,但快照这部分可能有点模糊,得仔细回忆一下。首先,LVM快照是用来做什么的呢?应该是用来创建逻辑的某个时间点的副本,方便之后恢复数据对吧。那快照的原理是写时复制,也就是说当原始数据有变化时,旧数据会被复制到快照空间中。所以还原的时候可能需要合并快照或者用快照数据覆盖原? 接下来,用户具体需要的是还原步骤。我记得可能有几种方法,比如使用lvconvert合并,或者直接挂载快照然后复制数据。不过哪种方法更常用呢?可能要根据具体情况,比如是否需要保持原在线,或者快照的大小是否足够。 步骤方面,首先需要确认当前的LVM设置,查看有哪些逻辑快照。用lvdisplay命令应该可以。然后,如果要还原的话,可能需要卸载文件系统?不过如果文件系统在根目录下,可能需要进入单用户模式或者使用Live CD。这点需要注意,避免数据损坏。 另外,还原的时候可能会用到lvconvert --merge命令,这个命令会把快照合并到原中。但必须确保快照没有被激活,或者需要先卸载相关的设备。比如,如果有快照的名字是vg0/snap1,对应的原是vg0/lv1,那么执行lvconvert --merge vg0/snap1之后,系统会自动在下次激活时合并。可能需要重启或者重新激活组? 还有一个方法是直接使用dd命令将快照数据复制回原,但这样可能需要快照的大小足够,并且要确保文件系统的一致性,可能需要先冻结文件系统或者确保没有写入操作。 还要注意,创建快照的时候,如果原数据变化很大,快照空间可能会被占满,导致快照失效。所以在还原之前,应该检查快照是否仍然有效,使用lvdisplay查看快照的COW大小是否还有剩余。 用户可能遇到的问题包括:快照空间不足,导致还原不完整;或者在合并快照时系统崩溃,这时候需要了解如何修复。另外,可能需要备份重要数据再进行还原操作,以防万一。 总结一下步骤应该是:1. 查看现有逻辑快照;2. 卸载原的文件系统(如果可能);3. 使用lvconvert合并快照;4. 重新挂载并检查数据。或者,如果选择挂载快照复制数据,则需要挂载快照,备份数据,再覆盖原数据。 需要提醒用户注意快照的大小,以及操作前确保数据备份,避免误操作导致数据丢失。另外,不同的Linux发行版可能在命令细节上有所不同,需要参考具体文档。</think>以下是Linux LVM快照还原的核心步骤及原理说明: 一、LVM快照核心原理 1. 写时复制(Copy-on-Write) - 创建快照时仅记录元数据指针 - 当原数据被修改时,旧数据会先复制到快照空间 - 快照空间耗尽会导致快照失效 二、还原前的必要检查 1. 查看组状态: ```bash sudo vgdisplay ``` 2. 列出逻辑(含快照): ```bash sudo lvs -a -o +devices ``` 3. 验证快照有效性: ```bash sudo lvdisplay /dev/vg_name/snapshot_name ``` ▶ 关注"COW-table size"是否仍有剩余空间 三、两种主流还原方法 方法一:合并快照(推荐) 1. 卸载原(如无法卸载需进单用户模式): ```bash sudo umount /dev/vg_name/original_lv ``` 2. 执行合并操作: ```bash sudo lvconvert --merge /dev/vg_name/snapshot_name ``` 3. 重新挂载验证: ```bash sudo mount /dev/vg_name/original_lv /mnt ``` 方法二:手动覆盖 1. 挂载快照: ```bash sudo mount /dev/vg_name/snapshot_name /mnt/snapshot ``` 2. 同步数据(注意路径顺序): ```bash sudo rsync -aHAX --delete /mnt/snapshot/ /original_mount_point/ ``` 四、关键注意事项 1. 空间管理 - 快照大小建议为原的15-20% - 持续监控:`dmsetup status` 2. 时间窗口 - 合并操作耗时公式:$$T \approx \frac{S_{modified}}{R_{disk}}$$ ($S_{modified}$=修改数据量,$R_{disk}$=磁盘吞吐量) 3. 失败恢复 - 合并中断处理: ```bash sudo lvchange --refresh vg_name/original_lv ``` 五、最佳实践建议 1. 创建策略示例: ```bash sudo lvcreate -s -n db_snap -L 20G /dev/vg_data/db_lv ``` 2. 自动化监控脚本: ```bash #!/bin/bash SNAP=/dev/vg_data/db_snap THRESHOLD=90 USE_PERCENT=$(lvs $SNAP -o data_percent --noheadings) if (( $(echo "$USE_PERCENT > $THRESHOLD" | bc -l) )); then logger "LVM快照空间告警:${USE_PERCENT}%" fi ``` 六、常见问题处理 1. 合并失败:检查原是否处于激活状态 2. 数据不一致:合并前执行`fsfreeze`确保文件系统静默 3. 元数据损坏:使用`vgcfgrestore`恢复备份配置 建议在生产环境操作前,使用测试环境验证完整流程。对于关键业务系统,建议采用LVM快照+异地备份的双重保护策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源Linux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值