mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
[PATCH] Add dm-snapshot tutorial in Documentation
I've recently discovered the real functionality of device-mapper snapshots, and since they are not well known, I've decided to write some docs for them. Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Alasdair G Kergon <agk@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
10d2c46f94
commit
e484585ec3
1 changed files with 73 additions and 0 deletions
73
Documentation/device-mapper/snapshot.txt
Normal file
73
Documentation/device-mapper/snapshot.txt
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
Device-mapper snapshot support
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Device-mapper allows you, without massive data copying:
|
||||||
|
|
||||||
|
*) To create snapshots of any block device i.e. mountable, saved states of
|
||||||
|
the block device which are also writable without interfering with the
|
||||||
|
original content;
|
||||||
|
*) To create device "forks", i.e. multiple different versions of the
|
||||||
|
same data stream.
|
||||||
|
|
||||||
|
|
||||||
|
In both cases, dm copies only the chunks of data that get changed and
|
||||||
|
uses a separate copy-on-write (COW) block device for storage.
|
||||||
|
|
||||||
|
|
||||||
|
There are two dm targets available: snapshot and snapshot-origin.
|
||||||
|
|
||||||
|
*) snapshot-origin <origin>
|
||||||
|
|
||||||
|
which will normally have one or more snapshots based on it.
|
||||||
|
You must create the snapshot-origin device before you can create snapshots.
|
||||||
|
Reads will be mapped directly to the backing device. For each write, the
|
||||||
|
original data will be saved in the <COW device> of each snapshot to keep
|
||||||
|
its visible content unchanged, at least until the <COW device> fills up.
|
||||||
|
|
||||||
|
|
||||||
|
*) snapshot <origin> <COW device> <persistent?> <chunksize>
|
||||||
|
|
||||||
|
A snapshot is created of the <origin> block device. Changed chunks of
|
||||||
|
<chunksize> sectors will be stored on the <COW device>. Writes will
|
||||||
|
only go to the <COW device>. Reads will come from the <COW device> or
|
||||||
|
from <origin> for unchanged data. <COW device> will often be
|
||||||
|
smaller than the origin and if it fills up the snapshot will become
|
||||||
|
useless and be disabled, returning errors. So it is important to monitor
|
||||||
|
the amount of free space and expand the <COW device> before it fills up.
|
||||||
|
|
||||||
|
<persistent?> is P (Persistent) or N (Not persistent - will not survive
|
||||||
|
after reboot).
|
||||||
|
|
||||||
|
|
||||||
|
How this is used by LVM2
|
||||||
|
========================
|
||||||
|
When you create the first LVM2 snapshot of a volume, four dm devices are used:
|
||||||
|
|
||||||
|
1) a device containing the original mapping table of the source volume;
|
||||||
|
2) a device used as the <COW device>;
|
||||||
|
3) a "snapshot" device, combining #1 and #2, which is the visible snapshot
|
||||||
|
volume;
|
||||||
|
4) the "original" volume (which uses the device number used by the original
|
||||||
|
source volume), whose table is replaced by a "snapshot-origin" mapping
|
||||||
|
from device #1.
|
||||||
|
|
||||||
|
A fixed naming scheme is used, so with the following commands:
|
||||||
|
|
||||||
|
lvcreate -L 1G -n base volumeGroup
|
||||||
|
lvcreate -L 100M --snapshot -n snap volumeGroup/base
|
||||||
|
|
||||||
|
we'll have this situation (with volumes in above order):
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
Loading…
Reference in a new issue