snapfsck.sh
changeset 6 12744a06a554
parent 5 fdaedf474996
child 7 bd12aa54868e
equal deleted inserted replaced
5:fdaedf474996 6:12744a06a554
       
     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