snapfsck.bash
changeset 0 1ce20afb2058
child 1 8088d7da74bf
equal deleted inserted replaced
-1:000000000000 0:1ce20afb2058
       
     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