import
authorMatthias Förste foerste@schlittermann.de
Wed, 10 Aug 2011 09:45:54 +0200
changeset 0 1ce20afb2058
child 1 8088d7da74bf
import
Makefile
snapfsck.bash
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Wed Aug 10 09:45:54 2011 +0200
@@ -0,0 +1,17 @@
+# Makefile
+DESTDIR = 
+prefix = /usr/local
+sbindir = $(prefix)/sbin
+
+objects = snapfsck
+all:	$(objects)
+install: $(objects)
+	install -m 0755 -d ${DESTDIR}${sbindir}
+	install -m 0755 snapfsck ${DESTDIR}${sbindir}/
+
+clean:
+	-rm -f $(objects)
+
+%:	%.bash
+	cp -f $< $@
+	chmod +x-w $@
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/snapfsck.bash	Wed Aug 10 09:45:54 2011 +0200
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+SNAPSIZE='500M'
+
+warn() {
+    echo $@ >&2
+}
+
+die() {
+    if [ $# -ne 0 ]; then
+	echo $@ >&2
+    else
+	echo something went wrong
+    fi
+    exit -1
+}
+
+usage() {
+
+cat <<__U
+usage:
+ $0 /dev/<vgname>/<lvname>
+ or
+ $0 <vgname>/<lvname>
+ but not (yet?)
+ $0 /dev/mapper/<vgname>-<lvname>
+__U
+
+exit -1
+
+}
+
+p=${1:?device required}
+p=${p#/dev}
+vg=${p%%/*}
+lv=${p##*/}
+lvs="snap.${lv}"
+
+[ -n "${vg}" -a -n "${lv}" -a "${vg}" != "${p}" -a "${lv}" != "${p}" ] || usage
+
+lvcreate -n"$lvs" -L"$SNAPSIZE" -s "$vg/$lv" || die
+if e2fsck -p "/dev/$vg/$lvs"; then
+    tune2fs -C 1 -T now "/dev/$vg/$lv" || die
+    # removing /dev/$vg/snap.$lv or just $vg/snap.$lv does not work reliably
+    # removing /dev/mapper/$vg-snap.$lv does not work reliably either
+    waittime=1 # second
+    tries=60
+    i=1
+    until lvremove -f "$vg/$lvs"; do
+        if [ $i -lt $tries ]; then
+            warn retrying
+            sleep $waittime
+            i=$((i+1))
+        else
+            die giving up
+        fi
+    done
+else
+    die fsck failed
+fi