LVM : 快照_玖富娱乐主管发布


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

LVM 机制还供应了对 LV 做快照的功用,也就是说能够给文件体系做一个备份,这也是设想 LVM 快照的重要目标。LVM 的快照功用接纳写时复制手艺(Copy-On-Write,COW),这比传统的备份手艺的效力要高许多。建立快照时不消住手效劳,就能够对数据举行备份。申明:LVM 还支撑 thin 范例的快照,然则本文中的快照都是指 COW 范例的快照。

LVM 接纳的写时复制,是指当 LVM 快照建立的时候,仅建立到现实数据的 inode 的硬链接(hark-link)罢了。只需现实的数据没有转变,快照就只包罗指向数据的 inode 的指针,而非数据自身。快照会跟踪原始卷中块的转变,一旦你更改了快照对应的文件或目次,这个时候原始卷上将要转变的数据会在转变之前拷贝到快照预留的空间。

LVM 快照的道理

建立快照现实上也是建立了一个逻辑卷,只不过该卷的属性与一般逻辑卷的属性有些不一样。我们能够经由过程下图来明白快照数据卷(图中的实线框透露表现快照地区,虚线框透露表现文件体系):

左图为最后建立的快照数据卷状态,LVM 会预留一个地区 (好比左图的左边三个 PE 区块) 作为数据寄存处。 此时快照数据卷内并没有任何数据,而快照数据卷与源数据卷同享一切的 PE 数据, 因而你会看到快照数据卷的内容与源数据卷中的内容是如出一辙的。 比及体系运转一阵子后,假定 A 地区的数据被更新了(上面右图所示),则更新前体系会将该地区的数据移动到快照数据卷中, 以是在右图的快照数据卷中被占用了一块 PE 成为 A,而其他 B 到 I 的区块则照样与源数据卷同享!

由於快照区与底本的 LV 同享许多 PE 区块,因而快照区与被快照的 LV 必须要在同一个 VG 上头,下面两点非常重要:

  • VG中须要预留寄存快照自身的空间,不克不及悉数被占满。
  • 快照地点的 VG 必需与被备份的 LV 雷同,不然建立快照会失利。

建立 LVM 快照

在建立快照前让我们先检察一下体系以后的基本情况:

数据卷 nicklv00 巨细为 15G,在卷组 nickvg 中。

卷组 nickvg 的容量为 70G,个中有 55G 为余暇容量,以是我们有充足的资本为数据卷 nickvg/nicklv00 建立快照。
实在快照就是一个特别范例的数据卷,以是建立快照的敕令和建立数据卷的敕令雷同,也是 lvcreate:

$ sudo lvcreate -L 15G --snapshot --name nicksnap00 nickvg/nicklv00

实在就是添加了一个特别范例的 LV:

此时若是把 LV nicksnap00 挂载到体系中,内里的内容和 LV nicklv00 中的内容是一样的。
建立的快照的巨细能够比源数据卷小,然则当源数据卷中的数据更新过量时会致使快照容量缺乏而引发的毛病并丧失数据。

建立快照后,若是源数据卷中的文件被更新了,快照体系中则保存着其建立快照时的版本。

复原局部数据

若是我们明白的晓得须要复原某个文件,能够挂载快照数据卷,直接拷贝个中旧版本的文件便可。下面以 /home/doc/hello.txt 文件为了举行演示。hello.txt 文件底本的内容为 "hello world",先更新一下 hello.txt 文件:

我们在文件中加入了一句话:"I changed you!"。接下来我们最先经由过程快照来复原这个文件。

挂载快照数据卷

检察快照中的文件内容:

验明正身后直接经由过程 cp 敕令掩盖原文件就能够了:

复原全部数据卷上的数据

若是数据卷上有许多小文件,而且都可能会被更新,这类情况下就不合适用上面的要领了。此时一把复原一切的数据会效力更高些,接下来我们引见复原全部数据卷上一切数据的体式格局。

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-

挂载快照数据卷
这一步与之前的操纵雷同,挂载点也一样为 /home/nick/bak 目次。

把快照中的数据导出到别的一个数据卷上
建立一个新的目次 /home/nick/backup,注重这个目次地点的文件体系既不是源数据卷也不是快照数据卷。然后把快照数据卷中的内容建立为压缩文件保存在 /home/nick/backup 目次中:

为何要把数据备份到别的的数据卷呢?为何不克不及够直接格式化 nickvg/nicklv00 然后将快照 nickvg/nicksnap00 直接复制给 nickvg/nicklv00 呢? 缘由是因为 nickvg/nicksnap00 是 nickvg/nicklv00 的快照,若是格式化全部 nickvg/nicklv00,那末nickvg/nicklv00 上的一切数据都会被搬移到 nickvg/nicksnap00。 若是 nickvg/nicksnap00 的容量不够大,那末局部数据将没法复制到 nickvg/nicksnap00 内!

卸载并删除快照数据卷

$ sudo umount /home/nick/bak
$ sudo lvremove nickvg/nicksnap00

卸载源数据卷,格式化后从新挂载

$ sudo umount /home/doc
$ sudo mkfs.ext4 /dev/nickvg/nicklv00
$ sudo mount /dev/mapper/nickvg-nicklv00 /home/doc

把数据复原到源数据卷

$ sudo tar -xf /home/nick/backup/lvm.tar.gz -C /home/doc

如许就把建立快照时候的数据完整复原出来了。

兼并快照(merge snapshot)

前面引见的要领能够规复全部数据卷上的数据,然则操纵起来实在是太烦琐了,实在我们能够经由过程 lvconvert 敕令合营其 --merge 选项一把搞定全部数据卷的复原。下面演示该要领的重要步调。

建立快照
因为前面的演示删除快照数据卷,这里我们从新建立名称为 nicksnap00 的快照数据卷:

$ sudo lvcreate -L 15G --snapshot --name nicksnap00 nickvg/nicklv00

然后更新一下文件 /home/doc/hello.txt:

$ echo "I changed you!" >> /home/doc/hello.txt 

卸载源数据卷
兼并快照的操纵也须要卸载源数据卷:

$ sudo umount /home/doc

兼并快照
确认源数据卷和快照数据卷都没有被挂载后就能够实行兼并快照的操纵了:

$ sudo lvconvert --merge nickvg/nicksnap00

 

注重,兼并快照的操纵会自动删除快照数据卷:

上图显现快照数据卷 nicksnap00 已被删除。

从新挂载源数据卷
如今我们来从新挂载源数据卷并检察文件 hello.txt 的内:

$ sudo mount /dev/mapper/nickvg-nicklv00 /home/doc
$ cat /home/doc/hello.txt

hello.txt 文件中没有字符串 "I changed you!",申明全部数据卷上的内容已被复原到了建立快照的时候。

应用快照建立测试情况

若是我们须要在测试情况中赓续的修正文件,就能够应用快照来建立如许的测试情况。想想看,对一个数据卷建立快照,然后把这个快照数据卷挂载到体系中并作为测试情况恣意地修正上面的数据;当测试完成时直接卸载并删除这个快照就能够了;若是还须要如许的测试情况,再建立一个新的快照就好了,是否是很轻易呢!

总结

快照是 LVM 中的一个轻微高等一点的话题,但仅就一样平常的运用来讲,本文引见的罕见用法充足人人兴奋的开启探索之旅了。

参考:
LVM 快照
LVM 的体系快照
lvm 逻辑卷的快照及备份 复原
在 LVM中 录制逻辑卷快照并规复
LVM Snapshot Merging

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。