equal
deleted
inserted
replaced
|
1 #!/bin/bash |
|
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 /dev/<vgname>/<lvname> |
|
23 or |
|
24 $0 <vgname>/<lvname> |
|
25 but not (yet?) |
|
26 $0 /dev/mapper/<vgname>-<lvname> |
|
27 __U |
|
28 |
|
29 exit -1 |
|
30 |
|
31 } |
|
32 |
|
33 p=${1:?device required} |
|
34 p=${p#/dev} |
|
35 vg=${p%%/*} |
|
36 lv=${p##*/} |
|
37 lvs="snap.${lv}" |
|
38 |
|
39 [ -n "${vg}" -a -n "${lv}" -a "${vg}" != "${p}" -a "${lv}" != "${p}" ] || usage |
|
40 |
|
41 lvcreate -n"$lvs" -L"$SNAPSIZE" -s "$vg/$lv" || die |
|
42 if e2fsck -p "/dev/$vg/$lvs"; then |
|
43 tune2fs -C 1 -T now "/dev/$vg/$lv" || die |
|
44 # removing /dev/$vg/snap.$lv or just $vg/snap.$lv does not work reliably |
|
45 # removing /dev/mapper/$vg-snap.$lv does not work reliably either |
|
46 waittime=1 # second |
|
47 tries=60 |
|
48 i=1 |
|
49 until lvremove -f "$vg/$lvs"; do |
|
50 if [ $i -lt $tries ]; then |
|
51 warn retrying |
|
52 sleep $waittime |
|
53 i=$((i+1)) |
|
54 else |
|
55 die giving up |
|
56 fi |
|
57 done |
|
58 else |
|
59 die fsck failed |
|
60 fi |