一个执着于技术的公众号
前言
在上一章节,我们学习了LVM逻辑卷管理技术,知道了LVM能够通过增减PE的数量来弹性调整文件系统的大小。除此之外,LVM还有另一个重要功能「LVM快照技术」,也就是可以给文件系统做一个备份。
LVM快照原理
❝在讲LVM之前,大家先思考一个问题;为什么不管多大的逻辑卷进行备份,快照都会在几秒之内完成?
❞
其实LVM快照采用写时复制技术(copy-on-wire,COW),即当LVM快照创建的一瞬间,系统会记录那个时间点逻辑卷的状态、数据等。此时拍下的快照相当于一张白纸。如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/84b7d02e2022fa1326c0cdaa04f0569d.png)
快照做好后,随着时间的推移,源卷里的东西会发生改变。如数据1、2改写成了A、B,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/86d40f5a704777b02e310cae437379b6.png)
此时lv源卷里发生改变的数据会转移到快照卷里面去。当恢复快照时,源卷会和快照进行合并,源卷里没有改变的数据+快照卷,就恢复到最初的状态
「注意」
快照卷空间大小不能设置太小,否则当源卷数据改变太大时,快照卷没法装下。快照卷大小封顶由卷组(VG)的大小决定。
快照与待备份的逻辑卷(LV)必须要在同一个VG下,否则创建快照会失败。
创建 LVM 快照
1、实验准备
在做LVM快照之前,我们先把逻辑卷创建出来:
1)事先准备4个分区
![](https://i-blog.csdnimg.cn/blog_migrate/f7cdb17ef34befe9a6aefbb5b968dd97.png)
2)创建PV
![](https://i-blog.csdnimg.cn/blog_migrate/b37e1fa91d92d9277436f18c13285231.png)
3)创建卷组vg1
![](https://i-blog.csdnimg.cn/blog_migrate/e79aaf350a87029afb60e0a6b81f3d35.png)
4)创建大小为10G的逻辑卷lv1
![](https://i-blog.csdnimg.cn/blog_migrate/37aaa6f9964edac54bab8b3b844b489b.png)
5)格式化&&挂载至/data下
![](https://i-blog.csdnimg.cn/blog_migrate/6eaf68ba97521660e36afd8a263a8018.png)
6)写入数据,以便后面实验验证
2、LVM快照实验
在创建快照之前,我们先查看下系统当前的LV及VG的使用情况
![](https://i-blog.csdnimg.cn/blog_migrate/c6119dcef32b9857ce16be3fe91de9f8.png)
通过查询,得知逻辑卷lv1大小为10G,所属卷组vg1;卷组vg1容量为40G,空闲容量还有30G。因此我们有足够的资源为逻辑卷lv1创建快照。
1、创建快照
![](https://i-blog.csdnimg.cn/blog_migrate/479d1e703893c5c14c66d3ef7d737b07.png)
参数解释:
-L:指定快照卷大小
--snapshot :指定创建类型为快照卷
--name:指定快照卷名称
/dev/vg1/lv1:代表要对lv1卷打快照
其实快照就是一个特殊类型的逻辑卷,跟创建逻辑卷的命令相同,也是lvcreate。
lvs
查询快照卷
![](https://i-blog.csdnimg.cn/blog_migrate/41dbdc79726e64b4e3a4e7a220fa47e4.png)
2、模拟数据受损,以便进行备份恢复
![](https://i-blog.csdnimg.cn/blog_migrate/fe97f5106ba68bcfedd700adf924f343.png)
❝这里代表原始数据是
❞hello world
,被恶意更改为hello worl
。现在我们采用「LVM快照回滚」找回我们的“重要数据”
3、挂载快照
![](https://i-blog.csdnimg.cn/blog_migrate/990547bfcf5c9e5714b1ae50053ec876.png)
「这里有个报错哦」
排错步骤如下:
1)根据提示,执行dmesg | tail
![](https://i-blog.csdnimg.cn/blog_migrate/a178871ec0041c6487bf4f3367c31304.png)
2)根据报错提示,无法挂载此UUID的磁盘。我们再查看下磁盘的UUID吧
![](https://i-blog.csdnimg.cn/blog_migrate/61e5c9319e482142c4ee0311208db42c.png)
这时会发现:逻辑卷lv1与快照卷lv1_snap001共用同一个UUID了。通过查询资料,得出以下结论:
❝如果逻辑卷使用的文件系统为xfs,挂载快照卷时会报错的。因为xfs不允许相同的UUID文件系统直接挂载(快照是LVM的克隆,因此UUID是一致的)。要解决这个办法,要么修改其UUID,要么带上
❞nouuid
参数,让文件系统忽略相同的UUID所造成的问题。
3)我们这里选择带上nouuid
参数,执行结果如下图:
问题解决,快照卷已挂载至/data_bak
4、还原数据
![](https://i-blog.csdnimg.cn/blog_migrate/577c641c32e9fdc19f069cf3df11f297.png)
❝以上实验是我们明确知道需要还原的某个文件,因此挂载快照卷,直接拷贝其快照卷中的文件即可。但是,当数据卷上有很多小文件,数据都有可能被改变。这种情况就不适用上面的方法了。接下来我们介绍还原数据卷上所有数据的方式。
❞
还原整个逻辑卷的数据
1、挂载快照卷2、把快照中的数据导出
本实验将快照卷的数据导至/opt目录
3、卸载数据卷&&格式化数据卷&&重新挂载
![](https://i-blog.csdnimg.cn/blog_migrate/400d97401ab3005fdc5fc2f4d65691ee.png)
此时数据卷已无数据,现在利用我们备份的数据进行恢复
4、把数据还原到源数据卷
![](https://i-blog.csdnimg.cn/blog_migrate/bda76278c29fa5fd8dae3ea7e7d1736d.png)
❝这样就把创建快照时刻的数据完全还原出来了,只不过操作有点繁琐。接下来,我们用一种更简单方法,利用「合并快照」两步搞定数据还原。
❞
合并快照(merge snapshot)
1、老规矩,先模拟大量重要数据受损,需要恢复整个逻辑卷的情况:
这里的大量文件,就特指test文件吧
![](https://i-blog.csdnimg.cn/blog_migrate/e3d4b65643ec9c4f753d895af7e2ebc9.png)
2、卸载数据卷和快照卷
![](https://i-blog.csdnimg.cn/blog_migrate/68bdb1b9607fae14a7d35e6bb9f0d1c0.png)
3、合并快照
确认源数据卷和快照数据卷都没有被挂载后就可以执行合并快照的操作了:![](https://i-blog.csdnimg.cn/blog_migrate/a216b06609f903267ae5d8eb360cb965.png)
注意,合并快照的操作会自动删除快照数据卷,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/68207b5f31ece83aa86c4537904d4d1b.png)
4、重新挂载源数据卷
test文件内容已变成“hello world”,说明整个数据卷上的内容已经被还原到了创建快照的时刻。
总结
快照是 LVM 中的一个稍微高级一点的话题,但仅就日常使用来说,本文介绍的常见用法足够大家愉快的开启探索之旅了。
往期精彩