aboutsummaryrefslogtreecommitdiff
path: root/lvm-snapshot.sh
blob: 49914953fefbf2964326e0eed04eac4a48d993b5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/sh
set -e

vg="x230"
lv="root"
snap_name="${lv}-snap"
mountpoint="/mnt/snap"
PERCENT="100"

mount_fs() {
	_device="$1"; shift
	_opts="nouuid,rw"
	_mntpoint="$1"; shift
	if ! [ -d "$_mntpoint" ] ; then
		mkdir "$_mntpoint"
	fi
	mount -o "$_opts" "$_device" "$_mntpoint"
}

# If snapshot doesn't exist
if ! lvm lvs "$vg/$snap_name" >/dev/null 2>&1 ; then
	lvm lvcreate "$vg/$lv" -s --name "$snap_name" -l "${PERCENT}%ORIGIN"
	mount_fs "/dev/$vg/$snap_name" "$mountpoint"
	sed -i.bak -r "s@(/dev/${vg}/${lv})@\1${snap_name}@" \
		"$mountpoint/etc/fstab"
	umount "$mountpoint"
else
	printf 'Cannot continue snapshot "%s" already exists.\n' \
			"$vg/$snap_name"
	exit 1;
fi