aboutsummaryrefslogtreecommitdiff
path: root/lvm-snapshot.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lvm-snapshot.sh')
-rw-r--r--lvm-snapshot.sh31
1 files changed, 31 insertions, 0 deletions
diff --git a/lvm-snapshot.sh b/lvm-snapshot.sh
new file mode 100644
index 0000000..4991495
--- /dev/null
+++ b/lvm-snapshot.sh
@@ -0,0 +1,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