设备映射器快照支持¶
设备映射器允许您在不进行大量数据复制的情况下
创建任何块设备的快照,即块设备的可安装、已保存状态,这些状态也是可写的,而不会干扰原始内容;
创建设备“分支”,即同一数据流的多个不同版本。
将块设备的快照合并回快照的原始设备中。
在前两种情况下,dm 仅复制发生更改的数据块,并使用单独的写时复制 (COW) 块设备进行存储。
对于快照合并,COW 存储的内容将合并回原始设备中。
有三个可用的 dm 目标:snapshot、snapshot-origin 和 snapshot-merge。
snapshot-origin <origin>
它通常有一个或多个基于它的快照。读取将直接映射到后备设备。对于每次写入,原始数据将保存在每个快照的 <COW 设备> 中,以保持其可见内容不变,至少在 <COW 设备> 填满之前。
snapshot <origin> <COW device> <persistent?> <chunksize> [<# feature args> [<arg>]*]
创建 <origin> 块设备的快照。<chunksize> 扇区的已更改块将存储在 <COW 设备> 上。写入只会转到 <COW 设备>。读取将来自 <COW 设备> 或 <origin>(对于未更改的数据)。<COW 设备> 通常小于原始设备,如果它填满,快照将变得无用并被禁用,从而返回错误。因此,监视可用空间量并在 <COW 设备> 填满之前扩展它非常重要。
<persistent?> 是 P (Persistent) 或 N (Not persistent - 重启后不会存在)。可以添加 O (Overflow) 作为持久存储选项,以允许用户空间声明其支持在快照状态中看到 “Overflow”。因此,支持的存储类型为 “P”、“PO” 和 “N”。
持久快照和瞬时快照之间的区别在于,对于瞬时快照,必须在磁盘上保存的元数据较少 - 它们可以由内核保存在内存中。
在加载或卸载快照目标时,必须暂停相应的 snapshot-origin 或 snapshot-merge 目标。未能暂停原始目标可能会导致数据损坏。
可选功能
discard_zeroes_cow - 发送到快照设备的丢弃映射到整个块,将清零快照异常存储中的相应异常。
discard_passdown_origin - 发送到快照设备的丢弃将传递到 snapshot-origin 的底层设备。这不会导致复制到快照异常存储,因为 snapshot-origin 目标被绕过了。
discard_passdown_origin 功能取决于是否启用了 discard_zeroes_cow 功能。
snapshot-merge <origin> <COW device> <persistent> <chunksize> [<# feature args> [<arg>]*]
采用与快照目标相同的表参数,但它仅适用于持久快照。此目标承担 “snapshot-origin” 目标的角色,如果 <origin> 的 “snapshot-origin” 仍然存在,则不得加载。
创建一个合并快照,通过切换程序控制现有快照的 <COW 设备> 中存储的已更改块,并将这些块合并回 <origin>。一旦合并开始(在后台),可以打开 <origin>,并且当 I/O 流向它时,合并将继续。对 <origin> 的更改将被推迟,直到合并快照的相应块已合并。一旦合并开始,与 “snapshot” 目标关联的快照设备将在访问时返回 -EIO。
LVM2 如何使用快照¶
当您创建卷的第一个 LVM2 快照时,将使用四个 dm 设备
一个包含源卷的原始映射表的设备;
一个用作 <COW 设备> 的设备;
一个组合 #1 和 #2 的 “快照” 设备,它是可见的快照卷;
“原始” 卷(使用原始源卷使用的设备号),其表被来自设备 #1 的 “snapshot-origin” 映射替换。
使用固定的命名方案,因此使用以下命令
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 如何使用 snapshot-merge¶
合并快照在合并时承担 “snapshot-origin” 的角色。因此,“snapshot-origin” 被 “snapshot-merge” 替换。“-real” 设备不会更改,“-cow” 设备将重命名为 <origin name>-cow,以帮助 LVM2 在合并快照完成后进行清理。将 COW 设备移交给 “snapshot-merge” 的 “snapshot” 将被停用(除非使用 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
如何确定合并何时完成¶
snapshot-merge 和快照状态行以以下内容结尾
<sectors_allocated>/<total_sectors> <metadata_sectors>
<sectors_allocated> 和 <total_sectors> 都包括数据和元数据。在合并期间,已分配的扇区数越来越小。当保存数据的扇区数为零时,合并完成,换句话说 <sectors_allocated> == <metadata_sectors>。
这是一个实际示例(使用 lvm 和 dmsetup 命令的混合)
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
base volumeGroup owi-a- 4.00g
snap volumeGroup swi-a- 1.00g base 18.97
# dmsetup status volumeGroup-snap
0 8388608 snapshot 397896/2097152 1560
^^^^ metadata sectors
# lvconvert --merge -b volumeGroup/snap
Merging of volume snap started.
# lvs volumeGroup/snap
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
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 Origin Snap% Move Log Copy% Convert
base volumeGroup owi-a- 4.00g