equal
deleted
inserted
replaced
|
1 #!/bin/sh |
|
2 |
|
3 SNAPSIZE='500M' |
|
4 |
|
5 warn() { |
|
6 echo $@ >&2 |
|
7 } |
|
8 |
|
9 die() { |
|
10 if [ $# -ne 0 ]; then |
|
11 echo $@ >&2 |
|
12 else |
|
13 echo something went wrong |
|
14 fi |
|
15 exit -1 |
|
16 } |
|
17 |
|
18 usage() { |
|
19 |
|
20 cat <<__U |
|
21 usage: |
|
22 $0 [-s snapsize] /dev/<vgname>/<lvname> |
|
23 or |
|
24 $0 [-s snapsize] <vgname>/<lvname> |
|
25 but not (yet?) |
|
26 $0 [-s snapsize] /dev/mapper/<vgname>-<lvname> |
|
27 __U |
|
28 |
|
29 exit -1 |
|
30 |
|
31 } |
|
32 |
|
33 while getopts "s:" opt; do |
|
34 case $opt in |
|
35 s) |
|
36 SNAPSIZE="$OPTARG" |
|
37 ;; |
|
38 \?) |
|
39 usage |
|
40 ;; |
|
41 esac |
|
42 done |
|
43 shift $((OPTIND-1)) |
|
44 |
|
45 p=${1:?device required} |
|
46 p=${p#/dev/} |
|
47 vg=${p%/*} |
|
48 lv=${p##*/} |
|
49 lvs="snap.${lv}" |
|
50 |
|
51 [ -n "${vg}" -a -n "${lv}" -a "${vg}" != "${p}" -a "${lv}" != "${p}" ] || usage |
|
52 |
|
53 d=$(date +%Y%m%d%H%M%S) |
|
54 lvcreate -n"$lvs" -L"$SNAPSIZE" -s "$vg/$lv" || die |
|
55 if e2fsck -fp "/dev/$vg/$lvs"; then |
|
56 tune2fs -C 1 -T "$d" "/dev/$vg/$lv" || die |
|
57 waittime=1 # second |
|
58 tries=60 |
|
59 i=1 |
|
60 # if you have problems removing volumes then you may have the 'udisks' |
|
61 # package installed; see: |
|
62 # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549691#74 |
|
63 # https://bugzilla.redhat.com/show_bug.cgi?id=577798#c5 |
|
64 # https://www.redhat.com/archives/linux-lvm/2010-August/msg00029.html |
|
65 lvremove -f "$vg/$lvs" || die |
|
66 else |
|
67 die fsck returned nonzero: this may indicate filesystem corruption on the origin volume. The snapshot has not been removed. |
|
68 fi |