设备映射器快照支持
==============================
Device-mapper允许您,无需大量数据复制:
*)创建任何块设备的快照。这种快照可挂载、可存储块设备状态,且在不干扰原内容的情况下实现可读写。
*)创建设备“复制件”。即对相同数据流制作多种不同版本。
*)将块设备的快照合并回快照的原点设备。
在前两种情况下,dm只复制修改过的数据块,并使用一个独立的写时复制块设备来存储。
对于快照合并,COW存储的内容将合并回原始设备。
dm有三种可用的目标设备:
快照,快照源和快照合并。
*)snapshot-origin <origin>
通常会有一个或多个基于它的快照。
读取将直接映射到设备。对于每次写,原始数据将复制到每个快照的<COW设备>中,保持快照源可见内容不变,至少在<COW设备>填满之前。
*)snapshot <origin> <COW device> <persistent?> <chunksize>
创建<origin>块设备的快照。
改变过的扇区数据将存储在<COW设备>上。
写只会修改cow设备上的数据。
读取将从<COW设备>获取,或从<origin>获取未更改的数据。
<COW设备>通常是小于原设备,如果它被填满,快照将失效,被禁用,返回错误。所以监控cow设备剩余空间很重要,在cow设备空间耗尽之前扩展<COW设备>。
<persistent?> P(持久)或N(不持久-重启后失效)。O(溢出)可以添加为持久存储选项,
允许用户空间在快照状态报告对“溢出”查看的支持。因此支持的存储类型有“P”,“PO”和“N”。
持久性存储和暂时性存储之间的差异是:暂时性存储的快照具有更少的必须保存在磁盘上的数据-它们可以被内核保存在内存。
在加载或卸载快照目标时,相应的快照源或快照合并目标必须被暂停。对原始目标的暂停失败,可能会导致数据损坏。
* snapshot-merge <origin> <COW device> <persistent> <chunksize>
获取与快照目标相同的表参数,除非它只使用持久性快照。该目标承担了“snapshot-origin”目标的角色,在“snapshot-origin”依然以原设备而存在时禁止加载。
创建合并快照,通过切换过程,将这些块合并回<origin>。合并启动后(在后台),<origin>可能会被打开,当I/O流向它时合并将继续。
此时对<origin>的更改将推迟到合并完成。
一旦合并启动了与之关联的快照设备,在访问时将返回-EIO。
LVM2如何使用快照
============================
创建卷的第一个LVM2快照时,将使用四个dm设备:
1)包含源卷原始映射表的设备;
2)用于制作<COW设备>的设备;
3)“快照”设备,组合#1和#2,这是可见快照卷;
4)“原始”卷(使用原始的源卷的设备号),其表由来自设备#1的源快照映射替代。
使用固定的命名方案,因此使用以下命令:
lvcreate -L 1G -n base volumeGroup
lvcreate -L 100M --snapshot -n snap volumeGroup / base
我们会遇到这种情况(按上述顺序排列):
#dmsetup table | grep volumeGroup
volumeGroup-base-real:0 2097152 linear 8:19 384
volumeGroup-snap-cow:0 204800 linear 8:19 2097536
volumeGroup-snap:0 2097152 snapshot 254:11 254:12 P 16
volumeGroup-base:0 2097152 snapshot-origin 254:11
#ls -lL / dev / mapper / volumeGroup- *
brw ------- 1 root root 254,11 29 ago 18:15 / dev / mapper / volumeGroup-base-real
brw ------- 1 root root 254,12 29 ago 18:15 / dev / mapper / volumeGroup-snap-cow
brw ------- 1 root root 254,13 29 ago 18:15 / dev / mapper / volumeGroup-snap
brw ------- 1 root root 254,10 29 ago 18:14 / dev / mapper / volumeGroup-base
LVM2如何使用快照合并
==================================
合并快照假定“快照原点”的作用
合并。因此,“快照原点”被替换为
“快照合并”。“-real”设备没有改变,“-cow”
设备重命名为<origin name> -cow以帮助LVM2清理
完成后合并快照。交出它的“快照”
“快照合并”的COW设备已停用(除非使用lvchange
--refresh); 但如果它处于活动状态,它将只返回I / O错误。
快照将使用以下命令合并到其原点:
lvconvert --merge volumeGroup / snap
我们现在有这种情况:
#dmsetup table | grep volumeGroup
volumeGroup-base-real:0 2097152 linear 8:19 384
volumeGroup-base-cow:0 204800 linear 8:19 2097536
volumeGroup-base:0 2097152 snapshot-merge 254:11 254:12 P 16
#ls -lL / dev / mapper / volumeGroup- *
brw ------- 1 root root 254,11 29 ago 18:15 / dev / mapper / volumeGroup-base-real
brw ------- 1 root root 254,12 29 ago 18:16 / dev / mapper / volumeGroup-base-cow
brw ------- 1 root root 254,10 29 ago 18:16 / dev / mapper / volumeGroup-base
如何确定合并何时完成
===========================================
快照合并和快照状态行以:
<sectors_allocated> / <total_sectors> <metadata_sectors>
<sectors_allocated>和<total_sectors>都包括数据和元数据。
在合并期间,分配的扇区数量变小
小。当持有数据的扇区数量时,合并已完成
为零,换句话说<sectors _allocated> == <metadata_sectors>。
这是一个实际的例子(使用lvm和dmsetup命令的混合):
#lvs
LV VG Attr LSize原点捕捉%移动日志副本%转换
base volumeGroup owi-a- 4.00g
snap volumeGroup swi-a- 1.00g base 18.97
#dmsetup status volumeGroup-snap
0 8388608快照397896/2097152 1560
^^^^元数据扇区
#lvconvert --merge -b volumeGroup / snap
开始合并音量快照。
#lvs volumeGroup / snap
LV VG Attr LSize原点捕捉%移动日志副本%转换
base volumeGroup Owi-a- 4.00g 17.23
#dmsetup status volumeGroup-base
0 8388608 snapshot-merge 281688/2097152 1104
#dmsetup status volumeGroup-base
0 8388608 snapshot-merge 180480/2097152 712
#dmsetup status volumeGroup-base
0 8388608 snapshot-merge 16/2097152 16
合并已经完成。
#lvs
LV VG Attr LSize原点捕捉%移动日志副本%转换
base volumeGroup owi-a- 4.00g