# HG changeset patch # User Matthias Förste foerste@schlittermann.de # Date 1312962354 -7200 # Node ID 1ce20afb2058c3d625bf0df04b7207e68c3bcb33 import diff -r 000000000000 -r 1ce20afb2058 Makefile --- /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 $@ diff -r 000000000000 -r 1ce20afb2058 snapfsck.bash --- /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// + or + $0 / + but not (yet?) + $0 /dev/mapper/- +__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